2012-03-20 7 views
0

공을 쏠 수있는 캔버스에서 움직이는 상자를 얻으려면 간단한 html/js 프로젝트를 진행하고있다. 나는 박스를 움직이게했다. 그러나 나는 볼을 나타낼 수 없다. 프로그램은 drawBall() 및 moveBall() (경고를 사용하여 테스트 됨) 함수를 만들지 만 아무 것도하지 않습니다. 나는 지난 1 시간 동안이 일을 해왔고, 나는 그걸 작동시킬 수 없다. 여기 상자를 움직이고 스페이스 바를 놓을 때마다 공을 그려야하는 자바 스크립트 코드가 있습니다. 난 당신의 코드 내가 볼 수있는 문제를 시도자바 스크립트에서 호를 그린다. 그러나 나타나지 않는다.

function init() { 
//canvas = document.getElementById('canvas'); 
context = $('#canvas')[0].getContext('2d'); 
WIDTH = $('#canvas').width(); 
HEIGHT = $('#canvas').height(); 
block_x = WIDTH/2; 
block_y = HEIGHT/2; 
setInterval('draw()', 25); 
} 

function clearCanvas() { 
    context.clearRect(0,0,WIDTH,HEIGHT); 
} 

function draw() { 
    clearCanvas(); 
    if(shotBall) 
    { 
     drawBall(); 
     moveBall(); 
    } 
    if (rightKey) block_x += 5; 
    else if (leftKey) block_x -= 5; 
    if (upKey) block_y -= 5; 
    else if (downKey) block_y += 5; 
    if (block_x <= 0) block_x = 0; 
    if ((block_x + block_w) >= WIDTH) block_x = WIDTH - block_w; 
    if (block_y <= 0) block_y = 0; 
    if ((block_y + block_h) >= HEIGHT) block_y = HEIGHT - block_h; 
    context.fillRect(block_x, block_y, block_w, block_h); 
} 

function drawBall() { 
     context.beginPath(); 
    context.arc(ball_x, ball_y, ball_radius, 0, Math.PI * 2, false); 
} 

function moveBall() { 
    ball_y += 1; 
    ball_x -= 1; 
} 

function onKeyDown(evt) { 
    if (evt.keyCode == 68) rightKey = true; 
    else if (evt.keyCode == 65) leftKey = true; 
    if (evt.keyCode == 87) upKey = true; 
    else if (evt.keyCode == 83) downKey = true; 
} 

function onKeyUp(evt) { 
    if (evt.keyCode == 68) rightKey = false; 
    else if (evt.keyCode == 65) leftKey = false; 
    if (evt.keyCode == 87) upKey = false; 
    else if (evt.keyCode == 83) downKey = false; 
    if(evt.keyCode == 32) createBall(); 
} 

function createBall() 
{ 
     ball_x = block_x + (block_w/2); 
     ball_y = block_y + (block_y/2); 
    radius = 20; 
    shotBall = true; 
} 
$(document).keydown(onKeyDown); 
$(document).keyup(onKeyUp); 
+0

어떤 오류가 발생합니까? –

+0

어도비 드림위버를 사용하여 코드를 작성하므로 오류가 발생하지 않습니다. 적어도 문법 오류는 없다. Dreamweaver에서 내가 알지 못하는 오류를 볼 수있는 방법이 없다면 말입니다. 그러나 아크가 그려지지 않은 상태에서 오류가 없습니다. – DuxClarus

+0

같은 결과, 볼을 사용하지 않습니다. 나는 context.stroke()를 시도했다./context.fill(); 및 둘 다의 조합 ... 그리고 내가 context.endPath(); 직사각형도 그리기를 중단합니다. 그런데 도움을 주셔서 감사합니다. 덕분에 – DuxClarus

답변

1

이 값이기 때문에 당신의 block_wblock_hball_radius에게 변수를 초기화하지 않은 것입니다 정의되지 않은 것 같다 firebug 도구에서 볼 수 있듯이.

따라서 사용하는 모든 변수를 정의하고 초기화했는지 확인해야합니다. 또한 정의한 모든 함수를 호출해야합니다.

수동으로 context.arc (23, 34, 45, 0, Math.PI * 2, false)에 값을 입력 할 때; 기능을 다음 그것은 나를 위해 잘 작동합니다. 모든 변수를 정의하고 초기화했는지 확인하십시오.

+0

! 이제 작동합니다. 첫 번째 함수 위에 block_w와 block_h를 정의했지만 init()에서는 정의하지 않았습니다. 왜 내가 원래 그 일을했는지 ​​모르겠지만 당신의 충고로 지금은 작동합니다! : 행복한 날들! – DuxClarus