让一个图像消除另一个图像的碰撞检测。
2013-11-23 11:31:5
收藏:0
阅读:123
评论:1
我有一张水的图片,如果碰到了用户精灵就会导致用户精灵死亡,从生命变量中减去一点,并将精灵重新生成到起点。我有另一张筏子的图片,它会不断生成新的图片并在屏幕上移动。我试图让用户可以移动到浮在水上的筏子上,而不会被重新生成到起点。
--设定死亡过程的函数。
function waterCollide(event)
frog.x = display.contentWidth/2
frog.y = 504
isOnRaft = 0
lives = lives - 1
showlives.text = "Lives: "..lives,230,-36,native.systemFont,25
lose()
end
--设置水
water = display.newRect(0,0,320,150)
water.x = display.contentWidth*0.5
water.y = 144
water.alpha = 0
physics.addBody(water,"static", {isSensor = true})
water:addEventListener("collision", function ()timer.performWithDelay(50,waterCollide)end)
--设置浮木的位置和移动
local mRandom = math.random
local raft = {"Raft1" ,"Raft2"}
local objectTag = 0
local object = {}
function spawnlogleft()
objectTag = objectTag + 1
local objIdx = mRandom(#raft)
local objName = raft[objIdx]
object[objectTag] = display.newImage(objName..".png")
object[objectTag].x = -96
object[objectTag].y = 216
object[objectTag].name = objectTag
transition.to(object[objectTag], {time = 10000, x = 416, onComplete = function(obj) obj:removeSelf(); obj = nil; end})
physics.addBody( object[objectTag], "static",{isSensor = true})
end
spawnlogleft()
timer.performWithDelay(3500,spawnlogleft,0)
--用户精灵的细节
frog = display.newSprite(frogSheet, sequenceData)
frog.x = display.contentWidth/2
frog.y = 504
physics.addBody( frog, "dynamic", physicsData:get("FrogSheetData"))
frog.isFixedRotation = true
用户精灵是由三个帧组成的动画,时长为300。如果需要更多细节,我会提供更多信息。
谢谢
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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中获取用户配置主目录的跨平台方法
Corona 有一个非常棒的东西叫做 CollisionFilters。你可以在 /Physics/CollisionFilter 中了解如何使用它们。
基本上,你可以设置一些位来使某些对象与其他对象无法碰撞。看看下面的 main.lua 例子:
local physics = require("physics") physics.start() physics.setScale( 60 ) display.setStatusBar( display.HiddenStatusBar ) local bkg = display.newImage( "stripes.png" ) borderCollisionFilter = { categoryBits = 1, maskBits = 6 } -- 仅与 (4 & 2) 碰撞 borderBodyElement = { friction=0.4, bounce=0.8, filter=borderCollisionFilter } local borderTop = display.newRect( 0, 0, 320, 1 ) borderTop:setFillColor( 0, 0, 0, 0) -- 隐形 physics.addBody( borderTop, "static", borderBodyElement ) local borderBottom = display.newRect( 0, 479, 320, 1 ) borderBottom:setFillColor( 0, 0, 0, 0) -- 隐形 physics.addBody( borderBottom, "static", borderBodyElement ) local borderLeft = display.newRect( 0, 1, 1, 480 ) borderLeft:setFillColor( 0, 0, 0, 0) -- 隐形 physics.addBody( borderLeft, "static", borderBodyElement ) local borderRight = display.newRect( 319, 1, 1, 480 ) borderRight:setFillColor( 0, 0, 0, 0) -- 隐形 physics.addBody( borderRight, "static", borderBodyElement ) local red = {} local blue = {} local redCollisionFilter = { categoryBits = 2, maskBits = 3 } -- 仅与 (2 & 1) 碰撞 local blueCollisionFilter = { categoryBits = 4, maskBits = 5 } -- 仅与 (4 & 1) 碰撞 local redBody = { density=0.2, friction=0, bounce=0.95, radius=43.0, filter=redCollisionFilter } local blueBody = { density=0.2, friction=0, bounce=0.95, radius=43.0, filter=blueCollisionFilter } for i = 1,4 do red[i] = display.newImage( "red_balloon.png", (80*i)-60, 50 + math.random(20) ) physics.addBody( red[i], redBody ) red[i].isFixedRotation = true blue[i] = display.newImage( "blue_balloon.png", (80*i)-60, 250 + math.random(20) ) physics.addBody( blue[i], blueBody ) blue[i].isFixedRotation = true end