1

我正在为一个简单的游戏尝试 Corona 物理引擎。我创建了几个“球”,只是圆形物体和“很好”的静态传感器物体。

physics.addBody(ball,{density=1-dens, friction=0.2, bounce=boun, radius=imp})
physics.addBody( well,"static", { radius=sensorRadius, isSensor = true} )

碰撞事件有“self”和“event”参数。有没有一种简单的方法来检查击中井的“球”的半径?

4

1 回答 1

2

您可能已经弄清楚了这一点,或者现在已经放弃了 Corona,但是这里有一个答案,我将加两分钱:

您可以将任何您想要的属性添加到您的球对象。您不必显式声明属性——它们是在您为其赋值时自动创建的。例如,要添加“半径”属性,只需在创建“球”对象后执行此操作:

ball.radius = 20

完成后,假设您已将碰撞事件处理程序附加到球本身,球作为“self”参数传递,您可以使用 self.radius 获取半径:

local radius = self.radius

如果您已将事件处理程序附加到某个其他对象,则球将作为“事件”参数的“其他”属性传递。因此,使用您的井示例,如果您将事件处理程序附加到井上,那么您将获得球的半径:

local radius = event.other.radius

当然,如果您有其他(非球)对象也可以击中井,并且这些对象没有“半径”属性,那么您必须确保“event.other”实际上是一个“球”对象首先。如果你不这样做,那么当你尝试获取半径时你会得到“nil”。事实上,您可以使用这种行为来检测另一个对象实际上是一个球:

local radius = event.other.radius
if radius then
    -- may be safe to assume event.other is a ball
else
    -- something else hit the well
end

希望这可以帮助。我自己才刚接触 Corona 一个月,所以...

于 2010-12-28T23:00:01.400 回答