2016-02-12 12 views

risposta

1

Non sono sicuro che la fisica sia possibile in un modo, ma dovresti essere in grado di fare confusione con la maschera bit di collisione di un corpo fisico mentre il gioco è in esecuzione per ottenere un effetto simile.

Così hai la tua porta in uno stato aperto e quando rileva che il giocatore la sta toccando *, cambia la maschera bit in modo che il giocatore possa scontrarsi con essa. Ciò dovrebbe consentire al giocatore di passare attraverso un modo, ma non tornare indietro.

* In realtà, hanno la porta di rilevare quando il giocatore non è più toccare la porta via il corpo di fisica del giocatore, e testare la posizione x o y a seconda se si tratta di una botola, o una porta normale. Se la posizione è abbastanza lontana dalla porta, cambiare la maschera bit di collisione della porta in modo che il giocatore non possa attraversarla.

0

Nel test di contatto di porta e oggetto, è necessario verificare la direzione di marcia dell'oggetto (è possibile utilizzare la velocità per ottenere ciò). Se l'oggetto sta viaggiando nella direzione in cui la porta li bloccherà, abiliterai le porte collisionBitMask sul nodo, altrimenti dovrai rimuoverlo dal collisionBitMask del nodo

0

Il modo più semplice per farlo sarebbe aggiungere due sprite figlio al nodo che rappresenta la parte superiore e inferiore della botola. In questo modo puoi verificare da quale direzione proviene uno sprite in collisione e abilitare/disabilitare le dinamiche sull'altro, se necessario.

0

La soluzione è solo quello di cambiare il collisionBitMask

func platformSolid() { 
    self.physicsBody?.collisionBitMask = kBIT_MASK_PLAYER | kBIT_MASK_WALL | kBIT_MASK_PLATFORM 
} 
func platformThrough() { 
    self.physicsBody?.collisionBitMask = kBIT_MASK_PLAYER | kBIT_MASK_WALL 
} 

sé in questo esempio è il giocatore Collision Bit Mask

Nella delegato:

func didEndContact(contact: SKPhysicsContact) { 
    if contact.bodyB.categoryBitMask == kBIT_MASK_PLATFORM { 
     player.platformSolid() 
    } 
} 

Quindi una volta che il giocatore ha passato (didEndContact) rendi solida la piattaforma (porta).