SpriteKit纹理不可见

我正在开发一个游戏,其中有一些animation的angular色,当用户使用游戏控制进行移动,战斗时等等。

有一个正常的状态,即当用户没有触摸任何控件时,玩家的angular色纹理被分配到正常状态或静止状态纹理。

如果用户非常快速地执行这些控制,则当他回到正常状态时,玩家的angular色纹理消失。 如果使用了任何控件,那么animation是可见的。

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

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

//------------------------------------------------------------------------- *// 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]; } //------------------------------------------------------------------------- 

这可能是我忽略了某些东西的原因,但是不要简单地将touchesende的代码完全删除。 因为你所有的动作都是以正常状态结束的,所以你可以删除touchesBegan上的动作,然后让它们在循环中运行,即使用户向上触摸。

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

坏消息是我不知道是什么原因造成的。 我为解决这个问题所做的一直是在运行SKAction之后,不断检查我的SKSprite节点上的纹理是否已经设置为零。 每次我发起一个动作时,做这个检查是很浪费的,但是它已经解决了这个情况,并且没有对我的游戏的性能有明显的影响。

所以,我在做的删节版本(在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。 谢谢。