[英]How to change wait for duration SKAction ran by an SKScene?
在我的 SpriteKit 項目中,我有一個spawnEnemy
方法。 我希望這個方法被一遍又一遍地調用,以便敵人在整個游戲中繼續產生。
我所做的就是將spawnEnemy
方法放在SKAction runBlock
中,並讓我的SKScene
永遠運行該操作,並在調用之間延遲(以防止應用程序過載)。
以下是相關代碼的片段:
var _spawnSpeedSeconds: Double = 2.0
func startSpawning()
{
let waitForXSeconds = SKAction.waitForDuration(self._spawnSpeedSeconds)
let spawn = SKAction.runBlock({ () -> Void in
self.spawnEnemy()
})
self.runAction(SKAction.repeatActionForever(SKAction.sequence([spawn, waitForXSeconds])), withKey: "spawnEnemy")
}
func spawnEnemy()
{
...
}
現在經過一段時間后(例如當玩家獲得 5 分或其他東西時),我會降低 _spawnSpeedSeconds 以使敵人在更短的時間內產生更多以增加難度。
問題是,即使我減少了我的 _spawnSpeedSeconds 變量,SKScene 運行的生成動作的延遲仍然是相同的。
我能想到的解決此問題的唯一方法是刪除該動作,然后以新的延遲/生成率重新添加該動作。 有沒有更好的方法來解決這個問題?
謝謝
在這種情況下,請勿使用動作。 它們實際上並不是以動態方式工作的。 一旦設置好它們,它們就會卡住。 只需使用您的更新方法。
我將向您展示如何定期發射導彈:
首先在課堂上設置兩個計時器
var missleTimer:NSTimeInterval = NSTimeInterval(2)
var missleInterval:NSTimeInterval = NSTimeInterval(2)
現在,在我們的更新方法中,我們倒計時並生成導彈
// subtract time from our timer
self.missleTimer -= self.delta
// when our timer reaches zero
if self.missleTimer <= 0 {
// run your spawning code
self.launchMissle()
// reset timer
self.missleTimer = self.missleInterval
}
這比在這種情況下使用操作要好,因為我可以在代碼中的任何地方設置missleInterval
,並且更改始終會得到反映。
-(void)recursiveMethod
{
if(shouldSpawnEnemy)
{
_spawnSpeedSeconds -= 0.01;
SKAction *wait = [SKAction waitForDuration: 0.5];
SKAction *action = [SKAction performSelector:@selector(recursiveMethod) onTarget:self];
SKAction *sequence = [SKAction sequence:@[wait,action]];
[self repeatActionForever:sequence];
}
}
要開始生成敵人時,請記住調用recursiveMethod。 希望能有所幫助。
提供 swift 解決方案,無需計時器,使用帶有斷路器標志的遞歸:
class YourScene: SKScene {
var gameOver: Bool = false
func spawnEnemies() {
let waitAction = SKAction.wait(forDuration: yourDynamicDurationHere)
self.run(SKAction.sequence([SKAction.run(self.spawnEnemy), waitAction])) {
if !gameOver {
spawnEnemies()
}
}
}
}
該解決方案利用run
方法的完成處理程序遞歸地安排序列的另一個執行。 由於每個單獨的SKSequence
都是在執行之前創建的,因此我們可以為每次迭代傳遞不同的等待時間。
要停止遞歸循環,只需設置gameOver
= true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.