Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理动画问题_Java_Animation_Processing - Fatal编程技术网

Java 处理动画问题

Java 处理动画问题,java,animation,processing,Java,Animation,Processing,我回来问另一个处理问题。这次是关于动画的。我正在尝试为我的团队的角色sprite制作一个简单的动画,但效果不太好 我试图通过观看教程来解决这个问题,但它们没有帮助。其中大多数都是不适合游戏的普通动画(如使圆圈像泡泡一样漂浮或像球一样下落),与游戏相关的教程很少。大多数涉及到SpriteSheet,我们没有使用,我和朋友们观看并实现的SpriteSheet也不起作用 动画应该是一个简单的三帧行走循环。目前,代码与我们要做的很接近,它正在显示角色,但是帧是重叠的,而不是运行动画。以下是专用于动画的代

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

我试图通过观看教程来解决这个问题,但它们没有帮助。其中大多数都是不适合游戏的普通动画(如使圆圈像泡泡一样漂浮或像球一样下落),与游戏相关的教程很少。大多数涉及到SpriteSheet,我们没有使用,我和朋友们观看并实现的SpriteSheet也不起作用

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

public void键按下(){
如果(键==编码){
if(keyCode==左){
inMotion=真;
系统输出打印项次(“左”);
posX=posX-5;
}else if(keyCode==右){
inMotion=真;
posX=posX+5;
System.out.println(“右”);
}否则{
inMotion=假;
}
}
}
公众抽签(){
背景(背景音乐游戏);
填充(50、10、10、150);
if(动态){
//System.out.println(“字符正在运动”);
对于(int i=0;i<3;i++){
系统输出打印LN(i);
图像(playerImages[i]、posX、posY、宽度、高度);
如果(!(i<3)){
i=0;//为循环重新启动
}
}
}否则{
图像(playerImages[1]、posX、posY、宽度、高度);
}
}

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

在处理过程中,
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);
  }
}
  • 运行
    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);
      }
    }
    
    在此版本中,当您按键时,计算机会在开始行走时保存帧,然后根据按钮按下后显示的帧数计算要使用的行走图片