在我的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");
}
}
基本上停止从didMoveToView启动的上一个SKAction,并且当且仅当得分为> = 2时,调用makeWalls的速度更快(每1.4秒)。
在我的gameReset代码中,我有以下内容:
self.removeAllActions()
self.removeAllChildren()
self.view?.presentScene(self)
我期待
当游戏重新开始时,每2.9秒调用makeWalls
,直到得分> = 2,然后每1.4秒调用一次makeWalls。
发生了什么
如果要执行上述操作,则每1.4秒调用 makeWalls
。我这么说是因为墙壁看起来更快了。
我也尝试过但没有工作
我尝试在self.removeActionForKey("makeWalls");
代码中添加didMoveToView
代码中的{{1}}代码。不幸的是,这似乎也不起作用。
类
可以在这里找到: https://paste.ee/p/tGlrY#AtdTJLRBGUcPFXtkVo2XEvsFJkNK1hLR
任何帮助都将受到高度赞赏。
谢谢!
答案 0 :(得分:1)
我认为你最大的问题是场景没有正确地重置。我还没有看到有人做你正在做的事情并重新呈现你的场景(或者直接调用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)
}
}
这应该为新游戏开启新鲜事物。希望这有助于解决您的问题。