나는 눈싸움 던지기와 관련된 자바 스크립트 게임을하고 있습니다. 비행 경로에서 가능한 한 자주 눈덩이를 렌더링해야합니다. Chrome은 style.left 및 style.top 속성 설정을 포함하여 모든 계산을 수행하지만 대상에 도달 할 때까지 실제로 눈덩이를 다시 그리지 않습니다. 오페라에는이 문제가 없습니다.브라우저가 강제로 이미지를 다시 그리게 할 수 있습니까?
renderSnowball()
이후 alert()
을 입력하면 alert()을 사용하는 것이 명백한 문제입니다. 당신은 완전히 메인 스레드를 차단하고
function throwSnowball()
{
var theta = parseFloat(angleField.value) * Math.PI/180 ;
var Vir = parseFloat(velocityField.value) ;
if (!isNaN(Vir) && !isNaN(theta))
{
Vix = Math.cos(theta) * Vir * 50;
Viy = Math.sin(theta) * Vir * 50;
time = new Date() ;
var timeThrown = time.getTime() ;
while (snowballPosY > 0)
{
current = new Date() ;
var currentTime = current.getTime() ;
var timeElapsed = (currentTime - timeThrown)/5000 ;
snowballPosX += Vix * timeElapsed;
snowballPosY += Viy * timeElapsed;
Viy -= GRAVITY * timeElapsed ;
renderSnowball() ; //renderSnowball() sets the style.left
// and style.top properties to snowballPosX pixels
// and snowballPosY pixels respectively
timeThrown = currentTime ;
}
snowballPosX = 0 ;
snowballPosY = 50 ;
renderSnowball() ;
}
}
'while'루프가 아니라 'requestAnimationFrame'을 사용하여 이동하십시오. – Ryan