提交 16d07895 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 66927fa6
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
# link :https://gitcode.net/pythoncr/ # link :https://gitcode.net/pythoncr/
# python_version :3.9 # python_version :3.9
# ============================================================================== # ==============================================================================
import sys
import time import time
from bodies import Sun, Mercury, Venus, Earth, Mars, Moon, Ceres, Jupiter, Saturn, Uranus, Neptune, Pluto, Asteroids from bodies import Sun, Mercury, Venus, Earth, Mars, Moon, Ceres, Jupiter, Saturn, Uranus, Neptune, Pluto, Asteroids
...@@ -31,7 +32,7 @@ class TheLostPlanetSim(UniverseSimScenes): ...@@ -31,7 +32,7 @@ class TheLostPlanetSim(UniverseSimScenes):
# inner_radius:内圆半径 outer_radius:外圆半径,subdivisions:细分数,控制圆环的细节和精度 # inner_radius:内圆半径 outer_radius:外圆半径,subdivisions:细分数,控制圆环的细节和精度
# self.asteroids.torus_zone = 4.7, 5.5, 64 # self.asteroids.torus_zone = 4.7, 5.5, 64
self.moon = Moon(size_scale=3.5e3, init_position=[0, 0, (0.5 + 2.5) * AU], distance_scale=1.76) self.moon = Moon(size_scale=3.5e3, init_position=[0, 0, (0.5 + 2.45) * AU], distance_scale=1.76)
# ceres = Ceres(size_scale=3e3, distance_scale=1.7) # ceres = Ceres(size_scale=3e3, distance_scale=1.7)
self.mercury = Mercury(size_scale=3e3, distance_scale=8.5) self.mercury = Mercury(size_scale=3e3, distance_scale=8.5)
self.venus = Venus(size_scale=3e3, distance_scale=5) self.venus = Venus(size_scale=3e3, distance_scale=5)
...@@ -40,7 +41,7 @@ class TheLostPlanetSim(UniverseSimScenes): ...@@ -40,7 +41,7 @@ class TheLostPlanetSim(UniverseSimScenes):
self.jupiter = Jupiter(size_scale=0.68e3, distance_scale=1.12) self.jupiter = Jupiter(size_scale=0.68e3, distance_scale=1.12)
self.saturn = Saturn(size_scale=0.68e3, distance_scale=0.74) self.saturn = Saturn(size_scale=0.68e3, distance_scale=0.74)
self.uranus = Uranus(size_scale=0.8e3, distance_scale=0.43) self.uranus = Uranus(size_scale=0.8e3, distance_scale=0.43)
self.neptune = Neptune(size_scale=1e3, distance_scale=0.3) self.neptune = Neptune(size_scale=1e3, distance_scale=0.29)
# self.ship = ScifiGunship(name="飞船", mass=1e30, color=(111, 140, 255), # self.ship = ScifiGunship(name="飞船", mass=1e30, color=(111, 140, 255),
# init_position=self.mars.init_position, # init_position=self.mars.init_position,
# init_velocity=[0, 0, 0], # init_velocity=[0, 0, 0],
...@@ -153,9 +154,9 @@ class TheLostPlanetSim(UniverseSimScenes): ...@@ -153,9 +154,9 @@ class TheLostPlanetSim(UniverseSimScenes):
planet = body planet = body
planet.alpha = begin_alpha planet.alpha = begin_alpha
if begin_alpha > end_alpha: if begin_alpha > end_alpha:
interval = -abs(interval) interval = -abs(interval) / self.record_rate
else: else:
interval = abs(interval) interval = abs(interval) / self.record_rate
origin_update = planet.update origin_update = planet.update
...@@ -189,7 +190,7 @@ class TheLostPlanetSim(UniverseSimScenes): ...@@ -189,7 +190,7 @@ class TheLostPlanetSim(UniverseSimScenes):
asteroid.s_angle = init_angle asteroid.s_angle = init_angle
asteroid.init_pos = pos asteroid.init_pos = pos
y = 10 * random.random() - 5 y = 10 * random.random() - 5
speed = random.random() / 7 + 0.2 speed = (random.random() / 7 + 0.2) / self.record_rate
def rotation(): def rotation():
angle = math.pi * asteroid.s_angle / 180 angle = math.pi * asteroid.s_angle / 180
...@@ -221,7 +222,9 @@ class TheLostPlanetSim(UniverseSimScenes): ...@@ -221,7 +222,9 @@ class TheLostPlanetSim(UniverseSimScenes):
# a.enabled = False # a.enabled = False
def one_asteroid_fade_in(self): def one_asteroid_fade_in(self):
self.asteroids.append(self.create_asteroid(init_angle=180)) asteroid = self.create_asteroid(init_angle=180)
asteroid.alpha_fade_in = True
self.asteroids.append(asteroid)
# if not hasattr(self, "one_asteroid_fade_in_index"): # if not hasattr(self, "one_asteroid_fade_in_index"):
# self.one_asteroid_fade_in_index = 0 # self.one_asteroid_fade_in_index = 0
# self.one_asteroid_fade_in_last_time = time.time() # self.one_asteroid_fade_in_last_time = time.time()
...@@ -234,22 +237,25 @@ class TheLostPlanetSim(UniverseSimScenes): ...@@ -234,22 +237,25 @@ class TheLostPlanetSim(UniverseSimScenes):
# if self.one_asteroid_fade_in_index >= 4: # if self.one_asteroid_fade_in_index >= 4:
# self.step_index += 1 # self.step_index += 1
def asteroid_fade_in(self): def asteroids_fade_in(self):
""" """
小行星群渐渐显示 小行星群渐渐显示
@return: @return:
""" """
self.create_asteroids() self.create_asteroids()
for a in self.asteroids: for a in self.asteroids:
self.set_alpha_animation(a, 0.0, 1.0, 0.01) if hasattr(a, "alpha_fade_in"):
print("alpha_fade_in")
else:
self.set_alpha_animation(a, 0.0, 1.0, 0.01)
def asteroid_fade_out(self): def asteroids_fade_out(self):
""" """
小行星群渐渐消失 小行星群渐渐消失
@return: @return:
""" """
for a in self.asteroids: for a in self.asteroids:
self.set_alpha_animation(a, 1.0, 0.0, 0.01, is_destroy=True) self.set_alpha_animation(a, 1.0, 0.0, 0.01, is_destroy=False)
def init_steps(self): def init_steps(self):
...@@ -301,10 +307,13 @@ class TheLostPlanetSim(UniverseSimScenes): ...@@ -301,10 +307,13 @@ class TheLostPlanetSim(UniverseSimScenes):
(self.one_asteroid_fade_in, 100, 1), (self.one_asteroid_fade_in, 100, 1),
(self.one_asteroid_fade_in, 100, 1), (self.one_asteroid_fade_in, 100, 1),
(self.one_asteroid_fade_in, 100, 1), (self.one_asteroid_fade_in, 100, 1),
(self.one_asteroid_fade_in, 900, 1), (self.one_asteroid_fade_in, 100, 1),
(self.asteroid_fade_out, 300, 1), (self.one_asteroid_fade_in, 100, 1),
(self.one_asteroid_fade_in, 100, 1),
(lambda: None, 600, -1),
# (self.asteroid_fade_out, 300, 1),
# 发现小行星带 # 发现小行星带
(self.asteroid_fade_in, 900, 1), (self.asteroids_fade_in, 900, 1),
# (self.asteroid_fade_out, 900, 1), # (self.asteroid_fade_out, 900, 1),
# 第4波行星 # 第4波行星
(self.camera_back_2, 900, -1), (self.camera_back_2, 900, -1),
...@@ -321,7 +330,7 @@ class TheLostPlanetSim(UniverseSimScenes): ...@@ -321,7 +330,7 @@ class TheLostPlanetSim(UniverseSimScenes):
self._fun_names[f_name] += 1 self._fun_names[f_name] += 1
else: else:
self._fun_names[f_name] = 0 self._fun_names[f_name] = 0
self._steps.append((s[0], s[1], s[2], str(self._fun_names[f_name]))) self._steps.append((s[0], s[1] * self.record_rate, s[2], str(self._fun_names[f_name])))
self.steps = self._steps self.steps = self._steps
def body_orbit_the_sun(self, body, start_angle, angle_speed=0.5): def body_orbit_the_sun(self, body, start_angle, angle_speed=0.5):
...@@ -340,21 +349,21 @@ class TheLostPlanetSim(UniverseSimScenes): ...@@ -340,21 +349,21 @@ class TheLostPlanetSim(UniverseSimScenes):
x = body.orbit_radius * math.cos(angle) x = body.orbit_radius * math.cos(angle)
z = body.orbit_radius * math.sin(angle) z = body.orbit_radius * math.sin(angle)
body.planet.main_entity.position = Vec3(x, 0, z) body.planet.main_entity.position = Vec3(x, 0, z)
body.orbit_angle += angle_speed body.orbit_angle += angle_speed / self.record_rate
print(body.orbit_angle) print(body.orbit_angle)
body.planet.update = orbit_update body.planet.update = orbit_update
def camera_back_1(self): def camera_back_1(self):
if camera.position[2] > -450: if camera.position[2] > -450:
camera.position += camera.right * 0.2 camera.position += camera.right * 0.2 / self.record_rate
camera.position += camera.back * 0.5 camera.position += camera.back * 0.5 / self.record_rate
print(camera.position) print(camera.position)
def camera_back_2(self): def camera_back_2(self):
if camera.position[2] > -550: if camera.position[2] > -550:
camera.position += camera.right * 0.2 camera.position += camera.right * 0.2 / self.record_rate
camera.position += camera.back * 0.5 camera.position += camera.back * 0.5 / self.record_rate
def on_timer_changed(self, time_data): def on_timer_changed(self, time_data):
# camera.position += camera.right # camera.position += camera.right
...@@ -385,7 +394,7 @@ class TheLostPlanetSim(UniverseSimScenes): ...@@ -385,7 +394,7 @@ class TheLostPlanetSim(UniverseSimScenes):
if __name__ == '__main__': if __name__ == '__main__':
sim = TheLostPlanetSim() sim = TheLostPlanetSim()
# UniverseSimScenes.set_window_size((1920, 1079), False)
# 运行前会触发 on_ready # 运行前会触发 on_ready
UrsinaEvent.on_ready_subscription(sim.on_ready) UrsinaEvent.on_ready_subscription(sim.on_ready)
# UrsinaEvent.after_ready_subscription(after_ready) # UrsinaEvent.after_ready_subscription(after_ready)
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
# python_version :3.9 # python_version :3.9
# ============================================================================== # ==============================================================================
from objs import CoreValagaClas from objs import CoreValagaClas
import sys
class UniverseSimScenes: class UniverseSimScenes:
...@@ -14,19 +15,30 @@ class UniverseSimScenes: ...@@ -14,19 +15,30 @@ class UniverseSimScenes:
可以作为宇宙模拟场景的基类,但是不是必须的。 可以作为宇宙模拟场景的基类,但是不是必须的。
""" """
def __new__(cls, *args, **kwargs):
print("参数个数", len(sys.argv))
if len(sys.argv) > 1:
UniverseSimScenes.set_window_size((1920, 1079), False)
cls.record_rate = 2
else:
cls.record_rate = 1
instance = super().__new__(cls, *args, **kwargs)
return instance
@staticmethod @staticmethod
def create_camera_target(init_position=[0, 0, 0], size_scale=1e3): def create_camera_target(init_position=[0, 0, 0], size_scale=1e3):
camera_target = CoreValagaClas(name="摄像机镜头", mass=1e30, color=(111, 140, 255), camera_target = CoreValagaClas(name="摄像机镜头", mass=1e30, color=(111, 140, 255),
# init_position=[0, 0, 0], # init_position=[0, 0, 0],
# init_position=[D, 0, -D], # init_position=[D, 0, -D],
# init_position=[0, D * 1.15, -D * 2.05], # init_position=[0, D * 1.15, -D * 2.05],
init_position=init_position, init_position=init_position,
init_velocity=[0, 0, 0], init_velocity=[0, 0, 0],
# texture="core_valaga_clas_light.jpg", # texture="core_valaga_clas_light.jpg",
# size_scale=self.SIZE_SCALE * 1e3 # size_scale=self.SIZE_SCALE * 1e3
size_scale=size_scale size_scale=size_scale
).set_ignore_gravity(True).set_light_disable(True) ).set_ignore_gravity(True).set_light_disable(True)
return camera_target return camera_target
@staticmethod @staticmethod
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册