是否可以从SKSpriteNode的SKTexture获取当前图像名称?
我是SpriteKit的新手,我正在写一个小游戏。我需要检测忍者何时击中敌人。像这样的东西
我正在做SKAction之类的>>
- (void)setUpHit { SKTextureAtlas *hitAtlas = [SKTextureAtlas atlasNamed:@"Ninja_hit"]; SKTexture *hit1 = [hitAtlas textureNamed:@"Ninja_hit_1"]; SKTexture *hit2 = [hitAtlas textureNamed:@"Ninja_hit_2"]; SKTexture *hit3 = [hitAtlas textureNamed:@"Ninja_hit_3"]; SKTexture *hit4 = [hitAtlas textureNamed:@"Ninja_hit_4"]; SKAction *hitAnimation = [SKAction animateWithTextures:@[hit1, hit2, hit3, hit4] timePerFrame:0.1]; SKAction *wait = [SKAction waitForDuration:0.3]; SKAction *goBack = [SKAction animateWithTextures:@[hit1, [SKTexture textureWithImageNamed:@"Ninja"]] timePerFrame:0.1]; self.hitAction = [SKAction sequence:@[hitAnimation, wait, goBack]]; }
但是点击仅在图片Ninja_hit_2.png或Ninja_hit_3.png上有效。
所以当我与敌人进行相交节点忍者时,我需要检测当前的纹理图像名称。
现在我正在做类似的事情
if ([ninja intersectsNode:node] && !self.isKilled) { SKTexture *currentTexture = [ninja texture]; if ([self isHit:currentTexture]) { //kill enemy here } }
where
- (BOOL)isHit:(SKTexture *)texture { NSString *description = [texture description]; NSRange range = [description rangeOfString:@"'"]; NSString *textureName = [description substringFromIndex:NSMaxRange(range)]; range = [textureName rangeOfString:@"'"]; textureName = [textureName substringToIndex:NSMaxRange(range) - 1]; if ([textureName isEqualToString:@"Ninja_hit_2.png"] || [textureName isEqualToString:@"Ninja_hit_3.png"]) { return YES; } return NO; }
我知道这是不正确的,但是我找不到如何获取当前纹理名称或正确执行它的方法。你可以帮帮我吗?
是否可以从SKSpriteNode的SKTexture获取当前图像名称?我是SpriteKit的新手,正在写一个小游戏。我需要检测忍者何时击中敌人。像这样的东西...
嗯,我的策略是这样:
从SKAtlas动画中检测当前名称,这不是最好的方法,但对我有用。
查看SKSpriteNode的纹理描述,您应该能够看到图像的名称