Swift iOS - 游戏重置时角色动画静态

时间:2015-08-08 09:26:41

标签: ios swift animation sprite-kit

我一直在快速构建我的第一个游戏并且非常享受学习过程。然而,我很困惑,为什么我的主角cat动画呈现跑步(两个图像),只在第一个游戏播放时动画。

在重置功能之后,当游戏结束时,猫会停留在一张图像上。最终猫没有动画,除非它是应用程序加载后的第一个回合。

以下是我认为有用的所有代码,有人可以帮助我吗?

import SpriteKit

class GameScene: SKScene, SKPhysicsContactDelegate {

    var cat = SKSpriteNode()
    var moving = SKNode()
    var canRestart = false

override func didMoveToView(view: SKView) {

    self.addChild(moving)

    var catTexture1 = SKTexture(imageNamed: "Cat1")
    catTexture1.filteringMode = SKTextureFilteringMode.Nearest
    var catTexture2 = SKTexture(imageNamed: "Cat2")
    catTexture2.filteringMode = SKTextureFilteringMode.Nearest

    var anim = SKAction.animateWithTextures([catTexture1, catTexture2], timePerFrame: 0.2)
    var run = SKAction.repeatActionForever(anim)

    cat = SKSpriteNode(texture: catTexture1)
    cat.position = CGPoint(x: self.frame.size.width / 2.2, y: self.frame.size.height / 7.0 )
    cat.runAction(run)

    moving.addChild(cat)

}


func resetScene() {
    cat.position = CGPoint(x: self.frame.size.width / 2.2, y: self.frame.size.height / 7.0 )
    cat.physicsBody?.velocity = CGVectorMake(0, 0)
    cat.physicsBody?.collisionBitMask = crowCategory | worldCategory;
    cat.speed = 1.0;
    cat.zRotation = 0.0;

    crows.removeAllChildren()
    trees.removeAllChildren()


    canRestart == false

    moving.speed = 1

    score = 0;
    scoreLabelNode.text = "\(score)"

}

override func  touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    /* Called when a touch begins */


    if (moving.speed > 0){
        cat.physicsBody!.velocity = CGVectorMake(0, 0)
        cat.physicsBody!.applyImpulse(CGVectorMake(0, 20))
                } else if (canRestart) {
                    self.resetScene()
    }

    func didBeginContact(contact: SKPhysicsContact) {

    if( moving.speed > 0 ) {

        if((contact.bodyA.categoryBitMask & scoreCategory) == scoreCategory || (contact.bodyB.categoryBitMask & scoreCategory) == scoreCategory){

            score++
            scoreLabelNode.text = "Score \(score)"
        }else {

            moving.speed = 0;
}
}
}

我试图重新找到所有类型的代码并没有取得真正的成功,如果有人知道这个解决方案会很棒,很高兴发布更多代码,如果有任何事情可能会有所帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用密钥创建runAction。

然后在重置功能中删除该键。

像这样开始行动: -

UserControl

停止这样的行动: -

SKAction *spriteAnimation = [SKAction animateWithTextures:Textures timePerFrame:0.04];
repeatWalkAnimation = [SKAction repeatActionForever:spriteAnimation];
[sprite runAction:repeatWalkAnimation withKey:@"animation1"];

希望这有帮助。