2013-03-18 94 views
1
else if(po==true){ 
     snake_array.reverse(); 
     var i=0; 
     var c=snake_array[i]; 
     //paints head 
     paint_head(c.x,c.y); 
     for(i=1;i<snake_array.length;i++){ 
      //paints body 
      var c=snake_array[i]; 
      paint_body(c.x,c.y); 
      if(snake_array[i].x<snake_array[i-1].x){ 
       d="right"; 
      } 
      else if(snake_array[i].x>snake_array[i-1].x){ 
       d="left"; 
      } 
      else if(snake_array[i].y>snake_array[i-1].y){ 
       d="up"; 
      } 
      else if(snake_array[i].y<snake_array[i-1].y){ 
       d="down"; 
      } 
     } 
     //poison status false 
     po=false; 
    } 

po是毒性狀態的變量..每當蛇吃這種食物。它應該被顛倒,回到它以前的蹤跡。是的,蛇回覆,但問題是蛇沒有回到它以前的蹤跡,但在它吃毒藥之前與之前的方向相反...顛倒在遊戲中的JavaScript數組

 x <-food 
    ^<-head   v <-tail    v <-tail 
     |     |      | 
     | >-becomes->  | >-instead of->  | 
>.....|    .......|     <.....| 
^     |      ^
|_tail    V <-head     |_head 
+0

漆身後,做一個反向 – Sergio 2013-03-18 14:03:34

+0

不解決它sergio .. – InnZaayynn 2013-03-18 14:10:05

回答

1

你正在把你的新方向放在尾巴上而不是頭上。 d在循環的每次迭代中設置,這意味着唯一重要的是最後一個。因此,由於您的尾巴在示例中朝下,因此d設置爲向下。

您或者需要在反轉前檢查尾部,然後反轉d或檢查頭部而不是尾部。

假設蛇是至少長度爲2,執行下列操作,環路之外:

if(snake_array[0].x<snake_array[1].x){ 
    d="left"; // left or right depending on how your coordinate system works 
} ... 

這將只是看頭部的面向。您可能需要檢查一下,看蛇是否只有長度爲1,然後只是逆轉當前的方向。

+0

你能告訴我先生嗎?我無法做到你所說的。 – InnZaayynn 2013-03-18 14:14:38

+1

@vaizaren刷新你的窗口,我已經添加了一個例子。 – 2013-03-18 14:15:28

+0

我試過你說的但是它沒有解決..也許你可以告訴我你真正的意思是先生。 – InnZaayynn 2013-03-18 14:16:25

1

這裏的問題是,你如何確定頭的方向?尾巴在哪裏繪製?根據你的答案,這可能是由於不同的問題。在我看來,要知道尾部的正確方向(d),不僅需要存儲蛇的當前段的所有座標,還需要存儲最後一個位置的位置,現在也釋放了。你是否也將它放在陣列中?如果是這種情況,那麼.reverse()函數會給你一個錯誤的結果,因爲它會使頭部不在尾部位置,而是在尾部之前的位置,即尾部佔據的位置在之前的回合中。

另一件可能失敗的事情就是更新機制。也許逆轉後,有一個更新,以便頭部自動前進一個空間(但方向錯誤)?同樣,我們需要了解更多的代碼。

+0

你可以有我的整個代碼,如果你想。並在那裏檢查.. – InnZaayynn 2013-03-19 12:58:40