
Como pasar variables de un archivo python a otro
Publicado por Hiroshi (6 intervenciones) el 15/01/2016 00:24:32
Hola que tal, bueno ante nada si hay alguien por aquí blendereño para responderme con esa generosidad que tienen se lo agradeceré y dios lo bendiga.
Bueno antes que nada aclaro que no soy ningún experto en programación python.
El problema que tengo es el siguiente:
Estoy dando clases de desarrollo de videojuegos RTS en blender, ya lo llevo muy bien. Me he encontrado con el siguiente obstáculo:
¿Como puedo pasar el valor de una variable objeto de un módulo a otro?
Estoy usando Windows 7 64bit| Blender 2.76b |
Mis módulos son los siguientes -> squadron.py | grid.py
El squadron.py es el siguiente:
Por otro lado el módulo grid.py es el siguiente:
Bueno chicos o chicas blendereñas, ustedes saben más que yo. ¿Como hago para pasar la variable self.grid01, self.grid02, self.grid03 y self.grid04 del módulo: grid.py al otro módulo de: squadron.py para usarlo dentro? :) saludos y espero respuestas gente.
Bueno antes que nada aclaro que no soy ningún experto en programación python.
El problema que tengo es el siguiente:
Estoy dando clases de desarrollo de videojuegos RTS en blender, ya lo llevo muy bien. Me he encontrado con el siguiente obstáculo:
¿Como puedo pasar el valor de una variable objeto de un módulo a otro?
Estoy usando Windows 7 64bit| Blender 2.76b |
Mis módulos son los siguientes -> squadron.py | grid.py
El squadron.py es el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
from bge import logic
from math import *
import grid
######################################################
#
# Demo Script by: Diego Hiroshi | VindictuS HD@2016
#
######################################################
# Este script es un sistema de generación de Guerreros
# Los guerreros se crean en un limite de 6 a 8 unidades
# a lo largo de una matriz de 8x2 | Objeto: Estandarte
# Los NPC pasan a ser fieles seguidores a su Capitán
# durante toda la partida o se los abandone/elmine
# Juegos Moba y RTS | DEV | Aplicado en Ingenieria
######################################################
######################################################
# No divulgues este script sin el consentimiento de
# preservar derechos de firma e información del Author
# Assets DEV-MOBA|RTS Update v0.6 Beta
######################################################
escena = logic.getCurrentScene()
class Banner:
def __init__(self, controlador):
self.own = controlador.owner
self.target = escena.objects["Squadron"]
self.C02 = escena.objects["C02"]
def getPosition_Hero (self):
targetX = self.target.worldPosition[0]
targetY = self.target.worldPosition[1]
C02X = self.C02.worldPosition[0]
C02Y = self.C02.worldPosition[1]
self.own["targetX"] = targetX
self.own["targetY"] = targetY
self.own["C02X"] = C02X
self.own["C02Y"] = C02Y
return self.own["C02X"], self.own["C02Y"]
def main(self):
# Obtiene el valor X,Y Hero Position y se lo aplica al Estandarte "Squadron"
self.target.worldPosition.x, self.target.worldPosition.y = self.getPosition_Hero()
alliedBannerRuntime = Banner(logic.getCurrentController())
class Warriors:
# La matriz 4x2 añade 4 objetos de frente (f) y 2 de soporte (s) secuencialmente
def __init__ (self,controlador):
self.own = controlador.owner
self.banner = escena.objects["Squadron"]
self.hero = escena.objects["C02"] # |Obtiene el objecto actual en escena|
self.warriors = [[],[]]
self.increment = 4
self.RADAR = 5 # |Campo de detección de lejanía| Master Key
def getList_Unit(self):
self.unit = escena.objectsInactive["Unit"]
return self.unit
def getDistance_Hero(self):
self.heroPosition_x = self.hero.worldPosition[0]
self.heroPosition_y = self.hero.worldPosition[1]
return int(self.heroPosition_x),int(self.heroPosition_y)
def getCalculate_Distance(self):
self.w01Position_x = self.s04.worldPosition[0]
self.w01Position_y = self.s04.worldPosition[1]
self.w02Position_x = self.s03.worldPosition[0]
self.w02Position_y = self.s03.worldPosition[1]
self.w03Position_x = self.s02.worldPosition[0]
self.w03Position_y = self.s02.worldPosition[1]
self.w04Position_x = self.s01.worldPosition[0]
self.w04Position_y = self.s01.worldPosition[1]
return int(self.w01Position_x),int(self.w01Position_y),int(self.w02Position_x),int(self.w02Position_y),int(self.w03Position_x),int(self.w03Position_y),int(self.w04Position_x),int(self.w04Position_y)
def getRadar_System(self):
x1,y1 = self.getDistance_Hero()
w01x,w01y,w02x,w02y,w03x,w03y,w04x,w04y = self.getCalculate_Distance()
#d = sqrt((x2-x1)**2 + (y2-y1)**2)
d01 = sqrt((w01x-x1)**2 + (w01y-y1)**2)
d02 = sqrt((w02x-x1)**2 + (w02y-y1)**2)
d03 = sqrt((w03x-x1)**2 + (w03y-y1)**2)
d04 = sqrt((w04x-x1)**2 + (w04y-y1)**2)
return d01,d02,d03,d04
def main(self):
if self.own["cont"] < 1:
self.s04 = escena.addObject(self.getList_Unit(),self.banner,0)
self.s03 = escena.addObject(self.getList_Unit(),self.banner,0)
self.s02 = escena.addObject(self.getList_Unit(),self.banner,0)
self.s01 = escena.addObject(self.getList_Unit(),self.banner,0)
self.own["cont"] +=1
hx,hy = self.getDistance_Hero()
w01x,w01y,w02x,w02y,w03x,w03y,w04x,w04y = self.getCalculate_Distance()
d01,d02,d03,d04 = self.getRadar_System()
# DEBUG PROPERTYS DISTANCE RADAR|HERO|UNIT
#self.own["hx"] = hx
#self.own["ux"] = ux
#self.own["hy"] = hy
#self.own["uy"] = uy
#print (d)
# Radar coontrolará que si tanto la posición X e Y de ambos son iguales pero superan el límite establecido, no se aplicará la orden: Detenerse
try:
grid = escena.objects["Grid"]
if d01 <= self.RADAR and not int(self.s04.worldPosition[0]) == int(grid.worldPosition[0]) or int(self.s04.worldPosition[1]) == int(grid.worldPosition[1]):
self.s04.applyMovement([0.0, -0.04, 0.0], True)
if d02 <= self.RADAR and not int(self.s03.worldPosition[0]) == int(grid.worldPosition[0]) or int(self.s03.worldPosition[1]) == int(grid.worldPosition[1]):
self.s03.applyMovement([0.0, 0.04, 0.0], True)
if d03 <= self.RADAR and not int(self.s02.worldPosition[0]) == int(grid.worldPosition[0]) or int(self.s02.worldPosition[1]) == int(grid.worldPosition[1]):
self.s02.applyMovement([0.0, -0.04, 0.0], True)
if d04 <= self.RADAR and not int(self.s01.worldPosition[0]) == int(grid.worldPosition[0]) or int(self.s01.worldPosition[1]) == int(grid.worldPosition[1]):
self.s01.applyMovement([0.0, 0.04, 0.0], True)
# Radar siempre va a querer que ambos no superen su límite establecido es por eso que Radar genera una segunda clausula indicando que la distancia entre ambos no superen su perímetro de control.
if d01 > self.RADAR:
self.s04.applyMovement([0.07, 0.0, 0.0], True)
if d02 > self.RADAR:
self.s03.applyMovement([0.07, 0.0, 0.0], True)
if d03 > self.RADAR:
self.s02.applyMovement([0.07, 0.0, 0.0], True)
if d04 > self.RADAR:
self.s01.applyMovement([0.07, 0.0, 0.0], True)
except:
controlador = logic.getCurrentController()
#quit = controlador.actuators["Game"]
#print ("Error Inesperado: RADAR", self.RADAR)
#controlador.activate(quit)
warriorsRuntime = Warriors(logic.getCurrentController())
# --------------------------------------------------------------------
# End Class
######################################################
# Executer Program Runtime
######################################################
def main():
alliedBannerRuntime.main()
warriorsRuntime.main()
# --------------------------------------------------------------------
# End Executer
######################################################
# Acciones del Objeto padre: Unit
# Unit se encarga de generar unidades militares, magos
# arqueros y jinetes en base a una Matriz de 4x2
# Si la clase Banner existe generará un tipo de estandarte
# Si el estandarte no carga durante el Runtime
# los guerreros e instacia (Atributos) no se generarán
######################################################
def inteligentCollisionSytem():
controlador = logic.getCurrentController()
escena = logic.getCurrentScene()
own = controlador.owner
trackTo = controlador.actuators["trackTo"]
colision = controlador.sensors["Collision"]
SCI = controlador.sensors["SCI"]
if SCI.positive:
controlador.deactivate(trackTo)
else:
controlador.activate(trackTo)
# --------------------------------------------------------------------
# End Script: squadron
#
# Author(s): DEV-Hiroshi <hiroshidaigh@gmail.com>
Por otro lado el módulo grid.py es el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from bge import logic
import squadron
escena = logic.getCurrentScene()
class systemFormation:
def __init__(self,controlador):
self.own = controlador.owner
self.squadron = escena.objects["Squadron"]
self.grid = escena.objectsInactive["Grid"]
self.banner = escena.objects["Squadron"]
self.c = escena.objects["C02"]
self.distance = 3 # Distancia de formación
self.rotation = [[1.0, 0.0, 0.0], [ 0.0, 1.0, 0.0], [0.0, 0.0, 1.0]] # Orientación de baldosas
def getPosition_Owner(self):
s_position_x = self.squadron.worldPosition[0]
s_position_y = self.squadron.worldPosition[1]
return s_position_x, s_position_y
def createGrid(self):
if self.own["grid_count"] < 1:
self.grid01 = escena.addObject(self.grid,self.banner,0)
self.grid02 = escena.addObject(self.grid,self.banner,0)
self.grid03 = escena.addObject(self.grid,self.banner,0)
self.grid04 = escena.addObject(self.grid,self.banner,0)
s_position_x, s_position_y = self.getPosition_Owner()
self.grid01.worldPosition.x,self.grid01.worldPosition.y,self.grid01.worldPosition.z= s_position_x+self.distance, s_position_y+self.distance,0.1
self.grid01.worldOrientation = self.rotation
self.grid02.worldPosition.x,self.grid02.worldPosition.y,self.grid02.worldPosition.z= s_position_x+self.distance-2, s_position_y+self.distance,0.1
self.grid02.worldOrientation = self.rotation
self.grid03.worldPosition.x,self.grid03.worldPosition.y,self.grid03.worldPosition.z= s_position_x+self.distance-4, s_position_y+self.distance,0.1
self.grid03.worldOrientation = self.rotation
self.grid04.worldPosition.x,self.grid04.worldPosition.y,self.grid04.worldPosition.z= s_position_x+self.distance-6, s_position_y+self.distance,0.1
self.grid04.worldOrientation = self.rotation
self.own["grid_count"] += 1
self.grid01.setParent(self.c, 1, 1)
self.grid02.setParent(self.c, 1, 1)
self.grid03.setParent(self.c, 1, 1)
self.grid04.setParent(self.c, 1, 1)
def functionTiles(self):
tile01,tile02,tile03,tile04 = self.grid01,self.grid02,self.grid03,self.grid04
print (tile01)
def main(self):
self.createGrid()
self.functionTiles()
systemFormation_Runtime = systemFormation(logic.getCurrentController())
def main ():
systemFormation_Runtime.main()
Bueno chicos o chicas blendereñas, ustedes saben más que yo. ¿Como hago para pasar la variable self.grid01, self.grid02, self.grid03 y self.grid04 del módulo: grid.py al otro módulo de: squadron.py para usarlo dentro? :) saludos y espero respuestas gente.
Valora esta pregunta


0