2013-04-21 3 views
0

나는 간단한 HTML 게임을 만들려고 노력하고 있으며 캐릭터가 점프하는 데 문제가 있습니다. 모든 것이 모든 움직임에서 정상적으로 작동합니다. 왼쪽이나 오른쪽으로 움직이면 점프를 호출하려고하면 화면이 멈추고 아무런 조치도 취하지 않습니다. 나는 아마 무언가를 듣는 것은 정말로 간단하지만, 나는 그것을 얻지 못하는 것 같습니다. 또한 점프 기능에서 draw/clear 호출을 생략하려고 시도했지만 그 중 하나도 작동하지 않았습니다. HTML 5 캔버스 이동

<script> 
var isJumping = false; 
var isFalling = false; 
var recwidth = 400; 
var recheight = 400; 
var xpos = 200; 
var ypos = 200; 
window.onload = function() { 
var FPS = 30; 
setInterval(function() { 
    clear(); 
    draw(); 
}, 1000/FPS); 
}; 
function jump() 
{ 
isJumping=true; 
while (isJumping == true) 
{ 
    ypos=ypos-3; 
    clear(); 
    draw(); 
    if(ypos==297) 
    { 
     isJumping == false; 
    } 

} 

} 



function changex(x){ 
xpos = xpos + (x); 
} 
function changey(y){ 
ypos = ypos + (y); 
} 



function draw(){ 
var canvas = document.getElementById('canvas') 
var context = canvas.getContext('2d'); 
var img=new Image() 
    img.src="character.png" 
    img.onload = function() { 
    context.drawImage(img,xpos,ypos)} 
} 

function clear(){ 
var canvas = document.getElementById('canvas') 
var context = canvas.getContext('2d'); 
context.clearRect(0,0,); 
} 


    document.onkeydown = function(event) { 
var keyCode; 

if(event == null) 
{ 
    keyCode = window.event.keyCode; 
} 
else 
    { 
keyCode = event.keyCode; 
    } 

    switch(keyCode) 
    { 
    // left 
    case 37: 
    //left 
    changex(-5); 
     break; 

// up 
case 38: 
// action when pressing up key 
jump(); 
    break; 

// right 
case 39: 
// action when pressing right key 
changex(5); 
    break; 

// down 
case 40: 
// action when pressing down key 
changey(5); 
    break; 

default: 
    break; 
    } 
} 

+0

와이 발견 예 - 이것은 일반적으로 while 루프 이후의 setTimeout 또는 setInterval을 함께 이루어집니다 연속 화면 업데이트

나는에서는 setTimeout과 얼마나 부드러운 것을 확실하지 않다을 너무 꽉 , 프로세서에 호흡 할 시간을주지는 않습니다. while 루프는 너무 빡빡해서 연속적인 화면 업데이트를하지 못하기 때문에 보통 setTimeout을 사용합니다. – mplungjan

+0

좋습니다. 그래서 기본적으로 while 루프를 사용하면 너무 빨리 실행하려고하는데 과부하가 발생합니까? 그렇다면 어떻게 연속적으로 여러 개의 제한 시간을 실행할 수 있습니까? –

+0

정확하게. 나는 매끄러운 것들이 setTimeout과 함께 있을지 모르지만, 그것은 일반적으로 사용되는 것이다. 루프 애니메이션 캔버스 검색에서 이것을 찾았습니다. http://www.script-tutorials.com/html5-animation-patterns-with-loops/ – mplungjan

답변