2013-10-05 67 views
0

我正在用Objective-C編寫一個簡單的遊戲,使用cocos2d。在這場比賽中,我給了敵人精靈隨機的位置。爲了避免不同敵人的重疊,我寫了一個檢查來確保新的精靈的CGRect與其隨機位置不會與任何其他精靈的CGRect重疊。如何在初始化之前獲取CCSprite的大小?

我的問題是如何在初始化新精靈之前獲得CGRect的大小?如果你使用ccbi文件(cocosbuilder)初始化精靈,你如何做到這一點?

我之前做過的是在初始化新的精靈之前,我用png文件初始化了一個臨時精靈,它顯示了敵人的第一幀(每一幀都有相同的大小)。然後就像這樣使用它的大小:tempSprite.boundingBox。雖然它運行良好,但我認爲在初始化每個新的敵方精靈之前製作tempSprite效率並不高。

現在我試圖用cocosbuilder轉換我的遊戲(因爲使用ccbi文件可以更容易地調整動畫)。如何在初始化之前知道精靈的大小?我想我仍然可以使用[CCBReader nodeGraphFromFile:@「enemySprite.ccbi」]製作tempSprite,並使用tempSprite.boundingBox來獲取它的大小。但是這是否正確嗎?它對CPU和內存資源非常浪費。更新:我嘗試了我的方式不起作用。由於邊界框大小值是(0,0)(位置值是正確的)。

+0

精靈已經批量存儲了嗎?如果是這樣,那麼它將不需要額外的資源來初始化以獲得大小。 –

+0

是的,我可以從例如第一幀的png文件中獲得正確的大小。但是我有另一個問題。由於ccbi文件的大小爲0,我無法觸摸它(觸摸紋理不會被視爲「觸摸」)。 – ArtS

回答

0

我自己找到解決方案。這個問題是由於我誤解了由ccbi文件創建的實例的結構造成的。它是一個帶有CCSprite的CCNode,因爲它是可變的,而不是簡單的CCSprite。 CCNode的大小爲(0,0)(它用作CCSprite的容器),並且CCSprite具有正確的大小和正確的位置。

我在CocosBuilder中爲CCSprite指定了一個CCSprite *變量。並使用CCSprite.boundingBox來檢查碰撞。這解決了所有問題。

相關問題