首页 > 解决方案 > 如何为我的 spritesheet 动画选择一行?

问题描述

你好,所以我是java /处理的新手,我正在尝试使这个精灵表动画,但我遇到的是这个问题,我只是想不通,如何让我的数字在行数之间变化精灵表有。

我试过创建一个变量,所以当你按下某个键码时它会改变,但我不知道,是不是因为它在函数设置中没有改变值或什么。

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

标签: processing

解决方案


改变这个:

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() 中更改。


推荐阅读