重力によるボールの動き

重力によるボールの動きサンプルです。
このサンプルに不必要な上端の処理とかも入っています。
各種パラメータを変更して見てください。

------------------------------------------
-- 重力によるボールの動きサンプル gravitation_sample.lua
------------------------------------------
 
function main()
 
  local BSize = 20      -- ボールのサイズ
  local g = 0.2         -- 重力加速度
  local e = 0.8         -- 反発係数
  local Px, Py = 20, 20 -- ボールのスタート位置(ポジション)
  local Sx, Sy = 3, 0   -- x,y方向の速度
  local F = 0           -- 経過フレーム
  local FEnd = 500      -- 終了フレーム
  local ScrXMax, ScrYMax = canvas.getviewSize()	-- 画面サイズ
  local oldPx, oldPy = 0, 0                     -- 直前のポジション記録
 
  C_Blue = color( 0, 0, 255)      -- 青(ブルー)
  C_Red = color(255, 0, 0)        -- 赤(レッド)
  C_Green = color( 0, 255, 0)     -- 緑(グリーン)
  C_Black = color( 0, 0, 0)       -- 黒(ブラック)
  C_White = color(255, 255, 255)  -- 白(ホワイト)
 
  canvas.drawCls(C_White)
 
  for F =0, FEnd, 1 do
 
    Sy =Sy + g -- 重力加速度を加算
 
    -- 座標に速度を加算
    Px = Px + Sx
    Py = Py + Sy
 
    -- Y座標が 画面サイズより大きくなったら跳ね返る
    if Py > ScrYMax -BSize/2 then
      Py = ScrYMax - BSize  -- 座標を画面内に戻す
      Sy = Sy * -1          -- Y方向の速度の符号を反転させる
      Sy = Sy * e           -- 反発係数を加味
    end
 
    -- Y座標が 画面サイズの上端より小さくなったら跳ね返る
    if Py < 0 + BSize/2 then
      Py = BSize            -- 座標を画面内に戻す
      Sy = Sy * -1          -- Y方向の速度の符号を反転させる
      Sy = Sy * e           -- 反発係数を加味
    end
 
    -- X座標が 右端より小さくなったら跳ね返る
    if Px < 0 + BSize/2 then
      Px = BSize            -- 座標を画面内に戻す
      Sx = Sx * -1          -- Y方向の速度の符号を反転させる
      Sx = Sx * e           -- 反発係数を加味
    end
 
    -- X座標が 左端より大きくなったら跳ね返る
    if Px > ScrXMax -BSize/2 then
      Px = ScrXMax - BSize  -- 座標を画面内に戻す
      Sx = Sx * -1          -- Y方向の速度の符号を反転させる
      Sx = Sx * e           -- 反発係数を加味
    end
 
    canvas.putCircle(oldPx, oldPy, BSize, C_White,1)
    canvas.putCircle(Px, Py, BSize, C_Red,1)
    oldPx = Px
    oldPy = Py
 
    canvas.drawText("ボールの自由落下のサンプルです", 0, 0, 24, C_Black, C_White)
    canvas.drawText("経過フレーム数 : " .. F, 0, 25, 24, C_Black, C_White)
    canvas.drawText("ボール座標(X,Y): " .. Px .. "," .. Py , 0, 50, 24, C_Black, C_White)
    canvas.drawText("ボールの加速度  : " .. Sx .. "," .. Sy, 0, 75, 24, C_Black, C_White)
 
  end
 
  canvas.drawText("タッチすると終了します" , 0, ScrYMax/2, 24, C_Black)
  touch(3)
 
end
 
main()
 

1.重力によるボールの動きサンプルです。画面上では、「ボールの自由落下のサンプルです」となっています。
2.赤いボールが自由落下しています。
3.下の端までくると、跳ね返ってきます。(下の端の判定、時間の関係もアバウトです)。
4.500フレームで終了します。


コメント(最大10行)
名前:
コメント

すべてのコメントを見る



タグ:

+ タグ編集
  • タグ:
最終更新:2012年03月11日 22:21
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。