diff --git a/sim_scenes/featured/the_lost_planet.py b/sim_scenes/featured/the_lost_planet.py index 6ee2f3cefcd3665ff6ac3771fd51ffb7bcc1319c..b2b7b5b8e3252f59419ae8b55cd793c872618627 100644 --- a/sim_scenes/featured/the_lost_planet.py +++ b/sim_scenes/featured/the_lost_planet.py @@ -6,6 +6,7 @@ # link :https://gitcode.net/pythoncr/ # python_version :3.9 # ============================================================================== +import sys import time from bodies import Sun, Mercury, Venus, Earth, Mars, Moon, Ceres, Jupiter, Saturn, Uranus, Neptune, Pluto, Asteroids @@ -31,7 +32,7 @@ class TheLostPlanetSim(UniverseSimScenes): # inner_radius:内圆半径 outer_radius:外圆半径,subdivisions:细分数,控制圆环的细节和精度 # 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) self.mercury = Mercury(size_scale=3e3, distance_scale=8.5) self.venus = Venus(size_scale=3e3, distance_scale=5) @@ -40,7 +41,7 @@ class TheLostPlanetSim(UniverseSimScenes): self.jupiter = Jupiter(size_scale=0.68e3, distance_scale=1.12) self.saturn = Saturn(size_scale=0.68e3, distance_scale=0.74) 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), # init_position=self.mars.init_position, # init_velocity=[0, 0, 0], @@ -153,9 +154,9 @@ class TheLostPlanetSim(UniverseSimScenes): planet = body planet.alpha = begin_alpha if begin_alpha > end_alpha: - interval = -abs(interval) + interval = -abs(interval) / self.record_rate else: - interval = abs(interval) + interval = abs(interval) / self.record_rate origin_update = planet.update @@ -189,7 +190,7 @@ class TheLostPlanetSim(UniverseSimScenes): asteroid.s_angle = init_angle asteroid.init_pos = pos y = 10 * random.random() - 5 - speed = random.random() / 7 + 0.2 + speed = (random.random() / 7 + 0.2) / self.record_rate def rotation(): angle = math.pi * asteroid.s_angle / 180 @@ -221,7 +222,9 @@ class TheLostPlanetSim(UniverseSimScenes): # a.enabled = False 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"): # self.one_asteroid_fade_in_index = 0 # self.one_asteroid_fade_in_last_time = time.time() @@ -234,22 +237,25 @@ class TheLostPlanetSim(UniverseSimScenes): # if self.one_asteroid_fade_in_index >= 4: # self.step_index += 1 - def asteroid_fade_in(self): + def asteroids_fade_in(self): """ 小行星群渐渐显示 @return: """ self.create_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: """ 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): @@ -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, 900, 1), - (self.asteroid_fade_out, 300, 1), + (self.one_asteroid_fade_in, 100, 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), # 第4波行星 (self.camera_back_2, 900, -1), @@ -321,7 +330,7 @@ class TheLostPlanetSim(UniverseSimScenes): self._fun_names[f_name] += 1 else: 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 def body_orbit_the_sun(self, body, start_angle, angle_speed=0.5): @@ -340,21 +349,21 @@ class TheLostPlanetSim(UniverseSimScenes): x = body.orbit_radius * math.cos(angle) z = body.orbit_radius * math.sin(angle) 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) body.planet.update = orbit_update def camera_back_1(self): if camera.position[2] > -450: - camera.position += camera.right * 0.2 - camera.position += camera.back * 0.5 + camera.position += camera.right * 0.2 / self.record_rate + camera.position += camera.back * 0.5 / self.record_rate print(camera.position) def camera_back_2(self): if camera.position[2] > -550: - camera.position += camera.right * 0.2 - camera.position += camera.back * 0.5 + camera.position += camera.right * 0.2 / self.record_rate + camera.position += camera.back * 0.5 / self.record_rate def on_timer_changed(self, time_data): # camera.position += camera.right @@ -385,7 +394,7 @@ class TheLostPlanetSim(UniverseSimScenes): if __name__ == '__main__': sim = TheLostPlanetSim() - # UniverseSimScenes.set_window_size((1920, 1079), False) + # 运行前会触发 on_ready UrsinaEvent.on_ready_subscription(sim.on_ready) # UrsinaEvent.after_ready_subscription(after_ready) diff --git a/sim_scenes/universe_sim_scenes.py b/sim_scenes/universe_sim_scenes.py index 2c8ef7f2e64bfddaaa131ffafa53bd8cb4756107..3107dde4eea4d6932eee1d50c4b7b10096890703 100644 --- a/sim_scenes/universe_sim_scenes.py +++ b/sim_scenes/universe_sim_scenes.py @@ -7,6 +7,7 @@ # python_version :3.9 # ============================================================================== from objs import CoreValagaClas +import sys 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 def create_camera_target(init_position=[0, 0, 0], size_scale=1e3): camera_target = CoreValagaClas(name="摄像机镜头", mass=1e30, color=(111, 140, 255), - # init_position=[0, 0, 0], - # init_position=[D, 0, -D], - # init_position=[0, D * 1.15, -D * 2.05], - init_position=init_position, - init_velocity=[0, 0, 0], - # texture="core_valaga_clas_light.jpg", - # size_scale=self.SIZE_SCALE * 1e3 - size_scale=size_scale - ).set_ignore_gravity(True).set_light_disable(True) + # init_position=[0, 0, 0], + # init_position=[D, 0, -D], + # init_position=[0, D * 1.15, -D * 2.05], + init_position=init_position, + init_velocity=[0, 0, 0], + # texture="core_valaga_clas_light.jpg", + # size_scale=self.SIZE_SCALE * 1e3 + size_scale=size_scale + ).set_ignore_gravity(True).set_light_disable(True) return camera_target @staticmethod