Afin de comprendre blender python jeu de scripts, actuellement, j'essaie de construire une scène dans laquelle on peut se promener autour d'une sphère, à l'aide de la FPSController structure à partir de ce lien. Pour la gravité et FPSController orientation, j'ai essayé de construire un python Contrôleur, actuellement, qui ressemble à ceci:
def main():
print("Started")
controller = bge.logic.getCurrentController()
me = controller.owner
distance, loc, glob = me.getVectTo((0,0,0))
grav = controller.actuators['Gravity']
strength = me['Gravity']
force = strength*(distance*distance)*glob
grav.force = force
try:
rot = Vector((0,0,-1)).rotation_difference(glob).to_matrix()
except Exception as E:
print(E)
rot = (0,0,0)
rotZ = me.orientation
me.orientation = rot*rotZ
controller.activate(grav)
main()
qui fonctionne à peu près jusqu'à ce que n'importe quel angle va plus de 180 degrés, et regarde discontinue alors. Je suppose que cela vient de rotation_difference être discontinu blender de la documentation sur les Mathématiques Types Et les services publics ne dit rien, et je n'ai pas assez pensé quaternionic représentations encore pour voir si une carte continue serait possible, et je pense qu'il y a une façon plus élégante de réaliser que le local Z orientation est continuellement à la souris-dépendante, tandis que X et Y orientations dépendent en permanence sur certains vecteur donné, mais comment?