2016-06-28 4 views
2

$player은 화면의 중앙에 있으며 마우스 각도 방향을 계속 따라 360도 움직일 수 있습니다. 이동할 때도 마찬가지로 반대 방향으로 $map의 위치가 변경됩니다.자바 스크립트에서 요소와 부모의 위치를 ​​변경

clearInterval(interval1); 
interval1 = 'false'; 
:

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); 
} 

내가 모르기 때문에 mouseUp에 이렇게 :

이 mousedown에 해고 ... 중앙에있는 플레이어를 유지하고지도에 "이동"효과를 만들어

문제는 내가 마우스를 놓을 때마다 플레이어에게 약간의 틈을 추가하여 클릭 할 때마다 센터에서 약간 움직입니다 ...

이 문제를 어떻게 해결할 수 있습니까? 나는 갭을 생성하는 것이 무엇인지 알아낼 수 없었습니다 ...

+0

대신 문제를 해결할 수는 있지만 (예는 [mcve]가 아닙니다.) 두 객체를 모두 이동하지 마십시오. 부동 소수점을 정수로 변환하는 오류가 발생하는 이유는 무엇입니까? 더 나빠질까요? 지도를 이동하십시오. – Tibrogargan

+0

표시된 코드는 간격을 지우지 않습니다. 이전 간격을 취소하지 않고 모든 mousedown 이벤트 *에서 새 간격을 만들면 문제가 발생합니다. – nnnnnn

+0

@Tibrogargan 플레이어 위치를 업데이트해야합니다.지도를 이동할 수 없습니다. 플로팅/인터거 변환은 어떻게 수정합니까? – neoDev

답변

0

2 차원 게임을 가지고 있다면 - 각 오브젝트에 대해 글로벌 좌표를 저장해야합니다. 이것은 맵 위치 독립적입니다. 그런 다음 객체 좌표와 "카메라 위치"를 사용하여 객체의 정확한 렌더링 좌표를 계산할 수 있습니다.

1

setInterval 지연 시간이 너무 짧아서 갭 문제가 발생할 수 있습니다. 브라우저는 그 단계 사이에 각 단계를 그릴 수 없습니다. 1 대신 1

관련 문제