重力によるボールの動きサンプルです。
このサンプルに不必要な上端の処理とかも入っています。
各種パラメータを変更して見てください。
------------------------------------------
-- 重力によるボールの動きサンプル 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フレームで終了します。
最終更新:2012年03月11日 22:21