2013-02-22 36 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