0

我正在尝试在 ursina 中创建一个 2D 游戏,我有一个类FirstLevel,我在其中创建玩家 2D 实体、敌人、立方体等,我还使用这个类的update方法进行玩家动作等。在我的 main.py 中,首先我创建一个菜单,如带有开始和退出按钮等的界面,然后如果单击开始按钮,我将运行第一级。

我的问题是:我可以创建第二类,比如说SecondLevel(从第一个继承一些信息,比如玩家速度、敌人等)并摧毁这个FirstLevel类(在第一级老板被摧毁之后)吗?如果没有,有人知道我如何在不同的类实体(在我的情况下是级别)之间切换吗?

源代码在这里:https ://github.com/VulpeanuAdrian/LordMuffinGame

def start_level():
    global m
    destroy(play)
    destroy(help)
    destroy(help_text)
    destroy(exit_button)
    destroy(cat_screen)
    m = True
    m = FirstLevel()

def help_text_func():
    play.visible = True
    exit_button.visible = True
    destroy(help_text_bt)

def help_menu():
    global help_text_bt
    help_text_bt = Button(
        text=help_text_string,
        on_click=help_text_func,
        scale=(1, 0.6),
        x=-0.4, 
        y=0.35, 
        color=color.orange, 
        text_color=color.violet
    )

if __name__ == '__main__':
    app = Ursina()
    window.fullscreen = True
    cat_screen = Animation('cat_gif', fps=30, loop=True, autoplay=True, scale=(13, 13))
    cat_screen.start()
    play = Button(' Play ', on_click=start_level, scale=(0.095, 0.095), x=0, y=0, color=color.blue)
    help = Button('Help', on_click=help_menu, scale=(0.095, 0.095), x=0, y=-0.1)
    help_text = Text(text=help_text_string, x=-0.3, y=0.3, visible=False, color=color.random_color())
    exit_button = Button(' Quit ', on_click=application.quit, x=0, y=-0.2, scale=(0.095, 0.095), color=color.red)

4

1 回答 1

0

有两种方法可以实现您想要的,第一种非常简单,第二种更面向对象:

  • 删除特定实体(从您的关卡中)的一种方法是将实体存储在列表中,遍历它们并destroy(entity_name)在每个实体上使用,然后初始化包含下一个关卡的类。
  • 如果你更喜欢 OOP 编程,你应该让每个你定义的关卡EntityEntity成为它自己的父类,这样你就可以破坏父类(关卡),而 ursina 也会破坏它的孩子。如果您想将 anEntity设置为其他对象,您可以手动为关卡设置自定义销毁方法,以删除您放入其中的所有实体。请参见下面的示例:
from ursina import *


class FirstLevel(Entity):
   def __init__(self):
       super().__init__()
       self.cube = Entity(parent=self, model='cube', texture='brick')
       self.other_cube = Entity(parent=camera.ui, model='cube', color=color.pink, scale=.1)

   def input(self, key):
       if key == 'a':
           self.unloadLevel()

   def unloadLevel(self):
       destroy(self.other_cube)
       destroy(self)



if __name__ == '__main__':
   app = Ursina()

   a = FirstLevel()

   app.run()
于 2022-02-19T21:09:49.983 回答