如何为我的 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() 中更改。
你好,我是 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() 中更改。