我一直在快速构建我的第一个游戏并且非常享受学习过程。然而,我很困惑,为什么我的主角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 :(得分:0)
您可以使用密钥创建runAction。
然后在重置功能中删除该键。
像这样开始行动: -
UserControl
停止这样的行动: -
SKAction *spriteAnimation = [SKAction animateWithTextures:Textures timePerFrame:0.04];
repeatWalkAnimation = [SKAction repeatActionForever:spriteAnimation];
[sprite runAction:repeatWalkAnimation withKey:@"animation1"];
希望这有帮助。