我正在寻找具有图像数组的循环的解决方案
I'm looking for a solution for a loop with a array of images
所以我想做的是更改存储在包含 16 个 img 的数组中的图像,它基本上是您玩游戏时的动画(向前按角色移动 [moving imgs],释放按钮字符停止[停止 img])。问题是,在数组达到它的最大长度并且仍然按下键时,它需要将数组重置为 15(所以这个循环会给人一种不断移动的错觉),但我想我没有找到正确的合成器什么的。
提前致谢。
PImage p1;
PImage[] zeroArray = new PImage [16];
void setup() {
size(600,600);
for(int i = 0; i < zeroArray.length; i++){
zeroArray[i] = loadImage (i + ".png");
}
}
void draw() {
background(255);
imageMode(CENTER);
if(keyPressed) {
i++;
} else if (i > zeroArray.length) {
zeroArray[] = zeroArray[15]; // <--this ain't right, how should i declare this??
}
image(zeroArray[i], 300, 300, 800, 800);
}
您确定要将数组重置为 15 吗?这是最后一个要素。但是,一般来说,解决方案是更改行:
zeroArray[] = zeroArray[15];} // <--this ain't right, how should i declare this??
至
i = 15; //Just change the index pointer to 15 (or whichever frame you want to reset to)
您是否尝试过将 else if
切换为上一个 If...Then
语句中的主要论点?另外,不要忘记将您的变量 i
重置为 0,这样它也会重置并且不会继续总是尝试重置并最终陷入各种无限循环:)
因为它在您的问题代码中,它首先执行递增并且永远不会读入第二个选择(您希望它执行的那个)。
我认为您将一些想法混合到一个 if
声明中。让我们看一下您的这部分代码:
if(keyPressed){
i++;
}
else if (i > zeroArray.length){
zeroArray[] = zeroArray[15];
}
Run through this line-by-line 认真想想它在做什么。如果按下某个键,它会增加 i
变量。如果一个键 没有被 按下,那么它会检查 i
是否大于 zeroArray
数组变量的长度。如果是,它会尝试重置数组,这是无效的语法。
退后一步,想想你想做什么。暂时忘掉代码。用英语准确写下你想做什么。我猜你正在尝试做这样的事情:
- 更改按下键时绘制的图像。
- 如果我们到达图像的末尾,则从第一张图像重新开始。
当你写出类似的东西时,你就可以开始考虑用代码实现这个算法了。 Break your problem down into smaller steps 一次一个地执行这些步骤。
比如第1步是每次按键时改变图像。你基本上已经有了:
if(keyPressed){
i++;
}
然后,第 1 步是在到达数组末尾时重置 i
变量。您可以使用这样的 if
语句来做到这一点:
if(i >= zeroArray.length){
i = 0;
}
把它们放在一起,看起来像这样:
if(keyPressed){
i++;
if(i >= zeroArray.length){
i = 0;
}
}
现在这段代码检查是否有键被按下,如果是,它会增加 i
变量。然后它检查 i
变量是否已经越过数组的末尾,如果是,它会将其重置回开头。
如果这不是您要查找的内容,那么解决问题的过程仍然是相同的:您需要用英语准确地写下您要尝试执行的操作。在开始敲打代码之前,您需要这样做。
谢谢大家的回答,真的给了我一些启发。
致凯文·沃克曼。
写下我打算走的路真的很有帮助,你的想法几乎是正确的。使用你的方法我想到了这个
1)如果按键被按下,改变角色精灵
2) 将运动重置到某个点,以防它超过动画精灵,并且仍在按下键
3)如果按键被释放或根本没有被按下,则设置为拳头精灵
致 Sahil Jain
您将索引更改为 [15] 是正确的,但效果不佳
修改后的代码如下:
PImage p1;
PImage[] zeroArray = new PImage [16];
void setup(){
size(600,600);
for(int i = 0; i < zeroArray.length; i++){
zeroArray[i] = loadImage (i + ".png");
}
}
void draw(){
background(255);
imageMode(CENTER);
if (keyCode == RIGHT){
if(keyPressed){
i++;
} else {
i = 0;
}
if (i >= zeroArray.length){
i = 4;}
image(zeroArray[i], 300, 300, 800, 800);
}
}
所以我想做的是更改存储在包含 16 个 img 的数组中的图像,它基本上是您玩游戏时的动画(向前按角色移动 [moving imgs],释放按钮字符停止[停止 img])。问题是,在数组达到它的最大长度并且仍然按下键时,它需要将数组重置为 15(所以这个循环会给人一种不断移动的错觉),但我想我没有找到正确的合成器什么的。 提前致谢。
PImage p1;
PImage[] zeroArray = new PImage [16];
void setup() {
size(600,600);
for(int i = 0; i < zeroArray.length; i++){
zeroArray[i] = loadImage (i + ".png");
}
}
void draw() {
background(255);
imageMode(CENTER);
if(keyPressed) {
i++;
} else if (i > zeroArray.length) {
zeroArray[] = zeroArray[15]; // <--this ain't right, how should i declare this??
}
image(zeroArray[i], 300, 300, 800, 800);
}
您确定要将数组重置为 15 吗?这是最后一个要素。但是,一般来说,解决方案是更改行:
zeroArray[] = zeroArray[15];} // <--this ain't right, how should i declare this??
至
i = 15; //Just change the index pointer to 15 (or whichever frame you want to reset to)
您是否尝试过将 else if
切换为上一个 If...Then
语句中的主要论点?另外,不要忘记将您的变量 i
重置为 0,这样它也会重置并且不会继续总是尝试重置并最终陷入各种无限循环:)
因为它在您的问题代码中,它首先执行递增并且永远不会读入第二个选择(您希望它执行的那个)。
我认为您将一些想法混合到一个 if
声明中。让我们看一下您的这部分代码:
if(keyPressed){
i++;
}
else if (i > zeroArray.length){
zeroArray[] = zeroArray[15];
}
Run through this line-by-line 认真想想它在做什么。如果按下某个键,它会增加 i
变量。如果一个键 没有被 按下,那么它会检查 i
是否大于 zeroArray
数组变量的长度。如果是,它会尝试重置数组,这是无效的语法。
退后一步,想想你想做什么。暂时忘掉代码。用英语准确写下你想做什么。我猜你正在尝试做这样的事情:
- 更改按下键时绘制的图像。
- 如果我们到达图像的末尾,则从第一张图像重新开始。
当你写出类似的东西时,你就可以开始考虑用代码实现这个算法了。 Break your problem down into smaller steps 一次一个地执行这些步骤。
比如第1步是每次按键时改变图像。你基本上已经有了:
if(keyPressed){
i++;
}
然后,第 1 步是在到达数组末尾时重置 i
变量。您可以使用这样的 if
语句来做到这一点:
if(i >= zeroArray.length){
i = 0;
}
把它们放在一起,看起来像这样:
if(keyPressed){
i++;
if(i >= zeroArray.length){
i = 0;
}
}
现在这段代码检查是否有键被按下,如果是,它会增加 i
变量。然后它检查 i
变量是否已经越过数组的末尾,如果是,它会将其重置回开头。
如果这不是您要查找的内容,那么解决问题的过程仍然是相同的:您需要用英语准确地写下您要尝试执行的操作。在开始敲打代码之前,您需要这样做。
谢谢大家的回答,真的给了我一些启发。
致凯文·沃克曼。 写下我打算走的路真的很有帮助,你的想法几乎是正确的。使用你的方法我想到了这个 1)如果按键被按下,改变角色精灵 2) 将运动重置到某个点,以防它超过动画精灵,并且仍在按下键 3)如果按键被释放或根本没有被按下,则设置为拳头精灵
致 Sahil Jain 您将索引更改为 [15] 是正确的,但效果不佳
修改后的代码如下:
PImage p1;
PImage[] zeroArray = new PImage [16];
void setup(){
size(600,600);
for(int i = 0; i < zeroArray.length; i++){
zeroArray[i] = loadImage (i + ".png");
}
}
void draw(){
background(255);
imageMode(CENTER);
if (keyCode == RIGHT){
if(keyPressed){
i++;
} else {
i = 0;
}
if (i >= zeroArray.length){
i = 4;}
image(zeroArray[i], 300, 300, 800, 800);
}
}