0

面白い形でクラッシュしています。私は次SKActionのように設定します

-(id)initWithSize:(CGSize)size
{
    if (self = [super initWithSize:size])
    {
        self.backgroundColor = [SKColor colorWithWhite:255 alpha:1];

        [self createNinja];
        [self setUpJump];
    }
    return self;
}

- (void)setUpJump
{
    SKTextureAtlas *jumpAtlas = [SKTextureAtlas atlasNamed:@"Ninja_jump"];

    SKTexture *jump1 = [jumpAtlas textureNamed:@"Ninja_jump_1"];
    SKTexture *jump2 = [jumpAtlas textureNamed:@"Ninja_jump_2"];
    SKTexture *jump3 = [jumpAtlas textureNamed:@"Ninja_jump_3"];
    SKTexture *jump4 = [jumpAtlas textureNamed:@"Ninja_jump_4"];

    SKAction *jumpUpAnimation = [SKAction animateWithTextures:@[jump1, jump2, jump3, jump4]
                                             timePerFrame:0.07];

    SKAction *jumpDownAnimation = [SKAction animateWithTextures:@[jump3, jump2, jump1, [SKTexture textureWithImageNamed:@"Ninja"]]
                                               timePerFrame:0.07];

    SKAction *wait = [SKAction waitForDuration:0.3];

    self.jumpAction = [SKAction sequence:@[jumpUpAnimation, wait, jumpDownAnimation]];
}

しかし、最初SKSceneにこのアクションを実行せずに他のに移動するSKSceneと、同じアクションを設定するとクラッシュします

ここに画像の説明を入力

しかし、最初SKSceneにこのアクションを実行すると、次はすべて問題ありませんSKScene

に問題はありSpriteKitますSKTextureか?

そのように私のアクションを実行します

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    for (UITouch *touch in touches)
    {
        CGPoint location = [touch locationInNode:self];

        SKSpriteNode *ninja = (SKSpriteNode *)[self childNodeWithName:@"ninja"];

        if (location.x > 230 &&
           (location.x < 419 && location.y > 500))
        {
            [ninja runAction:self.jumpAction];
        }
    }
}
4

1 に答える 1

0

あなたの言っていることは 100% 確実ではありませんが、正しく読めば、最初のシーンで SKAction プロパティ jumpAction を設定し、他のシーンのtouchesBegan:メソッドでそのアクションを参照しています (?):

[ninja runAction:self.jumpAction];

self.jumpAction2 番目のシーンに を設定していない場合は、基本的に次のように言っています。[ninja runAction:nil];

個人的には、アクションを実行するノード (この場合はスプライト) のできるだけ近くにアクションを結び付けるのが良い考えだと思います。さまざまなノードで多くのアクションを再利用している場合は、ActionFactory クラスを作成することも別の方法になる可能性があります...

于 2014-02-24T08:32:34.393 に答える