PhysicsEditorの基本的なことについて
Corona SDKはもともと物理エンジン的なものを積んでるらしいのでさっそく使ってみようということで色々ググってみるとタイトル通り「PhysicsEditor」というものが。とりあえず無料でダウンロード出来るのでしてみました。
ダウンロード終了していざ起動してみるとこんな画面↓
当然ですが全部英語になっています。Corona SDKでさえ日本人利用者がほとんどいなくてリファレンスも全て英語なのでイヤな気持ちになりますが、コレしか選択肢がないのでとりあえず英語のままで。
PhysicsEditorを日本語で解説してあるサイトがほとんどなかったので自力でやるしかありません。
そんな中、公式サイトにチュートリアル↓が乗っていたのでとりあえず参考にしながら作りました。
Getting started with CoronaSDK and PhysicsEditor
画像の当たり判定の多角化の解説っぽいですね。
「Tolerance」の値で枠取りの雑さを決めているっぽいです。(1に近いほど当たり判定から画像がはみ出ないor引っ込みすぎない感じ)
「Vertexes」の値で枠取りをn角形にしているっぽいです。(数が多いほど当たり判定が多角形化する)
とりあえず、上記のような数値だけしか理解出来なかったので、そんな感じでチュートリアルを少しだけ変えて自分なりのプログラムを作りました。
リンゴとかボールを自分で作成した画像に変えただけです。上からオブジェクトが降ってくるような簡単なアプリです。雑です。解説めんどいのでソースコード置いておきますね。(main.luaです)
display.setStatusBar( display.HiddenStatusBar ) -- init physics local physics = require("physics") physics.start() -- background image --local bkg = display.newImage( "Background.png" ) -- load the physics data, scale factor is set to 1.0 local physicsData = (require "kaos").physicsData(1.0) -- create physical floor shape local bar = display.newImage("gfx/Floor.png")--地面 bar.x = 384; bar.y = 1024 bar.myName = "Floor" physics.addBody( bar, "static", physicsData:get("Floor") ) function newItem() -- all items local names = {"kao", "onigiri", "yajirusi"}; -- just pick a random one local name = names[math.random(#names)]; -- set the graphics obj = display.newImage(name..".png"); -- remember object's type obj.myName = name -- set the shape physics.addBody( obj, physicsData:get(name)) -- random start location obj.x = 384 + math.random( 160 ) - math.random( 160 ) obj.y = -100 -- add collision handler obj.collision = onLocalCollision obj:addEventListener( "collision", obj ) end local dropCrates = timer.performWithDelay( 1000, newItem, 100 )
ちょこっとだけ解説すると、main.luaを上記↑のように入力します。チュートリアルをダウンロードするとわかるのですが、もう一つソースコードが必要となります。自分のプログラムだと「kaos.lua」というものを作りました。
どうやって作ったかと言うと、PhysicsEditorをチュートリアル通り当たり判定の設定をして、「Publish As」というボタンを押すとLuaコードを自動で作成します。これが当たり判定のソースコードそのものであり、main.luaで読み込ませるようにすると何もいじらずに実行出来るようになります。
さすがに雑に作ったのでちゃんとフル機能使えるようにならないといけませんね。