2015-09-16 66 views
0

我最近開始嘗試使用ActionScript進行編程,之後幾年沒有使用它,我開始使用Pong,因爲這看起來像一個簡單的遊戲來實現,但我的(非常基本的)代碼反彈由於某種原因,頂部和底部牆壁的球會卡在頂部牆壁上彈跳...我的ActionScript程序很奇怪

任何人都可以幫忙嗎?

import flash.events.Event; 

stage.addEventListener(Event.ENTER_FRAME, mov); 

var ySpeed:int = -5; 

function mov(e:Event) { 
     trace(ySpeed + " " + ball.y); 
     ball.y += ySpeed; 
     if (ySpeed < 0 && ball.y <= 0) { 
       ySpeed *= -1; 
     } 
     if (ySpeed > 0 && ball.y >= 360) { 
       ySpeed *= -1; 
     } 
} 
+0

您需要重置y位置以及否則會保持反演的ySpeed。基本上也添加'ball.y = 0;'和'ball.y = 360;'。如果你想要更高級,更輕鬆,使用'ball.y = 0 + ySpeed;'和'ball.y = 360 - ySpeed;'。 '0+'顯然是可選的。 – h2ooooooo

回答

0

您的代碼似乎不斷切換速度矢量,因爲'hit'事件不斷被觸發。

大約有這幾個方法,如 - 把一個主動延遲的「重災區」方法(你的「如果」語句) - 跟蹤的對象是在出行前它打方向,然後以此爲if語句中額外的比較參數 - 衝擊開關速度矢量PLUS'反彈'物體稍微離開衝擊邊緣

我還建議鏈接if語句,以便在第一個已更改後觸發第二個值。

我已經略微調整了代碼,以考慮球和舞臺的尺寸。

喜歡的東西:

import flash.events.Event; 

stage.addEventListener(Event.ENTER_FRAME, mov); 

var dirY:int = -1; 
var ySpeed:int = -5; 
var ballR:uint = ball.height/2; 

function mov(e:Event) { 
    trace(ySpeed + " " + ball.y); 

    if (ySpeed < 0 && ball.y <= (0+ballR) && dirY == -1) { 
     dirY = 1; 
     ySpeed *= -1; 
     ball.y = 0 + ballR; 
    } else if (ySpeed > 0 && ball.y >= (stage.stageHeight-+ballR) && dirY == 1) { 
     dirY = -1 
     ySpeed *= -1; 
     ball.y = stage.stageHeight - ballR; 
    } 

    ball.y += ySpeed; 
} 
+0

@Emilie做了上述解決你的問題,還是需要進一步的幫助? – Visualife