gpt4 book ai didi

ios - SKTexture 获取图像名称

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:45 24 4
gpt4 key购买 nike

是否有可能从 SKSpriteNode 的 SKTexture 获取当前图像名称?

我是 SpriteKit 的新手,我正在编写一个小游戏。我需要检测忍者何时会击中敌人。像这样

enter image description here enter image description here

我正在做 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 上。

所以当我与敌人做 intersectsNode ninja 时,我需要检测当前纹理图像名称。

现在我正在做类似的事情

if ([ninja intersectsNode:node] &&  !self.isKilled)
{
SKTexture *currentTexture = [ninja texture];

if ([self isHit:currentTexture])
{
//kill enemy here
}
}

在哪里

- (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;
}

我知道那是不正确的,但我找不到如何获取当前纹理名称或如何正确执行它。你可以帮帮我吗?

最佳答案

嗯,我的策略是这样的:

在你的忍者类上有一个纹理属性。让他们在身边

@property (nonatomic, strong) NSArray * hitTextures;

然后存储命中的纹理(注意这是一个延迟加载的getter方法)

-(NSArray *)hitTextures{
if (_hitTextures == nil){
SKTexture *hit1 = [SKTexture textureWithImageNamed:@"Ninja_hit_1"];
SKTexture *hit2 = [SKTexture textureWithImageNamed:@"Ninja_hit_2"];
SKTexture *hit3 = [SKTexture textureWithImageNamed:@"Ninja_hit_3"];
SKTexture *hit4 = [SKTexture textureWithImageNamed:@"Ninja_hit_4"];

_hitTextures = @[hit1, hit2, hit3, hit4];
}
return _hitTextures;
}

请注意,我们不需要显式制作 SKTextureAtlas 对象:

When loading the texture data, Sprite Kit searches the app bundle for an image file with the specified filename. If a matching image file cannot be found, Sprite Kit searches for the texture in any texture atlases stored in the app bundle. If the specified image does not exist anywhere in the bundle, Sprite Kit creates a placeholder texture image.

使用这个纹理数组来填充你的SKAction

    SKAction *hitAnimation = [SKAction animateWithTextures:self.hitTextures
timePerFrame:0.1];

这允许您像这样更改您的 -isHit 方法:

- (BOOL)isHit:(SKTexture *)texture
{
NSUInteger index = [self.hitTextures indexOfObject:texture];

if (index == 1 ||
index == 2)
{
return YES;
}

return NO;
}

这样您就不会依赖于可能会发生变化的-description 方法的实现细节。

关于ios - SKTexture 获取图像名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21698512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com