diff --git a/sim_scenes/fiction/earth_orbit_stopped.py b/sim_scenes/fiction/earth_orbit_stopped.py index 70906693ee5af3b16e823d262bd8012b79f81525..2f17956a55ee496c0080b183f305051f3a2b019f 100644 --- a/sim_scenes/fiction/earth_orbit_stopped.py +++ b/sim_scenes/fiction/earth_orbit_stopped.py @@ -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, \ create_text_panel 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.entity_utils import get_value_direction_vectors from simulators.ursina.ui.control_ui import ControlUI @@ -23,7 +24,7 @@ from simulators.ursina.ursina_mesh import create_circle_line, create_orbit_line from ursina import color -class EarthOrbitStoppedSim: +class EarthOrbitStoppedSim(UniverseSimScenes): """ 地球停止公转模拟类 """ @@ -236,7 +237,7 @@ if __name__ == '__main__': # 订阅事件后,上面的函数功能才会起作用 # 运行中,每时每刻都会触发 on_timer_changed UrsinaEvent.on_timer_changed_subscription(sim.on_timer_changed) - + UniverseSimScenes.set_window_size((1400, 700)) # 使用 ursina 查看的运行效果 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # position = 左-右+、上+下-、前+后- diff --git a/sim_scenes/solar_system/halley_comet_lib.py b/sim_scenes/solar_system/halley_comet_lib.py index b3d445a9795d954cbdd7872231747c7b4af4b29b..6c22c94b87ca8bf8d9381645ec48a0d98660a95f 100644 --- a/sim_scenes/solar_system/halley_comet_lib.py +++ b/sim_scenes/solar_system/halley_comet_lib.py @@ -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.consts import AU from objs import HalleComet +from sim_scenes.universe_sim_scenes import UniverseSimScenes from simulators.ursina.ui.control_ui import ControlUI from simulators.ursina.ursina_mesh import create_orbit_by_points @@ -53,7 +54,7 @@ def create_orbit_line(center_body, body, start_time): return orbit_line -class HalleyCometSimBase: +class HalleyCometSimBase(UniverseSimScenes): def __init__(self): self.mercury = None @@ -68,20 +69,20 @@ class HalleyCometSimBase: self.pluto = None self.bodies = [] - def set_window_size(self, 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) + # def set_window_size(self, 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) def build_solar_system(self, ignore_gravity=False, start_time=None): # region 构建太阳系 diff --git a/sim_scenes/universe_sim_scenes.py b/sim_scenes/universe_sim_scenes.py new file mode 100644 index 0000000000000000000000000000000000000000..5f8119e31c3942610ae51794537185d943389711 --- /dev/null +++ b/sim_scenes/universe_sim_scenes.py @@ -0,0 +1,31 @@ +# -*- 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) diff --git a/simulators/ursina/entities/timer.py b/simulators/ursina/entities/timer.py index 2031f26c242211c2631e3facf5d188edbc7778f2..a957a64f4f50e49434c98249dc27629f584648d8 100644 --- a/simulators/ursina/entities/timer.py +++ b/simulators/ursina/entities/timer.py @@ -18,8 +18,12 @@ class Timer(Text): def __init__(self, show=True): # 创建一个文本对象来显示计时器的时间 - super().__init__(text=' ', position=(0.70, -0.465), - origin=(-0.5, 0.5), + from ursina import window + 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) UrsinaEvent.on_timer_changed_subscription(self.on_timer_changed) if not show: