الموقتات المجدولة في SpriteKit

1

لقد قمت بجدولة المؤقتات التي تضيف عقد الرموز المتحركة إلى الشاشة كعقبات

func timers(){
    personTimer = Timer.scheduledTimer(timeInterval: 1, target: self,     selector: #selector(spawnPerson), userInfo: nil, repeats: true)

    bikeTimer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(spawnBike), userInfo: nil, repeats: true)

    motorcycleTimer = Timer.scheduledTimer(timeInterval: 2.5, target: self, selector: #selector(spawnMotorcycle), userInfo: nil, repeats: true)
}

أضفت وظيفة لإبطال تلك الموقتات. بحيث يمكن تشغيل "مستوى" المكافأة.

func invalidateTimers(){
    // Obstacles
    personTimer.invalidate()
    bikeTimer.invalidate()
    motorcycleTimer.invalidate()
}

عندما يتم استدعاء المكافأة

func bonus() {
    invalidateTimers()
    bonusTimer = Timer.scheduledTimer(timeInterval: 1, target: self,     selector: #selector(spawnDiamonds), userInfo: nil, repeats: true)
}

المشكلة التي أواجهها هي أنه عندما يتم تشغيل المكافأة ، فإنني أبطل المؤقت المؤقت ومؤقت الاستدعاء (). ولكن عندما أقوم بكل الموقتات في الوظيفة يبدو أنه يتم إطلاقها مرتين. ما الحل السهل لذلك لأنه لا يمكن إيقافها مؤقتًا.

2 الاجابة

3
افضل جواب

بدلاً من استخدام المؤقتات ، فكر في استخدام SKActions ، لأنها تعمل بشكل جيد مع SpriteKit. لبدء المؤقت ، قم بتشغيل:

let wait1 = SKAction.wait(forDuration: 1)
let personTimer = SKAction.repeatForever(SKAction.sequence([wait1, SKAction.run {
        spawnPerson() // spawnBike() etc. for each different timer
    }]))
self.run(personTimer, withKey: "spawnPerson")

مع قيم الانتظار المعدلة واستدعاءات الوظائف لكل مؤقت مختلف. ثم لإيقاف المؤقت ، قم بتشغيل:

self.removeAction(forKey: "spawnPerson")

لكل إجراء باستخدام مفتاح مختلف.

:مؤلف
0

بدلاً من استخدام المؤقتات ، يمكنك استخدامها update: طريقة الخاص بك SKScene فئة فرعية. يستدعي مرة واحدة لكل إطار ولديه currentTime معامل. لذلك يمكنك بسهولة حساب الفترات الزمنية التي تحتاجها وتشغيل الطرق المقابلة.

:مؤلف
فوق
قائمة طعام