2010-12-03 73 views
1

我正在嘗試一個簡單的遊戲電暈物理引擎。我創建了幾個「球」,只是圓形對象和「很好」的靜態傳感器對象。電暈物理引擎碰撞事件對象

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

碰撞事件具有「自我」和「事件」參數。有沒有簡單的方法來檢查撞擊井的「球」的半徑?

回答

2

你可能要麼想通了這一點已經或現在放棄電暈,但即使這樣有一個答案在這裏,我將添加我的兩分錢:

你可以任何你想要的屬性添加到您的球對象。您不必顯式聲明屬性 - 它們是在爲它們分配值時自動創建的。例如,添加一個「半徑」屬性,只是這樣做,一旦你已經創建了「球」的對象:

ball.radius = 20 

一旦你做到了這一點,假設你已經把它貼在碰撞事件處理程序球本身,球被稱爲「自我」參數傳遞,你可以用self.radius得到半徑:

local radius = self.radius 

如果你已經附加了事件處理一些其他的對象,球會被傳遞作爲「事件」參數的「其他」屬性。因此,使用您的例子好了,如果你附加的事件處理程序的好,那麼你會得到球的半徑:

local radius = event.other.radius 

當然,如果你有其他(非球)對象,可以也擊中井,而這些物體沒有「半徑」屬性,那麼你必須確保「event.other」實際上是一個「球」物體。如果你不這樣做,那麼當你嘗試獲得半徑時你會得到「零」。事實上,你可以使用這種行爲來檢測到其他對象實際上是一個球:

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 

希望這有助於。我只有一個月進入電暈我自己,所以...