我一直試圖做一個永遠運行的SKAction,我可以停下來,只要我想。我已經做了這樣的:斯威夫特3(SpriteKit):停止永久循環SKAction有一個延遲
override func didMove(to view: SKView) {
run(SKAction.repeatForever (
SKAction.sequence ([
SKAction.run(drawFrame),
SKAction.wait(forDuration: 0.01),
])), withKey: "frameDrawing"
)
}
然後在並條機功能,我停止SKAction這樣的:
func drawFrame() {
//(code)
if stop {
removeAction(forKey: "frameDrawing")
}
}
出於某種原因,SKAction後才時,它已經運行3或4次以上停止停止成爲現實。當停止設置爲真時,我希望它立即停止,而不是3或4次以上的重複。
如果有人知道如何解決這個問題,請告訴我,因爲我已經嘗試了很多事情,並且他們從未解決過這個問題。謝謝!
編輯:這是我的代碼:
var drawingFrame = SKAction()
class GameScene: SKScene, SKPhysicsContactDelegate {
override func didMove(to view: SKView) {
drawingFrame = SKAction.repeatForever (
SKAction.sequence ([
SKAction.run(drawFrame),
SKAction.wait(forDuration: 0.03),
]))
run(drawingFrame)
}
func drawFrame() {
//(code)
if stop {
drawingFrame.speed = 0.0
}
}
如果你想知道爲什麼我設置了SKAction drawingFrame在開始一個空SKAction,那是因爲我需要確定這兩個函數之前SKAction 。否則,它不會被定義爲兩個函數。
編輯任何人都有同樣的問題:我已經用我自己的想法和@appzYourLife的解決方案解決了這個問題。每次工作的最有效的方法是僅在stop等於false時才運行代碼。但是,確保停止該程序的if語句不在該括號內,以便SKAction最終停止。這是工作代碼:
var drawingFrame = SKAction()
class GameScene: SKScene, SKPhysicsContactDelegate {
override func didMove(to view: SKView) {
drawingFrame = SKAction.repeatForever (
SKAction.sequence ([
SKAction.run(drawFrame),
SKAction.wait(forDuration: 0.03),
]))
run(drawingFrame)
}
func drawFrame() {
if stop = false {
//(code)
}
if stop {
removeAllActions()
}
}
如果您喜歡,可以對stop = false語句使用if else語句。
是的,我這樣做的頂級宣言相同的「伎倆」,所以我可以訪問它。我不知道這是否是最好的方式,但它是有效的。 – Confused
我讀這個的方式(這不是一個可信的閱讀),這應該工作。行動應該停止。 – Confused
是的,這也是我的想法。這有點奇怪。無論如何感謝提示。 –