你可以做這樣的事情:
if ([node isKindOfClass:[StaticLevelElement class]]){
NSLog(@"Touched node is StaticLevelElement");
}else if([node isKindOfClass:[Hero class]]){
NSLog(@"Touched node is Hero");
}
從文檔約isKindOfClass
:方法:
返回一個布爾值,指示接收者是否是給定類或的 實例任何繼承自 該類的類的實例。
看這個部分:
...或從該類
你應該小心,因爲如果你繼承StaticLevelElement
這樣繼承任何類的一個實例:
@interface SubclassOfStaticLevelElement : StaticLevelElement
@end
而裏面的touchesBegin做到這一點:
if ([node isKindOfClass:[StaticLevelElement class]]){
NSLog(@"Touched node is StaticLevelElement");
}
如果同時觸摸StaticLevelElement
的實例和SubclassOfStaticLevelElement
的實例,該方法將返回true。這是因爲SubclassOfStaticLevelElement
繼承自StaticLevelElement
。
所以我想,這不是你的最佳方法。在SpriteKit中,在您的情況下,人們經常使用下面的方法(通過設置屬性SKNode's
name)。
裏面你Hero's
初始化(或者你能說出你的場景裏你在創建節點):
self.name = @"hero";
然後在您的touchesBegan
:
if ([node.name isEqualToString:@"hero"]){
NSLog(@"Touched node is hero");
}