如何使用Corona SDK检测第一个发生碰撞的对象
2015-10-1 9:29:30
收藏:0
阅读:125
评论:1
function scene:create( event ) -- 载入 Corona 的 "physics" 库 local physics = require "physics" physics.start() -- 设置随机数的种子为当前时间 math.randomseed(os.time())
-- 当场景的视图不存在时调用此函数。
--
-- 在此处插入代码以初始化场景
-- 例如:将显示对象添加到“sceneGroup”中,添加触摸侦听器,等等。
local sound = audio.loadStream("pudi.mp3")
audio.play(sound, { channel=1, loops=-1, fadein=3000})
local sceneGroup = self.view
-- 创建灰色矩形作为背景
local background = display.newImageRect("background.jpg", screenW, screenH )
background.anchorX = 0
background.anchorY = 0
local finishline = display.newRect( 0, 450, 750, 5 )
physics.addBody(finishline,"static",{friction=2.0,bounce=0.3})
finishline.myName = "finishline"
local blueTurtle = display.newImageRect("blueturtle.png",33,42)
physics.addBody(blueTurtle,"dynamic",{friction=2.0,bounce=0})
blueTurtle.myName = "Blue Turtle"
local redTurtle = display.newImageRect("redturtle.png",33,42)
physics.addBody(redTurtle,"dynamic",{friction=2.0,bounce=0})
redTurtle.myName = "Red Turtle"
local greenTurtle = display.newImageRect("turtlegreen.png",33,42)
physics.addBody(greenTurtle,"dynamic",{friction=2.0,bounce=0})
greenTurtle.myName = "Green Turtle"
blueTurtle.x = 50
blueTurtle.y = 25
redTurtle.x = 150
redTurtle.y = 25
greenTurtle.x = 250
greenTurtle.y = 25
local function numberGenerator1()
local myRandomNumber = math.random(80000, 180000)
timer.performWithDelay( 1000, numberGenerator)
return myRandomNumber
end
local function numberGenerator2()
local myRandomNumber = math.random(80000, 180000)
timer.performWithDelay( 1000, numberGenerator)
return myRandomNumber
end
local function numberGenerator3()
local myRandomNumber = math.random(80000, 180000)
timer.performWithDelay( 1000, numberGenerator)
return myRandomNumber
end
time1 = numberGenerator1()
time2 = numberGenerator2()
time3 = numberGenerator3()
transition.to(blueTurtle,{x=50,y=350,time=time1})
transition.to(redTurtle,{x=150,y=350,time=time2})
transition.to(greenTurtle,{x=250,y=350,time=time3})
local function onCollision(event)
if (event.phase == "began") then
if(event.object2.myName == 'Blue Turtle') then
print("Blue Turtle Wins")
event.object2 = nil
composer.gotoScene( "instruction", "fade", 500 )
elseif(event.object2.myName == 'Red Turtle') then
print("Red Turtle Wins")
event.object2 = nil
composer.gotoScene( "instruction", "fade", 500 )
elseif(event.object2.myName == 'Green Turtle') then
print("Green Turtle Wins")
event.object2 = nil
composer.gotoScene( "instruction", "fade", 500 )
end
end
end
Runtime:addEventListener("collision",onCollision)
end
我希望获取第一只到达终点线的龟的名字,然后显示一个 GUI 显示哪只龟胜利了。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
首先,在 if 语句中 gotoScene() 是可以正常工作的...
要解决您的问题,这里是需要做的事情:
1- 将所有的显示对象都插入到 sceneGroup 中,这样当您进入其他场景时,所有对象都会从屏幕上移除。
sceneGroup:insert(background) sceneGroup:insert(finishline) sceneGroup:insert(redTurtle) sceneGroup:insert(blueTurtle) sceneGroup:insert(greenTurtle)2- 在离开场景之前,您需要停止音频,移除事件监听器,取消计时器和使用的过渡效果。我注意到您的计时器函数中有一些错误,因此我会修改您的代码为:
local function numberGenerator1() local myRandomNumber = math.random(80000, 180000) timer1 = timer.performWithDelay( 1000, numberGenerator1) return myRandomNumber end local function numberGenerator2() local myRandomNumber = math.random(80000, 180000) timer2 = timer.performWithDelay( 1000, numberGenerator2) return myRandomNumber end local function numberGenerator3() local myRandomNumber = math.random(80000, 180000) timer3 = timer.performWithDelay( 1000, numberGenerator3) return myRandomNumber end time1 = numberGenerator1() time2 = numberGenerator2() time3 = numberGenerator3() blueTrans = transition.to(blueTurtle,{x=50,y=350,time=time1}) redTrans = transition.to(redTurtle,{x=150,y=350,time=time2}) greenTrans = transition.to(greenTurtle,{x=250,y=350,time=time3})然后清理您的场景... 所以在 scene:hide() 中:
Runtime:removeEventListener("collision",onCollision) transition.cancel ( blueTrans ) transition.cancel ( redTrans ) transition.cancel ( greenTrans ) timer.cancel(timer1) timer.cancel(timer2) timer.cancel(timer3)3 - 对于 gotoScene(),您可以传递一个参数来确定哪只乌龟赢了,因此我在 if 语句中进行了修改:
composer.gotoScene( "instruction", {effect = "fade",time = 500, params = { winningTurtle = "Blue" }}) composer.gotoScene( "instruction", {effect = "fade",time = 500, params = { winningTurtle = "Red" }}) composer.gotoScene( "instruction", {effect = "fade",time = 500, params = { winningTurtle = "Green" }} )4- 最后..在 instruction.lua 中.. 在 scene:show() 中:
local prevScene = composer.getSceneName( "previous" ) composer.removeScene(prevScene)并访问前一个文件发送的参数:
local params = event.params print("The Winning Turtle is :" .. params.winningTurtle)