微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

处理动画问题

如何解决处理动画问题

我回来回答另一个处理问题。这次是关于动画的。我正在尝试为我的团队的角色精灵制作一个简单的动画,但效果不佳。

我试图通过观看教程来修复它,但它们没有帮助。其中大部分是不适合游戏的通用动画(例如使圆圈像气泡一样漂浮或像球一样下落),并且与游戏相关的教程很少而且介于两者之间。大多数涉及的精灵表,我们没有使用的东西,以及我和我的朋友观看和实施的那些也不起作用。

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

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,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],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,150);
  if (inMotion) {
    image(playerImages[(playerImages.length/walkSpeed)*((frameCount - motionFrameStart)%walkSpeed)],posX,posY,width,height);
  } else {
    image(playerImages[1],height);
  }
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。