1

我目前正在爲Cocos2d開發一款適用於iPhone的塗鴉跳轉風格的遊戲,並設置了兩個不同層次的場景 - 遊戲對象(平臺,精選集等)。 )和玩家(角色,由玩家控制)。Cocos2d - 如何檢查不同層次的對象之間的交集

我有這些在單獨的圖層,因爲我想在玩家跳起來時向下滾動整個遊戲對象層 - 給它垂直,塗鴉跳躍式的感覺。

問題是播放器和平臺之間的交集不會發生,因爲它們位於不同的圖層上。

有誰知道這是如何解決的?有些人提到convertToWorldCoords,但我迷失了!

回答

5

Yessir,convertToWorldCoords!或者,就像那樣 - 基本上你想要了解你的玩家和遊戲對象之間的相對位置,一種方法是將它們全部轉換爲「世界」座標。或者,您可以將玩家位置/矩形轉換爲您的遊戲對象的座標系。

想要保持簡單隻需一些CGRect交叉點測試?擴展CCNode與類別:

CCNode + CoordHelpers.h

#import "CCNode.h" 

@interface CCNode (CoordHelpers) 
- (CGRect) worldBoundingBox; 
@end 

CCNode + CoordHelpers.m

#import "CCNode+CoordHelpers.h" 

@implementation CCNode (CoordHelpers) 
-(CGRect)worldBoundingBox { 
    CGRect rect = CGRectMake(0, 0, contentSize_.width, contentSize_.height); 
    return CGRectApplyAffineTransform(rect, [self nodeToWorldTransform]); 
} 
@end 

然後,超級簡單的CGRect碰撞測試:

if(CGRectIntersectsRect([playerObj worldBoundingBox], [otherObj worldBoundingBox])  
{/*...do stuff...*/} 

無論您需要使用此方法,請務必#import "CCNode+CoordHelpers.h"

+0

完美的作品!謝謝! – andyg

+0

這改變了我的生活。沒有更多的嵌套'ConverToNodeSpace'。 –

相關問題