我是Swift的新手,但是在类和继承方面遇到了麻烦。我有一个名为Bunny的类,其中包含一些代码,包括SKAction。当我将在Bunny中找到的代码放入我的GameScene类中时,它可以正常工作,但是,当我尝试运行它时,尽管它在Bunny类中,但在我的GameScene类中却无法正常工作。

这是兔子 class :

import SpriteKit

class Bunny : SKSpriteNode {
    var bunny = SKSpriteNode()
    var moveAndRemove = SKAction()
    var textureAtlas = SKTextureAtlas()
    var textureArray = [SKTexture]()

    func spawnBunnies() {
        let spawn = SKAction.runBlock({
            () in
                self.spawnBunny()
                print("CALLEDBunniesSpawned") // THIS PART IS NOT GETTING CALLED
            })
        let delay = SKAction.waitForDuration(3)
        let spawnDelay = SKAction.sequence([spawn, delay])
        let spawnDelayForever = SKAction.repeatActionForever(spawnDelay)
        self.runAction(spawnDelayForever)
        let distance = CGFloat(self.frame.width + bunny.frame.width)
        let movePipes = SKAction.moveByX(-distance - 200, y: 0, duration: NSTimeInterval(0.009 * distance)) // Speed up pipes
        let removePipes = SKAction.removeFromParent()
        moveAndRemove = SKAction.sequence([movePipes, removePipes])
        print("BunniesSpawned") // THIS PART HERE RUNS
    }

    func spawnBunny() { // I NEED TO TRIGGER THIS PART VIA THE SPAWN = SKAction.runBlock
        print("BunniesSpawned2")
        let randomYGen = CGFloat(arc4random_uniform(UInt32(self.frame.height - 80)))
        textureAtlas = SKTextureAtlas(named: "Bunnies")
        for i in 1...textureAtlas.textureNames.count {
            var name = "Bunny\(i).png"
            textureArray.append(SKTexture(imageNamed: name))
        }
        bunny = SKSpriteNode(imageNamed: textureAtlas.textureNames[5] as! String)
        bunny.position = CGPoint(x: self.frame.width + bunny.frame.width / 2, y: randomYGen)
        bunny.setScale(0.5)
        bunny.runAction(moveAndRemove)
        self.addChild(bunny)
        bunny.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(textureArray, timePerFrame: 0.1)))
    }
}

这是我的GameScene类,尝试从Bunny调用该函数:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
   /* Called when a touch begins */
    if gameStarted == false {
        gameStarted = true

        var bun = Bunny()
        bun.spawnBunnies()

    } else {

    }

最佳答案

除非我缺少任何东西,否则您不会将Bunny子类添加到场景中。

尝试这个

 var bun = Bunny()
 addChild(bun)
 bun.spawnBunnies()

关于ios - 无法在子类中运行SKAction.runBlock,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36049649/

10-10 21:04