From 1ab087eedad6ffc012748c72ac9e60feeef14b68 Mon Sep 17 00:00:00 2001 From: march3 Date: Tue, 26 Mar 2024 15:11:46 +0800 Subject: [PATCH] =?UTF-8?q?Python=E8=B6=85=E4=BA=BA-=E5=AE=87=E5=AE=99?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bodies/moon.py | 3 +- objs/rock.py | 2 +- .../featured/jupiter_moon_protects_earth.py | 36 ++++++++++++------- simulators/ursina/entities/entity_utils.py | 13 +++++-- 4 files changed, 36 insertions(+), 18 deletions(-) diff --git a/bodies/moon.py b/bodies/moon.py index a16011f..04d3b16 100644 --- a/bodies/moon.py +++ b/bodies/moon.py @@ -27,7 +27,7 @@ class Moon(Body): init_velocity=[-(29.79 + 1.03), 0, 0], texture="moon.jpg", size_scale=1.0, distance_scale=1.0, rotation_speed=0.25, ignore_mass=False, - trail_color=None, show_name=False, + trail_color=None, show_name=False, show_trail=True, gravity_only_for_earth=False): """ @param name: 月球名称 @@ -57,6 +57,7 @@ class Moon(Body): "rotation_speed": rotation_speed, "ignore_mass": ignore_mass, "trail_color": trail_color, + "show_trail": show_trail, "show_name": show_name } super().__init__(**params) diff --git a/objs/rock.py b/objs/rock.py index f59db28..d293ddb 100644 --- a/objs/rock.py +++ b/objs/rock.py @@ -46,7 +46,7 @@ class Rock(Obj): # 对岩石进行缩放,保证 create_rock 保证创建的岩石大小差异不会过大 ROCK_SIZE_SCALE_FACTOR = { 6: 0.5, - 7: 1e-2 + 7: 3e-1 } diff --git a/sim_scenes/featured/jupiter_moon_protects_earth.py b/sim_scenes/featured/jupiter_moon_protects_earth.py index 284d447..bd4590c 100644 --- a/sim_scenes/featured/jupiter_moon_protects_earth.py +++ b/sim_scenes/featured/jupiter_moon_protects_earth.py @@ -35,14 +35,14 @@ class JupiterMoonProtectsEarthSim(UniverseSimScenes): self.sun_jupiter_d = 520000000 # 分别保存太阳碰撞次数、木星碰撞次数、地球碰撞次数、月球碰撞次数、木星保护次数、月球保护次数 self.colliding_count = [0, 0, 0, 0, 0, 0] - self.sun = Sun(name="太阳", size_scale=0.85e2) # 太阳放大 80 倍,距离保持不变 - self.jupiter = Jupiter(name="木星", size_scale=0.45e3, ignore_mass=True) # 木星放大 600 倍,距离保持不变 - self.earth = Earth(name="地球", size_scale=2.5e3, ignore_mass=True, ) # 地球放大 2000 倍,距离保持不变 + self.sun = Sun(name="太阳", size_scale=0.85e2, show_trail=False) # 太阳放大 80 倍,距离保持不变 + self.jupiter = Jupiter(name="木星", size_scale=0.45e3, ignore_mass=True, show_trail=False) # 木星放大 600 倍,距离保持不变 + self.earth = Earth(name="地球", size_scale=2.5e3, ignore_mass=True, show_trail=False ) # 地球放大 2000 倍,距离保持不变 self.moon = Moon(name="月球", size_scale=3.5e3, # 月球球放大 3000 倍,为了较好的效果,地月距离要比实际大 init_position=[self.earth_moon_d, 0, AU], init_velocity=[0, 0, 0], ignore_mass=True, - rotation_speed=0.4065, + rotation_speed=0.4065, show_trail=False, # gravity_only_for_earth=True ) # .set_light_disable(True) @@ -99,7 +99,7 @@ class JupiterMoonProtectsEarthSim(UniverseSimScenes): # vel = [0, 0, 0] # 石头随机大小 - size_scale = random.randint(300, 600) * 1.5e4 + size_scale = random.randint(500, 600) * 1.5e4 # 随机创建石头 rock = create_rock( no=index % 7 + 1, name=f'岩石{index + 1}', mass=size_scale / 1000, @@ -191,10 +191,14 @@ class JupiterMoonProtectsEarthSim(UniverseSimScenes): if collided: # 如果碰撞了,则该石头重复再利用,这样才保证有无限个石头可用 pos, vel = self.random_pos_vel() - comet.planet.on_reset() - comet.planet.trails.clear() - if hasattr(comet.planet, "trail_last_pos"): - delattr(comet.planet, "trail_last_pos") + + # comet.planet.trails.clear() + # if hasattr(comet.planet, "trail_last_pos"): + # delattr(comet.planet, "trail_last_pos") + # if hasattr(comet.planet, "last_trail"): + # del comet.planet.last_trail + # delattr(comet.planet, "last_trail") + comet.init_position = pos comet.init_velocity = vel comet.set_visible(True) @@ -205,10 +209,12 @@ class JupiterMoonProtectsEarthSim(UniverseSimScenes): if hasattr(comet, "moon_collided"): delattr(comet, "moon_collided") - print("Sun:%s Jupiter:%s Earth:%s Moon:%s" % (self.colliding_count[0], - self.colliding_count[1], - self.colliding_count[2], - self.colliding_count[3])) + comet.planet.on_reset() + + # print("Sun:%s Jupiter:%s Earth:%s Moon:%s" % (self.colliding_count[0], + # self.colliding_count[1], + # self.colliding_count[2], + # self.colliding_count[3])) sun_cnt, jupiter_cnt, earth_cnt, moon_cnt, j_protected_cnt, m_protected_cnt = self.colliding_count total_cnt = sun_cnt + jupiter_cnt + earth_cnt + moon_cnt if total_cnt == 0: @@ -272,6 +278,10 @@ class JupiterMoonProtectsEarthSim(UniverseSimScenes): # UrsinaConfig.trail_length = 1000 UrsinaConfig.trail_thickness_factor = 2 + for b in self.bodies: + if isinstance(b, Rock): + print("岩石大小", b.name, b.planet.scale_x) + if __name__ == '__main__': """ diff --git a/simulators/ursina/entities/entity_utils.py b/simulators/ursina/entities/entity_utils.py index d7589b0..1cd6676 100644 --- a/simulators/ursina/entities/entity_utils.py +++ b/simulators/ursina/entities/entity_utils.py @@ -147,8 +147,9 @@ def create_trails(parent): else: trail = create_trail_sphere(parent, pos) # 拖尾为球体 - if trail is not None: - create_trail_info(parent.body, trail) + if trail is None: + return + create_trail_info(parent.body, trail) # 创建拖尾球体,并作为字典的key,存放拖尾球体的位置 parent.trails[trail] = pos @@ -287,7 +288,10 @@ def create_trail_curve_line(parent, pos): trail = None if hasattr(parent, "trail_last_pos"): trail_last_pos = parent.trail_last_pos - if distance(pos, trail_last_pos) > 0: + d = distance(pos, trail_last_pos) + # if d > 200: + # print(parent.body.name, d) + if d > 0: trail = Entity(model=Mesh( vertices=((pos[0], pos[1], pos[2]), (trail_last_pos[0], trail_last_pos[1], trail_last_pos[2])), mode='line', @@ -344,6 +348,9 @@ def clear_trails(parent): parent.trails.clear() if hasattr(parent, "trail_last_pos"): delattr(parent, "trail_last_pos") + if hasattr(parent, "last_trail"): + destroy(parent.last_trail) + delattr(parent, "last_trail") def create_fixed_star_lights(fixed_star): -- GitLab