如何在Lua获得更新的职位

时间:2014-05-18 18:55:26

标签: lua collision-detection

我有2个类,在一个类中,我有object1的位置代码随时间变化,在class2中,我有object2的代码随时间变化,位置以不同的速率连续变化。现在,我想弄清楚这两个物体是否发生碰撞,但是我如何才能让它们的位置在不到一秒钟的时间内发生变化,这是他们的任何捷径或有效方法吗?

以下是object1和object 2如何改变其位置:

object 1:
self:setRotation( self:getRotation() + math.random(5,7) )

object2:
x = 215 + math.cos(angle)*195 
y = 130 + math.sin(angle)*115 

这两个都是2个不同类别的一部分。我需要在我检查碰撞的第三个lua文件中使用它们,所以我如何在更改后立即获取这两个值的x和y值并将它们传递给新函数以检查碰撞

我有2个类,在一个类中,我有object1的位置代码随时间变化,在class2中,我有object2的代码随时间变化,位置以不同的速率连续变化。现在,我想弄清楚这两个物体是否发生碰撞,但是我如何才能让它们的位置在不到一秒钟的时间内发生变化,这是他们的任何捷径或有效方法吗?

以下是object1和object 2如何改变其位置:

object 1:
self:setRotation( self:getRotation() + math.random(5,7) )

object2:
x = 215 + math.cos(angle)*195 
y = 130 + math.sin(angle)*115 

这两个都是2个不同类别的一部分。我需要在我检查碰撞的第三个lua文件中使用它们,所以我如何在更改后立即获取这两个值的x和y值并将它们传递给新函数以检查碰撞

以下是我尝试使用TNT进行碰撞检测的方法

- >让我们说我把我所有的3个时钟指针分组,它们围绕一个锚点旋转,所以x和y保持不变,但它们有一些宽度延伸,

- >我的播放器正在移动省略号,它的位置随着时间的推移而变化(只有当玩家跳跃时,它才会在地板上)

要求 - >我真正想要的是每当玩家接触到任何一个时钟指针时,你应该调用掉守方法(代码中没有给出),现在实现这一点,这就是我所做的: 并且碰撞可以是任何时钟指针的任何长度,(所以基本上这部分是我没有得到的) 一旦玩家的x和y改变,我就检查了碰撞,这里是代码: 附加图像

x = 215 + math.cos(angle)*195 
y = 130 + math.sin(angle)*115 
for i = 1, groupA:getNumChildren() do
local sprite2 = groupA:getChildAt(i) 
local oBoxToObox = tntCollision.oBoxToObox
if i == 1 then 
a = 97
b = 11 
elseif i == 2 then 
a = 206
b = 64
else 
a = 120
b = 10
end
local pointToObox = tntCollision.pointToObox
tntCollision.setCollisionAnchorPoint(0, 0)
if oBoxToObox(x,y, 36, 40, cute.anim[self.frame]: getRotation(),sprite2:getX(), sprite2:getY(), a ,b, sprite2:getRotation()) then 
youLoose()
end
end

enter image description here

1 个答案:

答案 0 :(得分:0)

如果对象有体积,你需要测试它们的边界是否交叉,相当复杂,你应该使用Box2d或TNT Collision。两者都集成到Gideros(虽然TNT是单独的下载)。 TNT碰撞只是碰撞,没有物理,所以可能更快,但不一定如此,你必须要比较。

否则(没有音量,即只是点碰撞),你可以只测试每个物体的x坐标;如果几乎相同,那么检查y坐标;如果几乎相同则发生碰撞,否则就不会碰撞。