processing - 如何为我的 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
解决方案
改变这个:
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() 中更改。
推荐阅读
- javascript - 递归金三角,三角形逼近哪一点?
- python - 在 django rest 框架中更新用户时电子邮件已经存在
- jquery - Jquery,汇总表单字段值并在表单提交时传递到下一页
- node.js - Nodejs:并行while循环而不会互相阻塞
- c++ - 为什么 C++20 不允许调用具有显式类型的泛型 lambda?
- python - 了解如何在将 Class 对象附加到列表时使用 list.count()
- python - “如果其他方法不适用于 find_elements_by_xpath 中的 selenium python”
- c# - 如何解决类中的 Crystal Report 参考框架兼容性问题
- c# - 由于 MySql 的语法不正确,无法更新我的数据库
- pointers - 从 rust 中的引用中获取 Box Pointer