2010-01-05 4 views
0

Je suis un newb dans le module Visual en python, pas vraiment comprendre comment il attribue une valeur à un objet. direModule visuel dans python affecter des objets

from visual import * 
stars=[] 
galaxies=[]  
for i in range(10): 
    stars+=[sphere('pos,radius,color.....')] 
for j in range(20): 
    galaxies+=[sphere('pos,radius,color......')] 
for k in range(30): 
    stars[k].pos=position[k] 
    galaxies[k].pos=G_position[k] 

je ne peux pas comprendre, normalement, quand python lire ce code, la liste sera complètement terminée après la boucle, mais après le module visuel d'importation, ces sphères peuvent apparaître à l'écran et mettre à jour leur positions par chaque itération de la dernière boucle! ...

ou ma question peut également lier à quoi et où le "show()", "imprimer" "démarrer l'animation" déclaration dans le module visuel et comment ça marche? comment puis-je l'utiliser?

un peu comme si j'ajoute un état d'impression avec dans la boucle for ou après la fin.

Merci beaucoup à l'avance

Répondre

1

Les premières choses d'abord. Votre code utilise la concaténation de liste pour ajouter des éléments à la liste. Il est préférable d'utiliser la méthode des listes .append(). En outre, la dernière boucle peut itérer directement sur les objets au lieu d'utiliser un index. C'est plus élégant et facile à comprendre de cette façon.

Le pseudo-code ci-dessous est équivalente à la vôtre, mais avec les corrections ci-dessus appliquée:

from visual import * 
stars = [] 
galaxies = []  
for i in range(10): 
    stars.append(sphere(...)) 
for j in range(20): 
    galaxies.append(sphere(...)) 
for star, galaxy, starpos, galaxypos in zip(stars, galaxies, 
              position, G_position): 
    star.pos = starpos 
    galaxy.pos = galaxypos 

Avec cela à la manière, je peux expliquer comment les œuvres visuelles.

Visual module met à jour l'écran dès que l'objet est modifié. L'animation est faite par cette modification, en temps réel, il n'y a pas besoin d'un show() ou start_animation() - ça se passe comme ça va. Un exemple, vous pouvez exécuter sur la ligne de commande python:

>>> from visual import sphere 
>>> s = sphere() 

Cette ligne crée une sphère, et une fenêtre, et montre la sphère dans la fenêtre déjà !!!

>>> s.x = -100 

Cette ligne modifie la position de la sphère sur x axe -100. Le changement se produit immédiatement sur l'écran. Juste après que cette ligne s'exécute, vous voyez la sphère apparaître à gauche de la fenêtre. L'animation se produit donc en changeant les valeurs des objets. Par exemple:

+0

@nosklo: merci beaucoup pour la réponse, c'est génial! aide beaucoup, mais une question de plus, si c'est le cas, comment puis-je emballer "show" avec dans une fonction? quand j'appelle la fonction, ça se voit. – user211037

+0

Faites simplement * tout * dans la fonction. – nosklo