【问题标题】:Processing Animation Troubles处理动画问题
【发布时间】:2021-05-08 16:46:19
【问题描述】:

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

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

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

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);
  }
}

如果我们有更好的方法来处理这个问题,请告诉我们!

【问题讨论】:

    标签: java animation processing


    【解决方案1】:

    在处理中,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);
      }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-03
      • 2011-09-18
      • 2013-06-08
      • 2010-09-26
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 2017-02-12
      相关资源
      最近更新 更多