2013-03-25 62 views
0

我有一艘帆船的太空飛船。它有速度,ship.vxship.vy。當距離畫布邊框30px時,我將ship.vx & ship.vy設置爲0,並將背景對象沿船舶的相反方向移動。此時該船被困在一個點上。這很好。現在,如果我嘗試它不因爲它是停留在vx & vy設置爲0點移動它左右(stuck at top/bottom)或自頂向下(stuck at left/right)。運動超越的對象,帆布

如果我加速到相反的方向,它需要5秒來選擇它的速度(2左右),所以它基本上在同一點上持續5秒。

我試圖在x軸之外不設置vy0,反之亦然,但是船在另一個軸上保持緩慢移動。

所以我試圖實現的是ship'll卡住時,它是從邊界30像素,但如果我嘗試移動或加速在其他3個方向它會假裝,如果它沒有卡住。

你們誰都知道任何機制?
謝謝。

function stuckShip(){ 
    if(
       (ship.x - ship.width < 0) || 
       (ship.x + ship.width > w) || 
       (ship.y + ship.height > h) || 
       (ship.y - ship.height < 0)) 
       { 
     ship.vx = 0; 
     ship.vy = 0; 
    } 

} 


function againAndAgain(){ 
    var angle = ship.rotation; 

    var x = Math.cos(angle); 
    var y = Math.sin(angle);   

    var ax = x*thrust, 
     ay = y*thrust; 

    ship.vx += ax; 
    ship.vy += ay; 

      stuckShip(); 
      ship.draw(context); 

} 

document.addEventListener('keydown', function(e){ 
    switch(e.keyCode){ 
     case 38: 
      thrust = 0.35; 
     break; 
     case 37: 
      ship.rotation -= 3; 
     break; 
     case 39: 
      ship.rotation += 3; 
     break; 


    } 
} 
+0

我認爲沒有看到處理'ship.vx'和'ship.vy'的代碼,而是轉而移動背景對象,並且處理響應矢量變化的問題,人們將無法幫助您。 – 2013-03-25 07:58:47

回答

0

哈哈,簡單,只需設置船舶的位置,以31px從邊境,

if(ship.x <= 30){ 
    ship.x = 30 + 1; 
} 

它是什麼,當船從左邊30PX,它會設置ship.x到31,所以它你永遠不會被卡住,只是來回擺動1px。我不確定它是否是一個完美的解決方案,但它不會將船舶拉回5秒。

0

操縱根據它改編的物體的速度是在屏幕顯示上的目的位置,永遠沒有最好的主意。 通常,您使用基於父系統,因此您有一個主容器,並且所有對象(包括船)都是該容器的子項,並相對於主容器移動。現在,您可以更新容器的位置(如果船舶的全球位置在30像素帶內),使其在屏幕邊緣「鎖定」。

+0

我已經添加了我的代碼,請查看。你的意思是使用更多的畫布? – NestedWeb 2013-03-25 08:08:58

+0

不,我的意思是使用基於容器的顯示列表的概念:http://www.adobe.com/devnet/flash/quickstart/display_list_programming_as3.html - 如果你目前沒有實現這個,這可能意味着一些爲你工作,但我會說它是值得的。你使用什麼框架? – olsn 2013-03-25 08:21:50

+0

我還沒有使用任何框架。這是我的第一場比賽,只是普通的js。感謝您的鏈接,我正在那裏.. – NestedWeb 2013-03-25 08:25:33