2015-08-08 2 views
0

Я занимаюсь разработкой своей первой игры в быстрой и действительно наслаждающейся процессом обучения. Я, однако, путаю, почему мой главный герой cat, который анимирован, чтобы дать бегущий вид (два изображения), только анимируется, когда играется первая игра.Swift iOS - анимация персонажа при перезагрузке игры

После сброса func 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; 
} 
} 
} 

Я пытался заново найти все виды коды без реального успеха, если кто-нибудь знает решение, которое было бы здорово, рад получить возможность отправлять больше коды, если кто-либо вещи, это может быть полезно.

спасибо.

+0

Вы устанавливаете свойство 'speed'' move' или 'cat' в ноль где-то в вашем коде? Это остановит анимацию. Кроме того, 'canRestart == false' является NOP. – 0x141E

+0

@ 0x141E спасибо за ответ, единственный раз, когда я установил 'moving.speed = 0' после контакта. Если я изменю это, игра не будет приостановлена ​​для повторного запуска. Есть ли что-то, что мне нужно добавить в мой 'resetScene'? –

+1

Вы можете установить 'moving.paused = true', когда будет сделан контакт для приостановки анимации и' move.paused = false' в 'resetScene'. BTW, где вы устанавливаете 'canRestart = true'? – 0x141E

ответ

0

Вы можете создать runAction с ключом.

И затем удалите эту клавишу в функции сброса, подобной этому.

Начало действия, как это: -

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

Stop действие, как это: -

[sprite removeActionForKey:@"animation1"]; 

Надеется, что это помогает.

Смежные вопросы