物体を落下させるサンプル

『基礎から学ぶ Corona SDK』を読みながら、Coronaで遊んでいます。Luaについても『入門Luaプログラミング』や『Programming in Lua』を読みながら勉強中です。

Coronaには物理エンジン(Box2D)が組み込まれていて、物理シミュレーションを行うプログラムが手軽に書けるみたい。さっそく、物体を落下させるプログラムを書いてみました。わずか10行ほどのプログラムです。

プログラムの作成手順は以下の通りです(Macの場合)。

  • Corona Simulator.appを起動します。
  • 「New Project」アイコンをタップして新しいプロジェクトを作成します。
  • ウィザードでアプリの名前と、プロジェクトの保存先を指定します。
  • 保存先にmain.luaが自動生成されるので、そこに以下のプログラムを書きます。
-- main.lua
-- 箱を落下させるサンプル

local physics = require "physics"
physics.start()

-- 箱
local box = display.newRect(display.contentWidth/2-50/2, 0, 50, 50)
box:setFillColor(0, 255, 255)

-- 地面
local ground = display.newRect(0, display.contentHeight-50, display.contentWidth, 50)
ground:setFillColor(0, 255, 0)

physics.addBody(box, { density=1.0, friciton=0.5, bounce=0.5 })
physics.addBody(ground, { density=1.0, friciton=0.5, bounce=0.5 })

ground.bodyType = "static" -- 地面固定

プログラムをシミュレータで実行したのが以下のスクリーンショットです。水色の物体が、地面(緑色)に向かって落下します。地面に衝突すると弾み、やがて静止します。

f:id:noriok:20120324211856p:plain

課題:

  • physics.addBodyの引数で指定したdensityやfrictionなどのパラメータを変更すると、物体の挙動がどのように変わるのかよく分かっていない。

Coronaシミュレータでアプリ起動中、エディタでmain.luaを編集して保存するタイミングで自動的にシミュレータが再起動します(設定で変更可能)。インタラクティブに開発できるのはすごくうれしいですね。