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

Python超人-宇宙模拟器

上级 66927fa6
......@@ -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)
......
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册