2013-02-22 37 views
0

对此有点困惑,所以我想我会发布。对不起,如果我的标题不清楚,对Java很新,不知道如何解释它。反正这里是我的代码集到目前为止(问题位我猜)停止执行方法转移到下一个方法

int currentImageIndex = 0; // Assuming [0] is your first image. 
int[] nextImageList = { 2, 4, 5, 4, 5, 4, 5, 0, 1 }; 

public void nekoRun() { 
    moveIn(); 
    scratch(); 
    moveOut(); 

private void moveIn() { 
    for (int i = 0; i < getWidth()/2; i+=10) { 
     xPos = i; 
     // swap images 
     if (currentImage == nekoPics[0]) 
      currentImage = nekoPics[1]; 
     else 
      currentImage = nekoPics[0]; 
     repaint(); 
     pause(150); 

private void scratch() { 
    for (int i = xPos; i < getWidth();) { 
     xPos = i; 

     // Swap images. 
     currentImageIndex = nextImageList[currentImageIndex]; 
     currentImage = nekoPics[currentImageIndex]; 



      repaint(); 
      pause(150); 
     } 
} 

private void moveOut() { 
    for (int i = xPos; i < getWidth(); i+=10) { 
     xPos = i; 
     // swap images 
     if (currentImage == nekoPics[0]) 
      currentImage = nekoPics[1]; 

     else 
      currentImage = nekoPics[0]; 
     repaint(); 
     pause(150); 
    } 
} 

所以基本上会发生什么(这是不是所有的代码只是“多汁的部分”,猫就会在屏幕上运行,然后坐着,它应该划伤两次,我得到了一些与阵列有关的帮助,因为我只是使用一堆其他的if语句,而且我知道这是多余的。猫会跑到中心,它会划伤,并保持因为显而易见的原因,在一个循环中抓挠,我只是困惑于如何让它移动到moveOut方法上,而不是保持循环的方式。对不起,如果这有点不清楚,我很新,所以忍受着我

在此先感谢

+0

正如一边,你考虑重新命名你的'scratch()'方法'scratchTwice()'。这在这里并不重要,但我相信你可以看到具有方法名称的价值,这些名称可以在更大和更复杂的系统中反映*它们的功能。 – Edd 2013-02-22 14:14:17

回答

-1

你没有增加我从头()把i ++放在for语句的末尾。

for (int i = xPos; i < getWidth(); i++) 
+0

这不是OP想要的,因为getWidth()返回屏幕宽度。这会重复getWidth()/ 2次,因为精灵已经在屏幕的中间位置了......而且他也不希望将图像移动到“scratch”阶段...... – ppeterka 2013-02-22 13:48:29

+0

谢谢,但那会只是让猫的移动和划伤 – Sim 2013-02-22 13:50:18

2

你的问题被称为无限循环......取而代之的

private void scratch() { 
    for (int i = xPos; i < getWidth();) { 

这应该阅读

private void scratch() { 
    for (int i = 0; i < 2*<how many frames the scratching takes>; i++) { 
    // **UPDATE** the xPos=i; shouldn't be here!!! 

说明:

看来你已拷贝了循环定义从moveIn()函数,这在这种情况下似乎是合法的。发生什么事,它会到达屏幕的中间位置。但是在scratch()函数中,精灵不会移动,它不会到达屏幕的内部......因此,ozu必须重复两次绘图步骤来抓取跨越的帧数。您必须将该numnber放入<how many frames the scratching takes>占位符,它应该可以工作。

编辑 the xPos=i;不应该出现在scratch() ...

+0

嗯...这使猫重置,但任何想法如何找出多少帧抓挠需要,理想情况下猫应该仍然,两次划伤,然后我的其他功能应该执行他到屏幕的尽头,同时运行 – Sim 2013-02-22 13:56:13

+0

@ user1667456哦,我看到了另一个问题。稍等一下! – ppeterka 2013-02-22 13:57:40

+0

哦,我只是修复它,哈哈,愚蠢的错误有一个xPos =我漂浮在那里因为某种原因 – Sim 2013-02-22 13:57:56