この質問のフォローアップ、セラミックタイルエンジンを使用したストーリーボード、および衝突検出を使用したストーリーボードはまだ謎です。コードは次のとおりです。
-- hide status bar
display.setStatusBar(display.HiddenStatusBar)
local storyboard = require("storyboard")
--Set up the physics world
local physics = require("physics")
physics.start()
physics.setGravity(0, 0)
physics.setDrawMode('hybrid')
local scene = storyboard.newScene()
local widget = require("widget")
-- Add Hero to Physics
local hero = display.newImage("images/man.png")
hero.x = 40
hero.y = 80
local heroCollisionFilter = { categoryBits = 4, maskBits = 2 }
local heroBody = { filter=heroCollisionFilter, isSensor=true }
physics.addBody(hero, "dynamic", heroBody)
function scene:createScene( event )
local group = self.view
local ceramic = require("Ceramic")
ceramic.showPrints = false
local map = ceramic.buildMap("maps/map.lua")
-- collisionLayer = map.layer['Collision']
-- collisionLayer.ccName = "map"
-- physics.addBody(collisionLayer, "static", { friction=0.5, bounce=0.3 } )
map.y = 0
map.setCameraDamping(10)
map.layer['World']:insert(hero)
end
function onGlobalCollision(event)
if(event.phase == "began") then
print( "Global report: " .. event.object1.ccName .. " & " .. event.object2.ccName .. " collision began" )
elseif(event.phase == "ended") then
print( "Global report: " .. event.object1.ccName .. " & " .. event.object2.ccName .. " collision ended" )
end
print( "**** " .. event.element1 .. " -- " .. event.element2 )
end
Runtime:addEventListener("collision", onGlobalCollision)
scene:addEventListener( "createScene", scene )
return scene
スクリーンショットは次のようになります。
ただし、print
メッセージがターミナルにまったく表示されないため、衝突が発生することはありません。
私は使用しています:
- コロナSDK
- セラミック タイル エンジン
- コロナ モジュール: 絵コンテ、物理演算
衝突検出を有効にするにはどうすればよいですか? パラメータは正しいですか?
編集 2013/10/27
タイル マップの設定は次のとおりです。
Mac OS X で実行している場合、衝突は発生しません (ハイブリッド レイヤーのみが色を変更します)。
Windows 7 で実行すると、コードは次の行でクラッシュします。
ceramic.buildMap("maps/map.lua")
エラーあり:
Ceramic.lua でグローバル 'reversePolygon' (nil 値) を呼び出そうとしています: 617
次の行をコメントアウトすると、エラーはなくなりました。
collisionLayer = map.layer['Collision']
collisionLayer.ccName = "map"
physics.addBody(collisionLayer, "static", { friction=0.5, bounce=0.3 } )
ただし、衝突関数は呼び出されません。