2016-06-28 80 views
2

$player位於屏幕的中心,並且可以在連續移動鼠標角度方向後以360度移動,當我移動它時,還會在相反方向更改$map的位置,在保持中央的球員,創造了地圖中的「移動」的效果......更改元素及其父元素在javascript中的位置

這是鼠標按下觸發:

var top1 = $map.offset().top; 
var left1 = $map.offset().left; 
var top2 = ($player.offset().top - $player.height()/2) - ($map.offset().top); 
var left2 = ($player.offset().left - $player.width()/2) - ($map.offset().left); 

if(interval1 == 'false'){ 
    interval1 = setInterval(function(){ 
     var speed = 1; 
     var deltaX = Math.cos(angle * Math.PI/180) * speed; 
     var deltaY = Math.sin(angle * Math.PI/180) * speed; 

     $map[0].style.left = (left1 -= deltaX)+'px'; 
     $map[0].style.top = (top1 -= deltaY)+'px'; 
     $player[0].style.left = (left2 += deltaX)+'px'; 
     $player[0].style.top = (top2 += deltaY)+'px'; 
    }, 1); 
} 

我做這個鼠標鬆開:

clearInterval(interval1); 
interval1 = 'false'; 

問題是我每次開火時都會給玩家增加一些小的空白,所以每次點擊它都會從中心移動一點......

我該如何解決這個問題?我無法弄清楚什麼會產生差距...

+0

它可能無法解決您的問題(您的示例不是[mcve]),但不要移動這兩個對象,無論如何,將浮點轉換爲整數時會出現錯誤 - 爲什麼會變得更糟?只要移動地圖。 – Tibrogargan

+0

顯示的代碼永遠不會清除間隔。如果您在每個mousedown事件*上創建了新的時間間隔,而沒有*取消之前的時間間隔,那麼您將遇到問題。 – nnnnnn

+0

@Tibrogargan我需要更新玩家位置,我不能只移動地圖。我怎樣才能修正浮動/整數轉換? – neoDev

回答

0

如果您有2D遊戲 - 對於每個對象,您必須存儲全局座標,這是獨立於地圖位置的。然後通過對象座標和「攝像頭位置」可以計算出對象的精確渲染座標。

1

由於setInterval延遲時間太短,您可能會遇到間隙問題。瀏覽器無法在這個快速之間畫出每一步。嘗試使用100而不是1

相關問題