提交 1ab087ee 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 f1f315c8
......@@ -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)
......
......@@ -46,7 +46,7 @@ class Rock(Obj):
# 对岩石进行缩放,保证 create_rock 保证创建的岩石大小差异不会过大
ROCK_SIZE_SCALE_FACTOR = {
6: 0.5,
7: 1e-2
7: 3e-1
}
......
......@@ -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__':
"""
......
......@@ -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):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册