所以我要做的就是更改存储在包含16个imgs的数组中的图像,它基本上是一个动画,当你玩游戏时(按前进字符移动[移动imgs],释放按钮字符停止[stoped img])。问题是,在数组到达它的最大长度并且键仍被按下之后,它需要将数组重置为15(所以这个循环将给出恒定运动的错觉),但我想我找不到合适的synthax或其他东西。 提前谢谢。
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);
}
答案 0 :(得分:0)
您确定要将阵列重置为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)
答案 1 :(得分: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
变量是否超过了数组的末尾,如果是,则将其重置为开头。
如果这不是您正在寻找的,那么解决问题的过程仍然是相同的:您需要用英语写下您正在尝试的内容做。在开始抨击代码之前,你需要这样做。
答案 2 :(得分:0)
谢谢大家的答案,他们真的给了我一些启发。
致Kevin Workman。 写下我打算采取的路径确实有所帮助,你的想法几乎是关键。用你的方法我想出了这个 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);
}
}
答案 3 :(得分:-2)
您是否尝试在最后else if
声明中将If...Then
切换为主要参数?另外,不要忘记将变量i
重置为0,这样它也会重置,并且不会继续尝试重置并最终处于无限循环中:)
正如问题中的代码一样,它首先执行增量,并且永远不会继续读取第二个选项(您希望它执行的那个)。