2010-10-28 6 views
6

Y a-t-il une meilleure façon de faire cela? J'ai l'impression de faire quelque chose de mal en étant trop répétitif.Y at-il une meilleure façon d'écrire cela?

O = viz.pick(1, viz.WORLD) 

BackSetts = ["set_b1b", "set_b2a", "set_b1a", "set_b2b"] 
LeftSetts = ["set_l1a", "set_l1b", "set_l2a", "set_l1b"] 
NormSetts = ["set_nr_a", "set_nr_b"] 
Maps = ["MapA","MapB"] 

if O.name in BackSetts: 
    for i in set(BackSetts)|set(Maps): 
     WORLD[i].alpha(abs(WORLD[i].getAlpha()-1)) 

elif O.name in LeftSetts: 
    for i in set(LeftSetts)|set(Maps): 
     WORLD[i].alpha(abs(WORLD[i].getAlpha()-1)) 

elif O.name in NormSetts: 
    for i in NormSetts: 
     WORLD[i].alpha(abs(WORLD[i].getAlpha()-1)) 
+2

Qu'essayez-vous de faire? – katrielalex

+0

Ce morceau de code indique à mon moteur 3D (similaire à panda3d) de vérifier quelles "maps" sont visibles (alpha) sous forme de textures sur mes polygones quand un objet-switch est cliqué par une souris (viz.pick); il inverse l'état de transparence de la texture appliquée. – relima

Répondre

3

La transformation est trivial:

O = viz.pick(1, viz.WORLD) 

BackSetts = ["set_b1b", "set_b2a", "set_b1a", "set_b2b"] 
LeftSetts = ["set_l1a", "set_l1b", "set_l2a", "set_l1b"] 
NormSetts = ["set_nr_a", "set_nr_b"] 
Maps = ["MapA","MapB"] 
anyset = [] 

if O.name in BackSetts: 
    anyset = set(BackSetts)|set(Maps) 

elif O.name in LeftSetts: 
    anyset = set(LeftSetts)|set(Maps) 

elif O.name in NormSetts: 
    anyset = NormSetts 

for i in anyset: 
    WORLD[i].alpha(abs(WORLD[i].getAlpha()-1)) 

Cela prend soin de telle sorte que NormSetts n'est pas union'd avec des cartes, comme dans votre code d'origine.

Questions connexes