2015-08-16 101 views
0

當兩個鍵同時按下時,我的播放器停止移動。但動畫仍在移動。例如,如果我同時上下左右按下或同時左右按下。as3 - 兩個按鍵按下時如何停止動畫?

On鍵按下事件偵聽器:

if (event.keyCode == Keyboard.D) 
     { 
      isRight = true 
     } 
     if (event.keyCode == Keyboard.A) 
     { 
      isLeft = true 
     } 
     if (event.keyCode == Keyboard.W) 
     { 
      isUp = true 
     } 
     if (event.keyCode == Keyboard.S) 
     { 
      isDown = true 
     } 

在關鍵了事件偵聽器:

if (event.keyCode == Keyboard.D) 
     { 
      isRight = false 
      gotoAndStop(1); 
     } 
     if (event.keyCode == Keyboard.A) 
     { 
      isLeft = false 
      gotoAndStop(1); 
     } 
     if (event.keyCode == Keyboard.W) 
     { 
      isUp = false 
      gotoAndStop(1); 
     } 
     if (event.keyCode == Keyboard.S) 
     { 
      isDown = false 
      gotoAndStop(1); 
     } 

在enterFrame事件:

if (isRight == true) 
     { 
      x += 5; 
      play(); 
     } 
     if (isLeft == true) 
     { 
      x -= 5; 
      play(); 
     } 
     if (isUp == true) 
     { 
      y -= 5; 
      play(); 
     } 
     if (isDown == true) 
     { 
      y += 5; 
      play(); 
     } 
+0

難道我們沒有解決的東西昨天相似?在將Key down監聽器設置爲true之前,請將所有內容都設爲false。看起來事情依然如此。 –

+0

如果我這樣做,那種混亂了我的運動。我決定保持這樣。 – Crook

+0

好的,在這種情況下,在你的鑰匙鍵上放一些痕跡,看看所有的值都保持真實嗎?如果你把所有東西都設爲false,它是如何混淆你的代碼的? –

回答

1

如果玩家進入X - = 1和x + = 1,它基本上使X + = 0的整體。我們可以很容易檢查並在必要停止動畫:

var iP:Point = new Point(x,y);//try to avoid creating new objects on frame interval 
if (isRight) x += 5; 
if (isLeft) x -= 5; 
if (isUp) y -= 5; 
if (isDown) y += 5; 
if(!Point.distance(iP,new Point(x,y)) goToAndStop(1); 
else play(); 
0

我沒有看到任何檢查,看是否多於一個鍵被按下?

想必你應該引入像一個keycount到enterFrame事件:

var count:uint = 0; 

if (isRight == true){ 
    count++ 
    x += 5; 
} 
if (isLeft == true){ 
    count++; 
    x -= 5; 
} 
if (isUp == true){ 
    count++; 
    y -= 5; 
} 
if (isDown == true){ 
    count++ 
    y += 5; 
} 

if (count > 1) { 
    isRight = isLeft = isUp = isDown = false; 
    gotoAndStop(1); 
} else { 
    play(); 
} 
+0

等一下,但我試過這種方法,然後當兩個鍵被按下時,我的播放器開始移動。 – Crook

+0

我已經調整過,所以這個劇本是有條件的。 如果當兩個鍵被按下,那麼你絕對應該把跟蹤語句到播放器中還是移動的if/else,看看有什麼被解僱和時間。 另外,我會從上聽者中刪除'gotoAndStop(1)',並讓輸入框處理所有的時間線邏輯。 – Visualife

相關問題