2015-11-20 18 views
6

Nel mio gioco voglio chiamare una funzione ogni pochi secondi che crea oggetti casuali da una matrice. Attualmente mi sto muovendo questi oggetti da SKAction come questo:SpriteKit - Crea oggetti casuali e spostali usando deltatime

func createRandmoObject() { 
    let random = arc4random_uniform(4) 
    randomObject = randomObjects[random] 

    randomObject.runAction(SKAction.moveTo(CGPoint(x: randomObject.position.x, y: 0 - randomObject.size.height), duration: 3)) 

    addChild(randomObject) 

} 

e quando l'oggetto colpisce il lettore viene rimosso, allora la funzione viene chiamata di nuovo. Il problema con questo metodo è che ho trovato che il movimento dell'oggetto non è sempre regolare, quando il framerate si interrompe per qualche motivo, si verifica l'instabilità. Ora so come calcolare il tempo delta nel metodo di aggiornamento, ma non sono sicuro di come applicarlo a un oggetto quando quell'oggetto continua a cambiare e non sempre sullo schermo, e ci sono altri oggetti simili (pensiamo a loro come nemici, e c'è un'altra funzione che crea un altro nemico) Quindi, come posso far muovere quegli oggetti casuali secondo deltatime invece di SKAction?

+0

SpriteKit utilizza una fase temporale variabile per la sua fisica. Sfortunatamente ciò significa che gli oggetti sembreranno "saltare" se il tempo delta è alto. Se non si desidera che ciò accada (vale a dire mantenere il movimento indipendente dalla frequenza dei fotogrammi) è necessario calcolare manualmente la fisica dei nodi, ad esempio incrementando la posizione dei nodi nel metodo di aggiornamento. Dovresti essenzialmente scrivere il tuo motore fisico. –

+0

Posso incrementare manualmente la posizione in "aggiornamento", ma come farlo quando il nodo non è sempre lì, ci vogliono pochi secondi tra gli spawn. – Abdou023

+0

E a volte i nuovi nodi vengono generati quando i precedenti sono ancora lì. – Abdou023

risposta

0

Mentre è possibile utilizzare SKAction nei progetti spritekit, se il gioco si basa sulla fisica, è necessario utilizzare il metodo di aggiornamento per tutti i movimenti dello sprite. Le SK sono ok per i giochi semplici, ma se il tuo gioco prevede collisioni e movimenti casuali, il metodo di aggiornamento è la scelta giusta.