2016-12-24 6 views
0

SceneKit Y at-il un moyen d'être averti lorsque dynamicBody est en état de repos? Je veux supprimer dynamicBody quand il a fini de tomber au sol et a cessé de bouger complètement - je suppose que j'en aurai assez de sorte que je voudrais utiliser quelque chose basé sur l'événement plutôt que de boucler tous les bodies et vérifier leurs vitesses ?SceneKit SCNPhysicsBody est averti de repos

Répondre

1

Vous pouvez utiliser l'observation de valeur-clé sur la propriété isResting. Voir Is key-value observation (KVO) available in Swift?. Vous pouvez également utiliser les codes SCNPhysicsContact et SCNPhysicsContactDelegate pour détecter les collisions avec le sol et les utiliser pour déclencher une vérification de la vélocité.

+0

KVO a-t-il des droits de performance significatifs? – ColdSteel

+0

Cela a un coût. Vous pouvez le mesurer pour savoir combien, exactement. Plus en question est que KVO n'est pas très rapide (vous n'avez pas mentionné la langue que vous utilisez). Je ne me souviens pas de la séquence du callback SCNPhysicsContact, du rendu (_: didSimulatePhysicsAtTime :) callback de SCNSceneRenderer et de la mise à jour des vitesses des objets; vous devrez peut-être mettre en file d'attente le noeud pour suppression dans un rappel et le supprimer dans un autre. Utiliser le délégué de contact me semble un meilleur style Swift, bien que je ne puisse pas expliquer précisément pourquoi. –

+0

J'utilise - Objective-C, j'ai demandé sur la performance parce que je suis serré sur le CPU - les animations prennent presque 13ms + flush et des trucs ... Je suis parti moins de 1,2 ms - honnêtement pathétique ... – ColdSteel