Я занимаюсь разработкой своей первой игры в быстрой и действительно наслаждающейся процессом обучения. Я, однако, путаю, почему мой главный герой 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;
}
}
}
Я пытался заново найти все виды коды без реального успеха, если кто-нибудь знает решение, которое было бы здорово, рад получить возможность отправлять больше коды, если кто-либо вещи, это может быть полезно.
спасибо.
Вы устанавливаете свойство 'speed'' move' или 'cat' в ноль где-то в вашем коде? Это остановит анимацию. Кроме того, 'canRestart == false' является NOP. – 0x141E
@ 0x141E спасибо за ответ, единственный раз, когда я установил 'moving.speed = 0' после контакта. Если я изменю это, игра не будет приостановлена для повторного запуска. Есть ли что-то, что мне нужно добавить в мой 'resetScene'? –
Вы можете установить 'moving.paused = true', когда будет сделан контакт для приостановки анимации и' move.paused = false' в 'resetScene'. BTW, где вы устанавливаете 'canRestart = true'? – 0x141E