2014-03-30 54 views
1

我目前面臨的一個問題是,如果沒有設置邊界,我的玩家或以其他方式稱爲加農炮就被允許移出屏幕。我試圖實現一些界限,但我無法弄清楚邏輯,它目前不工作。使用Javascript創建玩家邊界

爲了澄清我希望一旦大炮到達任何一邊的牆(它只能從左到右),它是不允許超過遊戲的界限。

我目前的界限功能。

function playerBounds() { 
    //This will check the position of the spaceship and if it hits the boundaries of the canvas will not let it go further. 

    if (spaceShip.x < 0) { 
     spaceShip.x = 0; 
    } 
    else if (spaceShip.x > canvas.width || spaceShip.x < canvas.width ) { 
     spaceship.x = canvas.wdith - spaceShip.width; 
    } 

} 

回答

1

的一個問題是這種說法

else if (spaceShip.x > canvas.width || spaceShip.x < canvas.width ) { 
     spaceship.x = canvas.wdith - spaceShip.width; 
    } 

邏輯因此,讓我們說你的畫布是100像素寬。如果船舶的x位置爲100,默認情況下,這是要在畫布上繪製的圖像的左側(除非您有一些代碼將其錨定點更改爲中間的某個)。有關更多信息,請參閱MDN's page。所以畫布會從這一點開始向右畫,然後去18px,這意味着船將從100-118px,這將是離屏。

另外,你說宇宙飛船的寬度是18,並且我將假設你的畫布比18px寬,所以在這個例子中,第二部分或者語句spaceShip.x < canvas.width評估爲18 < 100是真實的,因此對於邏輯或者是不必要的。作爲一個令人討厭的副作用,它總是會將你的飛船抓到屏幕的右側,因爲它總是如此。

的解決方案可能是這樣的:

// outside of playerBounds function 
// stored in a variable so this doesn't have to be recalculated every time 
var rightBorder = canvas.width - spaceShip.width; 

function playerBounds() { 
    if (spaceShip.x < 0) { 
     spaceShip.x = 0; 
    } 

    if (spaceShip.x > rightBorder) { 
     spaceship.x = rightBorder; 
    } 
} 

一件事,你在頂部宣佈var Time;,但你引用time其他地方一樣,只是這是一個意外情況。

+0

感謝您的輸入,在嘗試您的解決方案時,它修復了之前由於我的邏輯陳述而出現瘋狂跳躍的問題,但它仍然讓玩家僅在右側出現屏幕。 –

+1

更新您的小提琴http:// jsfiddle。淨/ Q4U2w/3 /一對夫婦修復(我評論他們),主要的是在第二個錯字,如果。太空船與太空船。我還注意到,在幾個地方你有一個賦值運算符(=)而不是一個相等運算符(===)。 – prokopcm

+0

太棒了!從Vb.net轉換到Javascript一直很混亂,有時我忘記了正確的語法。 –

0

兩個問題:

else if (spaceShip.x > canvas.width || spaceShip.x < canvas.width ) { 
    spaceship.x = canvas.wdith - spaceShip.width; 
} 
  1. spaceShip.x > canvas.width || spaceShip.x < canvas.width將 始終評估爲真(除非spaceShip.x等於 canvas.width),所以你的飛船將有效地鎖定在一個位置 永遠。
  2. 你有一個錯字在你的任務:canvas.wdith應該 canvas.width

您需要調整您的條件,使其只在飛船熄滅的畫布的右側邊緣捕捉的情況。不過,它看起來像是在正確的軌道上。

+0

謝謝!我糾正了這個錯字,儘管它仍然不能糾正我的整體問題。 –

+0

您是否也修復了其他部分?你需要刪除

+0

我在prokopcm的回答後想到了這一切,我完全用錯誤的思維去解決問題。無論如何,謝謝。 –