2014-07-01 17 views
16

Ho cercato questo e penso che ci deve essere qualche parametro per risolvere questo problema ma non l'ho trovato.SpriteKit Nodi che attaccano ai bordi della scena/Non rimbalzano

Ho una scena in SpriteKit in cui voglio che alcune sfere/palline rimbalzino e mantengano qualsiasi velocità abbiano indefinitamente. Dovrebbero rimbalzare sui bordi della scena.

Questo sta funzionando se si muovono abbastanza velocemente, o colpiscono con un angolo abbastanza acuto, ma se stanno andando più lentamente e si avvicinano al piano del bordo, continuano a muoversi (che è buono) ma loro " Stick "ai bordi. Questo è ciò che non voglio. Dovrebbero rimbalzare anche se vanno molto lentamente.

Per impostare i bordi, ho usato:

SKPhysicsBody *borderBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]; 
self.physicsBody = borderBody; 
self.physicsBody.friction = 0.0; 
self.physicsBody.restitution = 1.0; 
self.physicsBody.linerDamping = 0.0; 
self.physicsBody.angularDamping = 0.0; 
self.physicsBody.affectedByGravity = NO; 

E sui nodi cerchio, ho impostazioni simili, come:

ball.usesPresciseCollisionDetection = YES; 
ball.dynamic = YES; 
ball.restitution = 1.0; 
ball.linearDamping = 0.0; 
ball.angularDamping = 0.0; 
ball.friction = 0.0; 

ho la forza di gravità nella mia scena a zero. Aggiungo un impulso ai nodi e iniziano a rimbalzare - Sembra molto vicino, poiché le cose rimbalzano, ma se ci sono movimenti lenti che si avvicinano a un angolo poco profondo, "abbracciano" i bordi. Proverò a includere un'illustrazione qui sotto per aiutare a visualizzare.

http://i.imgur.com/Rpr7luY.png

Ho provato a giocare con un sacco di impostazioni PhysicsBody, ma non riesco a ottenere le cose per fermare attaccare.

Grazie!

+0

probabile effetto collaterale di imprecisioni di simulazione fisica. Prova con allowRotation off. Se ciò non ti aiuta potresti dover vivere con questo comportamento. – LearnCocos2D

+0

Grazie per il pensiero. Ho provato a impostare allowRotation on e off. Gli oggetti tendono a rimanere attaccati ai bordi anziché rimbalzare quando vanno lentamente. Ho postato un breve video che mostra questo in azione qui: [link] (http://youtu.be/TFNBvsSs6Ak) – Jim

+1

imposta l'attrito a zero attrito impedendogli di rimbalzare sui bordi o è possibile ottenere contact.collisionImpulse sulla funzione didBeginContact e applicare e poca forza o impulso su ogni collisione di bordo – dragoneye

risposta

0

Inizializzatore errato. Esistono 2 tipi di SKPhysicsBody - basato sul volume e basato su bordo. Stai usando il tipo esattamente sbagliato, che non fa movimento dei partecipanti.

Verifichi prego SKPhysicsBody Documentation.

+2

Non credo che questo risolve il problema originale. Ho notato più volte che gli oggetti non rimbalzano se la loro velocità è troppo bassa. – sabiland

+2

Questa risposta è semplicemente sbagliata. – Jurik

3

come i ragazzi menzionati, this answer potrebbe intuitivamente essere visto come un passo nella giusta direzione, ma il problema è con l'intero motore SpriteKit fisica. Non è deterministico e le frazioni si perdono nel calcolo, causando una simulazione imprecisa.

La risposta breve è utilizzare Box2D. La risposta hackish è di applicare un impulso nella direzione opposta.

All details are highlighted in my other answer.

@Jurik contento di aver potuto aiutare :)

+0

C'è un modo per fare Box2D lavora con Spritekit invece di SpriteKit Physics Engine? –

+0

@AlexShuraits non c'è magia, è necessario implementare il proprio ciclo di fisica che sostituisce SpriteKit di – Mazyod

Problemi correlati