我目前正在爲Cocos2d開發一款適用於iPhone的塗鴉跳轉風格的遊戲,並設置了兩個不同層次的場景 - 遊戲對象(平臺,精選集等)。 )和玩家(角色,由玩家控制)。Cocos2d - 如何檢查不同層次的對象之間的交集
我有這些在單獨的圖層,因爲我想在玩家跳起來時向下滾動整個遊戲對象層 - 給它垂直,塗鴉跳躍式的感覺。
問題是播放器和平臺之間的交集不會發生,因爲它們位於不同的圖層上。
有誰知道這是如何解決的?有些人提到convertToWorldCoords,但我迷失了!
我目前正在爲Cocos2d開發一款適用於iPhone的塗鴉跳轉風格的遊戲,並設置了兩個不同層次的場景 - 遊戲對象(平臺,精選集等)。 )和玩家(角色,由玩家控制)。Cocos2d - 如何檢查不同層次的對象之間的交集
我有這些在單獨的圖層,因爲我想在玩家跳起來時向下滾動整個遊戲對象層 - 給它垂直,塗鴉跳躍式的感覺。
問題是播放器和平臺之間的交集不會發生,因爲它們位於不同的圖層上。
有誰知道這是如何解決的?有些人提到convertToWorldCoords,但我迷失了!
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"
!
完美的作品!謝謝! – andyg
這改變了我的生活。沒有更多的嵌套'ConverToNodeSpace'。 –