在Corona SDK中拖动物理对象。
2015-2-25 20:59:16
收藏:0
阅读:109
评论:3
我试图在我的场景中拖动一个重力为0,0的动态物体,我有一个类型为dynamic的正方形和一个类型为static的图像,但是当我拖动正方形超过图像时,图像会有一点力但是可以超过图像并通过至另一侧,就像这些图像:


这是我拖动正方形的代码:
local function dragBody( event )
local body = event.target
local phase = event.phase
local stage = display.getCurrentStage()
if "began" == phase then
stage:setFocus( body, event.id )
body.isFocus = true
body.tempJoint = physics.newJoint( "touch", body, event.x, event.y )
elseif body.isFocus then
if "moved" == phase then
body.tempJoint:setTarget( event.x, event.y )
elseif "ended" == phase or "cancelled" == phase then
stage:setFocus( body, nil )
body.isFocus = false
body.tempJoint:removeSelf()
end
end
return true
end
这是创建对象的代码:
function scene:createScene( event )
local group = self.view
my_square = display.newImage("square.png")
my_square.x = 60
my_square.y = 60
physics.addBody(my_square, "dynamic" )
group:insert(my_square)
floor = display.newImage("piso.png")
floor.x = 160
floor.y = 240
physics.addBody(floor, "static" )
group:insert(floor)
end
谢谢帮忙。
点赞
用户2186639
首先,我建议你尝试:
physics.setContinuous( false )
如果你已经这样做了:
在 Physics2D 引擎中有三种不同的物理类型,为了拖动目的,您可以使用“运动学”对象类型。但是,如果必须使用动态对象作为可拖动对象,则在碰撞中可能会出现错误。但是,如果您的静态对象每次都将相同,您可以在拖动函数中控制它。
我使用相同的东西实现了一个小型移动游戏。这是链接: https://itunes.apple.com/tr/app/bricks-world/id602065172?mt=8
如果您认为您想在这个游戏中获取类似的内容,只需留下一个评论^^ 我可以帮助进一步。
PS: 在游戏中,控制器挡板是动态的,屏幕周围的墙壁是静态的。
另一个解决方案:
local lastX, lastY
local function dragBody( event )
local body = event.target
local phase = event.phase
local stage = display.getCurrentStage()
if "began" == phase then
stage:setFocus( body, event.id )
body.isFocus = true
lastX, lastY = body.x, body.y
elseif body.isFocus then
if "moved" == phase then
-- 你可以用另一个值替换 1。
if(event.x > lastX) body.x = body.x + 1
else body.x = body.x - 1
if(event.y > lastY) body.y = body.y + 1
else body.y = body.y - 1
lastX, lastY = body.x, body.y
elseif "ended" == phase or "cancelled" == phase then
stage:setFocus( body, nil )
body.isFocus = false
end
end
return true
end
2013-12-25 16:01:07
用户3045251
尝试使用以下代码:
physics.setContinuous(false)
默认情况下,Box2D执行连续碰撞检测,防止物体“穿透”其他物体。如果关闭该功能,则可能造成一个移动得足够快的物体穿过一面薄墙。
2013-12-28 19:07:05
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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中获取用户配置主目录的跨平台方法
当您手动移动一个物体时,您正在失去对物理的控制,基本上您可以强制物体移动过静态物体。
您可以设置碰撞检测,当您移动正方形时,会触发一个事件,告诉您何时停止移动。当然,如果您在移动代码中不遵守这一点,您可以继续移动物体。