做動畫學物理‧課堂活動10

密室小球(2/2)

F=ma

任務


1.讓小球受重力做等加速度運動

2. 用鍵盤的方向鍵控制小球的受力方向

[先下載半成品]

看看半成品裡有什麼

大部分程式都幫你寫好了。

控制ball


位置:ball.x , ball.y

速度:ball.vx , ball.vy

加速度:ball.ax , ball.ay

運動方程式


\[ v_x = \frac{\Delta x}{\Delta t}\] \[ x += v_x \Delta t\]
\[ v_y = \frac{\Delta y}{\Delta t}\] \[ y += v_y \Delta t\]
\[ a_x = \frac{\Delta v_x}{\Delta t}\] \[ v_x += a_x \Delta t\]
\[ a_y = \frac{\Delta v_y}{\Delta t}\] \[ v_y += a_y \Delta t\]

如何計算加速度a


\[加速度 = \frac{合力}{質量} = \frac{重力+阻力+繩張力+彈簧力+手推力+....}{質量}\]

\[ a = \frac{F_合}{m} = \frac{F_1+F_2+F_3+....}{m}\]

\[ a_x = \frac{F_1x+F_2x+...}{m}\]

\[ a_y = \frac{F_1y+F_2y+...}{m}\]

偵測按下鍵盤的方向鍵



document.onkeydown = myKeyDown;//偵測鍵盤按下
document.onkeyup = myKeyUp;//偵測鍵盤放開

function myKeyDown(e) {//按下
  log(e.keyCode);
}

function myKeyUp(e) {//放開
  log(e.keyCode);
}

常見keyCode↓

常見keyCode


38
40
37
39
enter(應避免)13
空白鍵(應避免)32
shift(應避免)16

按下鍵盤時,對小球施力



function myKeyDown(e) {//按下
  var kc = e.keyCode;
  if(kc = 38){//↑
    //ax = 0;
    //ay = force;
    ....
  }else if(kc = 40){//↓
    ....
  }else ....
}

function myKeyUp(e) {//放開
  //ax = ay = 0;
  .....
}

任務


用鍵盤方向鍵對小球施力,控制小球運動

遊戲點子


1. 用鍵盤方向鍵對小球施力,控制小球運動

2. 畫面上隨機出現寶石,小球與寶石接觸1秒,才算吃到寶石

3. (進階)寶石會隨機慢速移動

4. (進階)寶石太久沒吃到會消失