Lua 科罗纳+;碰撞不起作用
我正在学习电晕,我正在尝试使用碰撞事件。 以下程序的目标是使用transition.to使岩石向汽车移动。并打印一行以报告发生碰撞的位置 但是,它不起作用。此外,我甚至无法收到“enterenter”消息,是什么原因导致程序无法进入enter功能 我的代码如下。先谢谢你Lua 科罗纳+;碰撞不起作用,lua,collision-detection,coronasdk,Lua,Collision Detection,Coronasdk,我正在学习电晕,我正在尝试使用碰撞事件。 以下程序的目标是使用transition.to使岩石向汽车移动。并打印一行以报告发生碰撞的位置 但是,它不起作用。此外,我甚至无法收到“enterenter”消息,是什么原因导致程序无法进入enter功能 我的代码如下。先谢谢你 local composer = require( "composer" ) local scene = composer.newScene() local physics = require "physics" physi
local composer = require( "composer" )
local scene = composer.newScene()
local physics = require "physics"
physics.start(); physics.pause()
local function onLocalCollision( self, event )
if ( event.phase == "began" ) then
print( self.myName .. ": collision began with " .. event.other.myName )
elseif ( event.phase == "ended" ) then
print( self.myName .. ": collision ended with " .. event.other.myName )
end
end
local widget = require "widget"
function scene:create( event )
print("entercreate")
local sceneGroup = self.view
local backgrd = display.newImage("background2.png",0,260)
backgrd:scale(3,3)
local car = display.newImage("car2.png",80,270)
physics.addBody(car,"static")
car.myName="Car"
local rock = display.newImage("rock.jpg",520,280)
rock:scale(0.05,0.05)
physics.addBody(rock,"static")
rock.myName="rock"
sceneGroup:insert(backgrd)
sceneGroup:insert(car)
sceneGroup:insert(rock)
transition.to(backgrd,{time=24000, x=-1800,onComplete=endScroll})
transition.to(rock,{time=4000, delay=2500,x=-40})
end
function scene:enter( event )
print("enterenter")
physics.start()
local sceneGroup = self.view
Runtime:addEventListener( "collision", onLocalCollision )
end
scene:addEventListener( "create", scene )
scene:addEventListener( "enter", scene )
return scene
使用本地和全局(运行时)侦听器的工作代码:
local widget = require "widget"
local composer = require( "composer" )
local scene = composer.newScene()
local physics = require "physics"
physics.start()
physics.setGravity( 0,0 )
local function onGlobalCollision( event )
local target = event.object1
local other = event.object2
if ( event.phase == "began" ) then
print( "GLOBAL: " .. target.name .. ": collision began with " .. other.name )
elseif ( event.phase == "ended" ) then
print( "GLOBAL: " .. target.name .. ": collision ended with " .. other.name )
end
end
local function onLocalCollision( event )
local target = event.target
local other = event.other
if ( event.phase == "began" ) then
print( "LOCAL: " .. other.name .. ": collision began with " .. target.name )
elseif ( event.phase == "ended" ) then
print( "LOCAL: " .. other.name .. ": collision ended with " .. target.name )
end
end
function scene:create( event )
print("scene:create")
local sceneGroup = self.view
local car = display.newRect( 100, 100, 100, 100 )
car.name = "car"
physics.addBody( car )
local rock = display.newRect( 250, 250, 100, 100 )
rock.name = "rock"
rock:setFillColor( 0.5, 0.5, 0.5 )
physics.addBody( rock )
rock:addEventListener( "collision", onLocalCollision )
sceneGroup:insert(car)
sceneGroup:insert(rock)
transition.to(rock,{time=4000, x = -40, y = -100})
Runtime:addEventListener( "collision", onGlobalCollision )
end
function scene:enter( event )
print("scene:enter")
local sceneGroup = self.view
end
scene:addEventListener( "create", scene )
scene:addEventListener( "enter", scene )
return scene
代码的问题是两个实体是静态的,两个静态实体不能相互碰撞,而且在composer中没有所谓的场景:输入
(这就是为什么它不会被调用,因此不会调用onLocalListener
)
某些实体类型会或不会与其他实体类型发生碰撞。在里面
两个物理对象(至少一个对象)之间的碰撞
必须是动态的,因为这是唯一与
任何其他类型。有关实体的详细信息,请参见《物理实体指南》
类型
以下是有关Composer API的一些信息,您将看到您可能应该使用场景:show
:
使用本地和全局(运行时)侦听器的工作代码:
local widget = require "widget"
local composer = require( "composer" )
local scene = composer.newScene()
local physics = require "physics"
physics.start()
physics.setGravity( 0,0 )
local function onGlobalCollision( event )
local target = event.object1
local other = event.object2
if ( event.phase == "began" ) then
print( "GLOBAL: " .. target.name .. ": collision began with " .. other.name )
elseif ( event.phase == "ended" ) then
print( "GLOBAL: " .. target.name .. ": collision ended with " .. other.name )
end
end
local function onLocalCollision( event )
local target = event.target
local other = event.other
if ( event.phase == "began" ) then
print( "LOCAL: " .. other.name .. ": collision began with " .. target.name )
elseif ( event.phase == "ended" ) then
print( "LOCAL: " .. other.name .. ": collision ended with " .. target.name )
end
end
function scene:create( event )
print("scene:create")
local sceneGroup = self.view
local car = display.newRect( 100, 100, 100, 100 )
car.name = "car"
physics.addBody( car )
local rock = display.newRect( 250, 250, 100, 100 )
rock.name = "rock"
rock:setFillColor( 0.5, 0.5, 0.5 )
physics.addBody( rock )
rock:addEventListener( "collision", onLocalCollision )
sceneGroup:insert(car)
sceneGroup:insert(rock)
transition.to(rock,{time=4000, x = -40, y = -100})
Runtime:addEventListener( "collision", onGlobalCollision )
end
function scene:enter( event )
print("scene:enter")
local sceneGroup = self.view
end
scene:addEventListener( "create", scene )
scene:addEventListener( "enter", scene )
return scene
代码的问题是两个实体是静态的,两个静态实体不能相互碰撞,而且在composer中没有所谓的场景:输入
(这就是为什么它不会被调用,因此不会调用onLocalListener
)
某些实体类型会或不会与其他实体类型发生碰撞。在里面
两个物理对象(至少一个对象)之间的碰撞
必须是动态的,因为这是唯一与
任何其他类型。有关实体的详细信息,请参见《物理实体指南》
类型
以下是有关Composer API的一些信息,您将看到您可能应该使用场景:show
: