From e0e7539a8e8cca567a2b433c36f7bf6e756d9502 Mon Sep 17 00:00:00 2001 From: march3 Date: Sun, 2 Apr 2023 20:17:03 +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/solar_system/earth_moon.py | 2 +- simulators/ursina/entities/planet.py | 8 +++++--- simulators/ursina/ui/control_handler.py | 1 + simulators/ursina/ui_component.py | 1 + simulators/ursina/ursina_event.py | 11 +++++++++++ 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/sim_scenes/solar_system/earth_moon.py b/sim_scenes/solar_system/earth_moon.py index c8b81d8..fb7e2c9 100644 --- a/sim_scenes/solar_system/earth_moon.py +++ b/sim_scenes/solar_system/earth_moon.py @@ -29,4 +29,4 @@ if __name__ == '__main__': # 使用 ursina 查看的运行效果 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # position = 左-右+、上+下-、前+后- - ursina_run(bodies, SECONDS_PER_DAY, position=(-300000, 200000, -1300000), show_trail=True) + ursina_run(bodies, SECONDS_PER_MONTH, position=(-300000, 200000, -1300000), show_trail=True) diff --git a/simulators/ursina/entities/planet.py b/simulators/ursina/entities/planet.py index 6c12ff9..09b3243 100644 --- a/simulators/ursina/entities/planet.py +++ b/simulators/ursina/entities/planet.py @@ -65,6 +65,7 @@ class Planet(Entity): rotation = (0, 0, 0) UrsinaEvent.on_reset_subscription(self.on_reset) + UrsinaEvent.on_body_size_changed_subscription(self.change_body_scale) super().__init__( # model="sphere", @@ -100,16 +101,18 @@ class Planet(Entity): # 创建行星环(目前只有土星环) create_rings(self) - def update(self): + def change_body_scale(self): if hasattr(self.body, "torus_stars"): # 星环小天体群(主要模拟小行星群,非一个天体)不受 body_size_factor 影响 self.scale = self.init_scale else: self.scale = self.init_scale * UrsinaConfig.body_size_factor + def update(self): + self.change_body_scale() + pos = self.body_view.position * UrsinaConfig.SCALE_FACTOR if self.body.parent is None: - # TODO: ???????? # self.x = -pos[1] # self.y = pos[2] # self.z = pos[0] @@ -180,7 +183,6 @@ class Planet(Entity): self.f_parent = b break pos = self.f_parent.position * UrsinaConfig.SCALE_FACTOR - # TODO: ???????? # self.x = -pos[1] # self.y = pos[2] # self.z = pos[0] diff --git a/simulators/ursina/ui/control_handler.py b/simulators/ursina/ui/control_handler.py index 2ac6303..274122b 100644 --- a/simulators/ursina/ui/control_handler.py +++ b/simulators/ursina/ui/control_handler.py @@ -205,6 +205,7 @@ class ControlHandler(EventHandler): def on_slider_body_size_changed(self): UrsinaConfig.body_size_factor = self.ui.slider_body_size_factor.value + UrsinaEvent.on_body_size_changed() def on_slider_run_speed_changed(self): UrsinaConfig.run_speed_factor = self.ui.slider_run_speed_factor.value diff --git a/simulators/ursina/ui_component.py b/simulators/ursina/ui_component.py index 8f666c2..2ab63b8 100644 --- a/simulators/ursina/ui_component.py +++ b/simulators/ursina/ui_component.py @@ -33,6 +33,7 @@ class UiSlider(Slider): dynamic=True) # self.label.scale *= 8/10 self.label.font = UrsinaConfig.CN_FONT + self.knob.ignore_paused = True # self.knob.text_entity.font = "" # self.knob.text_entity.scale *= 8/10 # self.height *= 8/10 diff --git a/simulators/ursina/ursina_event.py b/simulators/ursina/ursina_event.py index b04b515..68550a8 100644 --- a/simulators/ursina/ursina_event.py +++ b/simulators/ursina/ursina_event.py @@ -24,6 +24,17 @@ class UrsinaEvent: UrsinaEvent.on_searching_bodies_funcs = [] # 应用运行的订阅事件 UrsinaEvent.on_application_run_callback = [] + # + UrsinaEvent.on_body_size_changed_callback = [] + + @staticmethod + def on_body_size_changed_subscription(fun): + UrsinaEvent.on_body_size_changed_callback.append(fun) + + @staticmethod + def on_body_size_changed(): + for f in UrsinaEvent.on_body_size_changed_callback: + f() @staticmethod def on_application_run_callback_subscription(fun): -- GitLab