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

Python超人-宇宙模拟器

上级 bf539743
......@@ -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 = 左-右+、上+下-、前+后-
......
......@@ -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 构建太阳系
......
# -*- 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):
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:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册