繁体   English   中英

SKAction 未重新启动

[英]SKAction not restarting

在我的didMoveToView ,我有以下代码:

let spawnWall = SKAction.runBlock({[unowned self] in self.makeWalls();});
let sequence = SKAction.sequence([SKAction.waitForDuration(2.9),spawnWall])
let repeatForever = SKAction.repeatActionForever(sequence);
self.runAction(repeatForever, withKey:"makeWalls");

它基本上每 2.9 秒调用一次makeWalls函数。

现在只要有触摸, touchesBegan函数就会调用一个名为changeSpeed的函数,它会执行以下操作:

func changeSpeed()
{
    if score >= 2

    {
        self.removeActionForKey("makeWalls");
        makeWallsDividerT = 300;
        let spawnWall = SKAction.runBlock({[unowned self] in self.makeWalls();});
        let sequence = SKAction.sequence([SKAction.waitForDuration(1.4),spawnWall])
        let repeatForever = SKAction.repeatActionForever(sequence);
        self.runAction(repeatForever, withKey:"makeWalls");
    }
}

当且仅当分数 >=2 时,基本上停止从 didMoveToView 启动的先前 SKAction 并更快地调用 makeWalls(每 1.4 秒)。

在我的 gameReset 代码中,我有以下内容:

self.removeAllActions()
self.removeAllChildren()
self.view?.presentScene(self)

我期待

当游戏重新开始时,每 2.9 秒调用一次makeWalls ,直到得分 >=2,然后每 1.4 秒调用一次 makeWalls。

怎么了

makeWalls在执行上述操作时每 1.4 秒被调用一次。 我这么说是因为墙壁似乎来得更快。

我也尝试过但没有用

我尝试放入self.removeActionForKey("makeWalls"); 在我粘贴在第一个代码块中的didMoveToView代码中。 不幸的是,这似乎也不起作用。

班级

可以在这里找到: https : //paste.ee/p/tGlrY#AtdTJLRBGUcPFXtkVo2XEvsFJkNK1hLR

任何帮助将不胜感激。

谢谢!!

我认为你最大的问题是场景没有正确重置。 我还没有看到有人做你正在做的事情并重新呈现你的场景(或直接调用 didMoveToView,我认为它永远不会被直接调用)而不是重新启动一个新场景。 我会尝试以下...

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

    if freezeMainChar == 0
    {
        changeSpeed()
        let touch = touches.first
        let touchLocation = touch?.locationInNode(self)

        if touchLocation!.x == 450
        {
            //do something
        }
    }

    else
    {
        score = 0
        scoreLabel.text = "0"

        movingObjects.removeAllChildren()
        movingObjects.removeAllActions()
        gameOverLabelHolder.removeAllChildren()

        freezeMainChar = 0
        movingObjects.speed = 1

        self.removeAllActions()
        self.removeAllChildren()

        //didMoveToView(view!)
        let newScene = GameScene(size: size)
        newScene.scaleMode = scene.scaleMode
        view.presentScene(newScene)
    }

}

这应该为新游戏开始一切新鲜事。 希望这有助于解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM