处理动画问题



我带着另一个处理问题回来了。这次是关于动画的。我试图为我的团队的角色精灵制作一个简单的动画,但效果不太好。

我试着通过看教程来修复它,但它们没有帮助。其中大多数都是不适合游戏的普通动画(比如让圆圈像气泡一样漂浮或像球一样下落(,与游戏相关的教程也很少。大多数涉及的精灵表,我们没有使用的东西,以及我和朋友观看和实现的精灵表也不起作用。

动画应该是一个简单的三帧步行循环。目前,代码接近我们想要做的,它显示的是角色,但帧是重叠的,而不是运行动画。以下是动画专用代码:

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()块在每个帧之间运行。计算机做的事情是这样的:

  1. 运行setup()块的内容
  2. 在屏幕上显示结果
  3. 运行draw()
  4. 在屏幕上显示结果
  5. 重复步骤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);
}
}

在该版本中,当您按下某个键时,计算机会保存开始行走时的帧,然后根据按下该按钮后显示的帧数计算要使用的行走图片。

最新更新