提交 406b7343 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 bf539743
...@@ -12,6 +12,7 @@ from common.func import calculate_distance, get_acceleration_info ...@@ -12,6 +12,7 @@ from common.func import calculate_distance, get_acceleration_info
from sim_scenes.func import mayavi_run, ursina_run, camera_look_at, two_bodies_colliding, set_camera_parent, \ from sim_scenes.func import mayavi_run, ursina_run, camera_look_at, two_bodies_colliding, set_camera_parent, \
create_text_panel create_text_panel
from bodies.body import AU from bodies.body import AU
from sim_scenes.universe_sim_scenes import UniverseSimScenes
from simulators.ursina.entities.body_timer import BodyTimer, TimeData from simulators.ursina.entities.body_timer import BodyTimer, TimeData
from simulators.ursina.entities.entity_utils import get_value_direction_vectors from simulators.ursina.entities.entity_utils import get_value_direction_vectors
from simulators.ursina.ui.control_ui import ControlUI from simulators.ursina.ui.control_ui import ControlUI
...@@ -23,7 +24,7 @@ from simulators.ursina.ursina_mesh import create_circle_line, create_orbit_line ...@@ -23,7 +24,7 @@ from simulators.ursina.ursina_mesh import create_circle_line, create_orbit_line
from ursina import color from ursina import color
class EarthOrbitStoppedSim: class EarthOrbitStoppedSim(UniverseSimScenes):
""" """
地球停止公转模拟类 地球停止公转模拟类
""" """
...@@ -236,7 +237,7 @@ if __name__ == '__main__': ...@@ -236,7 +237,7 @@ if __name__ == '__main__':
# 订阅事件后,上面的函数功能才会起作用 # 订阅事件后,上面的函数功能才会起作用
# 运行中,每时每刻都会触发 on_timer_changed # 运行中,每时每刻都会触发 on_timer_changed
UrsinaEvent.on_timer_changed_subscription(sim.on_timer_changed) UrsinaEvent.on_timer_changed_subscription(sim.on_timer_changed)
UniverseSimScenes.set_window_size((1400, 700))
# 使用 ursina 查看的运行效果 # 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后- # position = 左-右+、上+下-、前+后-
......
...@@ -15,6 +15,7 @@ from common.celestial_data_service import get_reality_orbit_points, init_bodies_ ...@@ -15,6 +15,7 @@ from common.celestial_data_service import get_reality_orbit_points, init_bodies_
from common.color_utils import trail_color_brightest from common.color_utils import trail_color_brightest
from common.consts import AU from common.consts import AU
from objs import HalleComet from objs import HalleComet
from sim_scenes.universe_sim_scenes import UniverseSimScenes
from simulators.ursina.ui.control_ui import ControlUI from simulators.ursina.ui.control_ui import ControlUI
from simulators.ursina.ursina_mesh import create_orbit_by_points from simulators.ursina.ursina_mesh import create_orbit_by_points
...@@ -53,7 +54,7 @@ def create_orbit_line(center_body, body, start_time): ...@@ -53,7 +54,7 @@ def create_orbit_line(center_body, body, start_time):
return orbit_line return orbit_line
class HalleyCometSimBase: class HalleyCometSimBase(UniverseSimScenes):
def __init__(self): def __init__(self):
self.mercury = None self.mercury = None
...@@ -68,20 +69,20 @@ class HalleyCometSimBase: ...@@ -68,20 +69,20 @@ class HalleyCometSimBase:
self.pluto = None self.pluto = None
self.bodies = [] self.bodies = []
def set_window_size(self, size=(1536, 684), fullscreen=False): # def set_window_size(self, size=(1536, 684), fullscreen=False):
from ursina import window # from ursina import window
if fullscreen: # if fullscreen:
# 设置窗口为全屏模式 # # 设置窗口为全屏模式
window.fullscreen = True # window.fullscreen = True
#
# 设置窗口的宽度和高度 # # 设置窗口的宽度和高度
window.size = size # window.size = size
# self.set_window_size((3500, 1024)) # # self.set_window_size((3500, 1024))
# r = 1 # # r = 1
# self.set_window_size((1920*2, 1080*2)) # # self.set_window_size((1920*2, 1080*2))
# self.set_window_size((int(1920 * r), int(1080 * r))) # # self.set_window_size((int(1920 * r), int(1080 * r)))
# self.set_window_size((2376, 1080)) # # self.set_window_size((2376, 1080))
# self.set_window_size((520, 540), fullscreen=False) # # self.set_window_size((520, 540), fullscreen=False)
def build_solar_system(self, ignore_gravity=False, start_time=None): def build_solar_system(self, ignore_gravity=False, start_time=None):
# region 构建太阳系 # region 构建太阳系
......
# -*- coding:utf-8 -*-
# title :宇宙模拟场景的基类
# description :可以作为宇宙模拟场景的基类,但是不是必须的
# author :Python超人
# date :2023-11-11
# link :https://gitcode.net/pythoncr/
# python_version :3.9
# ==============================================================================
class UniverseSimScenes:
"""
可以作为宇宙模拟场景的基类,但是不是必须的。
"""
@staticmethod
def set_window_size(size=(1536, 684), fullscreen=False):
from ursina import window
if fullscreen:
# 设置窗口为全屏模式
window.fullscreen = True
# 设置窗口的宽度和高度
window.size = size
# self.set_window_size((3500, 1024))
# r = 1
# self.set_window_size((1920*2, 1080*2))
# self.set_window_size((int(1920 * r), int(1080 * r)))
# self.set_window_size((2376, 1080))
# self.set_window_size((520, 540), fullscreen=False)
...@@ -18,8 +18,12 @@ class Timer(Text): ...@@ -18,8 +18,12 @@ class Timer(Text):
def __init__(self, show=True): def __init__(self, show=True):
# 创建一个文本对象来显示计时器的时间 # 创建一个文本对象来显示计时器的时间
super().__init__(text=' ', position=(0.70, -0.465), from ursina import window
origin=(-0.5, 0.5), aspect_ratio = window.aspect_ratio
position, origin = (0.5 * aspect_ratio - 0.18, -0.465), (-0.5, 0.5),
super().__init__(text=' ', position=position, #(0.70, -0.465),
origin=origin,
font=UrsinaConfig.CN_FONT, background=True) font=UrsinaConfig.CN_FONT, background=True)
UrsinaEvent.on_timer_changed_subscription(self.on_timer_changed) UrsinaEvent.on_timer_changed_subscription(self.on_timer_changed)
if not show: if not show:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册