From 406b7343352573e6cbffc0839ee961909ab74f4f Mon Sep 17 00:00:00 2001 From: march3 Date: Sat, 11 Nov 2023 18:20:50 +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 --- sim_scenes/fiction/earth_orbit_stopped.py | 5 ++-- sim_scenes/solar_system/halley_comet_lib.py | 31 +++++++++++---------- sim_scenes/universe_sim_scenes.py | 31 +++++++++++++++++++++ simulators/ursina/entities/timer.py | 8 ++++-- 4 files changed, 56 insertions(+), 19 deletions(-) create mode 100644 sim_scenes/universe_sim_scenes.py diff --git a/sim_scenes/fiction/earth_orbit_stopped.py b/sim_scenes/fiction/earth_orbit_stopped.py index 7090669..2f17956 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 b3d445a..6c22c94 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 0000000..5f8119e --- /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 2031f26..a957a64 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: -- GitLab