我正在寻找一个包含图像数组

时间:2017-06-24 21:47:41

标签: processing.js

所以我要做的就是更改存储在包含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);
}

4 个答案:

答案 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,这样它也会重置,并且不会继续尝试重置并最终处于无限循环中:)

正如问题中的代码一样,它首先执行增量,并且永远不会继续读取第二个选项(您希望它执行的那个)。