简体   繁体   English

iOS SpriteKit动画不起作用

[英]iOS SpriteKit animation not working

I am new to the iOS native game development. 我是iOS原生游戏开发的新手。 I am trying to create animation using some frames for Ideal state for the character. 我正在尝试使用某些帧为角色的理想状态创建动画。 I am following tutorial from the Ray's Website . 我正在遵循Ray网站上的教程。 Look like I am doing everything fine but I can't see animation in working. 看起来我一切都很好,但是看不到动画在起作用。 Only first frame (default) is visible all the time. 始终仅可见第一帧(默认)。 I debug the code & it's indeed visiting blinking player method where all 3 frames are also present, but nothing happening on screen. 我调试了代码,它确实是在访问闪烁的播放器方法,其中所有3帧也都存在,但屏幕上没有任何反应。

It will be great if someone can guide/help me identify the issue. 如果有人可以指导/帮助我确定问题,那就太好了。

@implementation GameScene
{
    NSArray *_playerBlinkFrames;
}

// Player
SKNode *_player;

-(id)initWithSize:(CGSize)size {
    if (self = [super initWithSize:size]) {

        [self createPlayer];    
}
    return self;
}

- (void) createPlayer
{
    SKTextureAtlas *playerAnimatedAtlas = [SKTextureAtlas atlasNamed:@"Assets"];
    _player = [SKNode node];
    SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Idle"];
    [_player addChild:sprite];

    [sprite setName:@"Ball"];

    NSMutableArray *blinkFrames = [NSMutableArray array];

    SKTexture *temp = [playerAnimatedAtlas textureNamed:@"Idle.png"];
    SKTexture *temp2 = [playerAnimatedAtlas textureNamed:@"Blink.png"];
    SKTexture *temp3 = [playerAnimatedAtlas textureNamed:@"LookRight.png"];


    [blinkFrames addObject:temp];
    [blinkFrames addObject:temp2];
    [blinkFrames addObject:temp3];

    _playerBlinkFrames = blinkFrames;
    _player.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
    [self addChild:_player];
    [self blinkingPlayer];
}

-(void)blinkingPlayer
{
    [_player runAction:[SKAction repeatActionForever:
                      [SKAction animateWithTextures:_playerBlinkFrames
                                       timePerFrame:0.3f
                                             resize:NO
                                            restore:YES]] withKey:@"blinkingInPlacePlayer"];

    return;
}

Thanks. 谢谢。

Try this: 尝试这个:

// Player
SKSpriteNode *_player;

//..//
SKTextureAtlas *playerAnimatedAtlas = [SKTextureAtlas atlasNamed:@"Assets"];

NSMutableArray *blinkFrames = [NSMutableArray array];

SKTexture *temp = [playerAnimatedAtlas textureNamed:@"Idle.png"];
SKTexture *temp2 = [playerAnimatedAtlas textureNamed:@"Blink.png"];
SKTexture *temp3 = [playerAnimatedAtlas textureNamed:@"LookRight.png"];


[blinkFrames addObject:temp];
[blinkFrames addObject:temp2];
[blinkFrames addObject:temp3];

_playerBlinkFrames = blinkFrames;

SKTexture *tempSprite = _playerBlinkFrames[0];
_player = [SKSpriteNode spriteNodeWithTexture:tempSprite];

I've not tested it, but i think you have create a SKNode player covered by a spritenode. 我没有测试过,但是我认为您已经创建了一个由spritenode覆盖的SKNode播放器。

let me know 让我知道

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM