如何为我的 spritesheet 动画选择一行?

how do I choose a row for my spritesheet animation?

你好,我是 java / 处理的新手,我正在尝试让这个精灵 sheet 动画化,但我遇到的是这个问题,我就是想不通out,如何让我的图形在 spritesheet 具有的行数之间变化。

我已经尝试创建一个变量,以便在您按下某个键码时它会改变,但我不知道,是否是因为它在函数设置中没有改变值或什么。

int nx = 6;
int ny = 4;

int cs;
int ts = nx * ny;
int y = 0;
int dir = 0;

PImage[] sprites;

void setup()
{
  size(600,600);

  sprites = new PImage[ts];
  PImage spritesheet = loadImage("https://denysalmaral.com/wp- 
   content/uploads/2017/02/trump_run.png");

  int w = spritesheet.width / nx;
  int h = spritesheet.height / ny;

  int index = 0;

  move(index, w, h, sprites, spritesheet); 
}

void draw()
{
  background(0);

  ms();
  draw_sprite();
  frameRate(15);

}
void draw_sprite()
{
  pushMatrix();
  image(sprites[cs], 0, y,100,100);
  popMatrix();

}

void ms()
{
  cs += 1;
  cs %= ts;
}

void move(int index, int w, int h, PImage [] sprites, PImage spritesheet)
{ 

  for(int y = 0; y < ny; y++)
  {
    for(int x = 0; x < nx; x++)
    {
      sprites[index] = spritesheet.get(x * w, dir * h, w, h);

      index++;
    }
  }
}

我希望在 spritesheet 的行数之间进行更改,但它只是停留在 dir = 0 中 它不会改变,例如:dir = 2

改变这个:

sprites[index] = spritesheet.get(x * w, dir * h, w, h);

对此:

sprites[index] = spritesheet.get(x * w, y * h, w, h);

将所有行添加到 spritesheet。

如果您想根据按下的键更改行,请将此添加到 void keyPressed():

switch(keyCode)
{
  case DOWN:
    dir = 0;
    break;
  case RIGHT:
    dir = 1;
    break;
  case UP:
    dir = 2;
    break;
  case LEFT:
    dir = 3;
    break;
}

并改变

  image(sprites[cs], 0, y,100,100);

image(sprites[cs + dir * (ny + 2)], 0, y,100,100);

编辑:您还必须更改

cs %= ts;

cs %= nx;

这是因为如果不这样做,您将遍历所有行,但您一次只想遍历一行;该行在 image() 中更改。