SpriteKit纹理不可见

时间:2014-03-06 08:20:00

标签: ios animation textures sprite-kit

我正在开发一款游戏,其中包含许多动画角色,当用户使用游戏控制进行移动,战斗等时,这些动画会播放。

存在正常状态,即当用户未触摸任何控件时,已将玩家角色的纹理指定为正常状态或静止状态纹理。

如果用户非常快速地练习这些控制,那么当他回到正常状态时,玩家角色的纹理就会消失。但是,如果使用了任何控件,则动画可见。

任何人都可以帮我解决这个问题吗?任何帮助将不胜感激。

我已经展示了我在下面使用的一些基本编程结构。

//------------------------------------------------------------------------- 

*// The 'Normal or Resting' state texture.*

SKAction *normalStateAction = [SKAction setTexture:normalStateTexture];


*// To Play any Character Animation like Walk, Fight, Jump, etc.*

[playerCharacter.sprite runAction:[SKAction sequence:@[charAnimAction,normalStateAction]]];


*// In the 'TouchesEnded' method for any Game Control.*

-(void)TouchesEnded {

    // Remove previous actions.
    [playerCharacter.sprite removeAllActions];

    // Run Normal State action.
    [playerCharacter.sprite runAction:normalStateAction];
}

//------------------------------------------------------------------------- 

2 个答案:

答案 0 :(得分:0)

可能是我忽略了某些东西,但是你不是简单地完全取消触摸式代码。由于所有操作都以正常状态结束,因此您可以删除touchesBegan上的操作,然后让它们在用户向上触摸时运行它们的循环。

答案 1 :(得分:0)

我相信我有类似的,如果不是同一个问题。我在触摸时触发各种动画(特定动画取决于游戏中正在发生的任何动画)。当触摸很快并且动画快速射击时,SKSpriteNode的基本纹理似乎消失了。

坏消息是我不知道是什么原因造成的。我解决这个问题的方法是在运行SKAction后不断检查我的SKSprite节点上的纹理是否已经设置为nil。每次触发动作时进行此检查都会感到浪费,但它已经解决了这种情况,并且对我的游戏性能没有产生明显的影响。

所以,我正在做的一个删节版本(在Swift中)看起来像这样:

func doAnimation(  ) {

    _character.runAction(someSKAction, withKey: "animation")

    //Whoops!, we lost our base texture again!
    if _character.texture == nil {
        let atlas = SKTextureAtlas(named: "someAtlasName")
        let texture = atlas.textureNamed("idleFrame" )
        _character.texture = texture
    }
}

这似乎是某种SpriteKit错误,因为我觉得我没有做任何异国情调。在它被隔离和复制之前,很难明确地提出这种说法。

我很想知道你是否解决了这个问题(而不是被黑客攻击)。如果你这样做,请分享,因为这个工作有点太hacky。感谢。