2017-03-01 56 views
1

我正在學習這個JavaScript代碼,讓球從牆上彈開,並暫停&繼續點擊。我已經暫停了球,並希望對潛在選項提供反饋,以使用布爾值來啓用恢復。 setTimer()& stopTimer()是預定義的函數。Ball Bouncing off Walls - Pause&Resume

var ball; 
var dx = 4; 
var dy = 4; 
var isPaused = false; 


/* This program has a ball bounce around the screen. */ 
function start(){ 
    ball = new Circle(20); 
    ball.setPosition(100, 100); 
    add(ball); 

    setTimer(draw, 20); 
    if(isPaused == true){ 
     mouseClickMethod(resume); 
    } 
} 

function draw(){ 
    checkWalls(); 
    ball.move(dx, dy); 
    mouseClickMethod(pause); 
} 

function checkWalls(){ 
    // Bounce off right wall 
    if(ball.getX() + ball.getRadius() > getWidth()){ 
     dx = -dx; 
    } 

    // Bounce off left wall 
    if(ball.getX() - ball.getRadius() < 0){ 
     dx = -dx; 
    } 

    // Bounce off bottom wall 
    if(ball.getY() + ball.getRadius() > getHeight()){ 
     dy = -dy; 
    } 

    // Bounce off top wall 
    if(ball.getY() - ball.getRadius() < 0){ 
     dy = -dy; 
    } 
} 

function pause(e){ 
    var isPaused = true; 
    if(isPaused == true){ 
     stopTimer(draw); 
    } 
} 

function resume(e){ 
    var isPaused = false; 
    if(isPaused == false){ 
     setTimer(draw, 20); 
    } 
} 
+0

你需要它在純JavaScript或甚至jquery好嗎? –

+1

那麼爲什麼你有一個函數參數暫停()和恢復()如果你不打算使用它? –

+0

如果要執行與動畫相關的計時,可能需要查看requestAnimationFrame而不是使用setTimeout https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame – derp

回答

0

只是想通了。這完成了工作。

var ball; 
var dx = 4; 
var dy = 4; 
var isPaused; 


/* This program has a ball bounce around the screen. */ 
function start(){ 
    ball = new Circle(20); 
    ball.setPosition(100, 100); 
    add(ball); 

    setTimer(draw, 20); 
} 

function draw(){ 
    checkWalls(); 
    ball.move(dx, dy); 
    mouseClickMethod(pause); 
} 

function checkWalls(){ 
    // Bounce off right wall 
    if(ball.getX() + ball.getRadius() > getWidth()){ 
     dx = -dx; 
    } 

    // Bounce off left wall 
    if(ball.getX() - ball.getRadius() < 0){ 
     dx = -dx; 
    } 

    // Bounce off bottom wall 
    if(ball.getY() + ball.getRadius() > getHeight()){ 
     dy = -dy; 
    } 

    // Bounce off top wall 
    if(ball.getY() - ball.getRadius() < 0){ 
     dy = -dy; 
    } 
} 

function pause(){ 
    isPaused = true; 
    if(isPaused == true){ 
     stopTimer(draw); 
    } 
    mouseClickMethod(resume); 
} 

function resume(){ 
    isPaused = false; 
    if(isPaused == false){ 
     setTimer(draw, 20); 
    } 
} 
+0

我只需要遵循我知道工作的最後一段代碼 - 那就是mouseClickMethod(暫停)。因此,在pause()函數中,我添加了相同的位來查找mouseClickMethod(resume),它將布爾值切換回來,以便在resume()函數中再次啓用運動。很棒! isPaused是一個全局變量,但是由pause()和resume()函數獨立定義。它終於有效。感謝您的評論! – user67762

+0

根據我對你原來的帖子的評論,如果你簡單地從簡歷和暫停中完全刪除isPaused變量會發生什麼? (即如果條件沒有且變量分配爲否) –