java - 处理动画问题
问题描述
我回来了另一个处理问题。这次是关于动画。我正在尝试为我小组的角色精灵制作一个简单的动画,但效果不太好。
我试图通过观看教程来解决它,但它们没有帮助。其中大部分是非游戏的一般动画(例如使圆圈像气泡一样漂浮或像球一样落下),而与游戏相关的教程很少而且介于两者之间。大多数涉及的精灵表,我们没有使用的东西,我和我的朋友观看和实施的那些也不起作用。
动画应该是一个简单的三帧步行循环。目前,代码接近我们想要做的,它正在显示角色,但帧是重叠的,而不是运行动画。这是专用于动画的代码:
public void keyPressed() {
if (key == CODED) {
if (keyCode == LEFT) {
inMotion = true;
System.out.println("Left");
posX = posX - 5;
} else if (keyCode == RIGHT) {
inMotion = true;
posX = posX + 5;
System.out.println("Right");
} else {
inMotion = false;
}
}
}
public void draw() {
background(bg_game);
fill(50, 10, 10, 150);
if (inMotion) {
//System.out.println("CHar is in motion");
for (int i = 0; i < 3; i++) {
System.out.println(i);
image(playerImages[i], posX, posY, width, height);
if (!(i < 3)) {
i=0; //restarts for loop
}
}
} else {
image(playerImages[1], posX, posY, width, height);
}
}
如果我们有更好的方法来处理这个问题,请告诉我们!
解决方案
在处理中,draw()
块在每帧之间运行。计算机执行以下操作:
- 运行
setup()
块的内容 - 在屏幕上显示结果
- 运行
draw()
块 - 在屏幕上显示结果
- 重复步骤 3 和 4
因此,当您将for
循环放入 中时draw()
,它会执行以下操作:
- 渲染第一个行走帧
- 渲染第二个行走框架(在第一个之上)
- 渲染第三个行走框架(在其他框架之上)
- 在屏幕上显示结果
这清楚地同时显示了所有三个帧,而不会在不同帧上循环显示它们。你可能会做这样的事情:
int motionFrameStart = 0;
float walkSpeed = 20;//number of frames in a full cycle of walking
public void keyPressed() {
if (key == CODED) {
motionFrameStart = frameCount;
//... the rest of your keyPressed() code
}
}
public void draw() {
background(bg_game);
fill(50, 10, 10, 150);
if (inMotion) {
image(playerImages[(playerImages.length/walkSpeed)*((frameCount - motionFrameStart)%walkSpeed)], posX, posY, width, height);
} else {
image(playerImages[1], posX, posY, width, height);
}
}
在此版本中,当您按下某个键时,计算机会保存开始步行时的帧,然后根据自按下按钮后显示的帧数计算要使用的步行图片。
推荐阅读
- data-visualization - 水平箱线图Stata
- java - Java日历以毫秒为单位返回错误时间Android
- vue.js - Vue $emit 事件触发但是 this.$root.$on 什么都不做
- scala - sbt 中的项目文件夹
- r - 使用 mutate across 将回归模型应用于每一列
- python - 没有名为 elasticsearch 的模块-Python 3.7.9-Windows 10
- nginx - 当 URL 包含文件扩展名时,我可以在 nginx 中返回 404 吗?
- python - 如何开始为 python IDLE 开发扩展?
- plsql - 在 PL/SQL 的 DECLARE 部分中未初始化的变量会发生什么?
- sql - 什么导致 SQL Server Management Studio 中的视图为空?