gpt4 book ai didi

python-3.x - Pygame中的多个显示

转载 作者:行者123 更新时间:2023-12-03 16:07:56 29 4
gpt4 key购买 nike

我正在做一个小游戏,我想与我的主窗口分开制作另一个窗口。

我将主游戏放在一个主窗口中,我想打开一个新窗口,并在用户执行某些操作时做一些动画处理。

在下面的示例代码中,当用户按下“a”时,我希望它打开一个新窗口并显示在该窗口上。

在这里,我设置了两个窗口:(我知道这不起作用,这是我要问的事情)

SCREEN_X = 400
SCREEN_Y = 400
BSCREEN_X = 240
BSCREEN_Y = 160

BATTLE_SCENE = pygame.display.set_mode((BSCREEN_X, BSCREEN_Y))
SCREEN = pygame.display.set_mode((SCREEN_X, SCREEN_Y))

然后程序:
def run_ani ():
#Do animation, blitting to BATTLE_SCENE
return

def main_game():
ending=False
while ending==False:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT: ending=True
if event.type == KEYDOWN: # key down or up?
if event.key == K_ESCAPE:
ending=True # Time to leave
print("Stopped Early by user")
elif event.key == K_a:
run_ani()
#Normal screen motion, blitting to SCREEN
if ending: pygame.quit()
return

到目前为止,此操作是绘制主屏幕,然后按A时,它将停止绘制主屏幕动画,但仍在主屏幕上绘制其他动画并在左上角绘制。

我很确定这样做是因为我将 BATTLE_SCENE设置为小于主屏幕,因此,当向 BATTLE_SCENE倾斜时,它会闪烁到我在主屏幕顶部角落创建的区域(240x160)。

但是我希望 BATTLE_SCENE是一个单独的窗口,以便当我按'a'时它将弹出,执行其操作,然后关闭或至少进入主屏幕。

这该怎么做?可能吗?

最佳答案

您真的需要多个窗口吗?我的意思是,您真的需要它们吗?

如果是,那么您可能应该改用pyglet/cocos2d

要在pygame中拥有多个窗口,您需要多个进程(每个窗口一个)。尽管这是可行的,但不值得这样做。您需要IPC在Windows之间交换数据,我想您的代码将容易出错且难看。

当您需要多个窗口时,请使用pyglet。

更好的解决方案可能是将您的游戏分成场景。创建多个场景,以便每个场景代表游戏的一个阶段,例如MenuScene,MainScene,BattleScene,GameOverScene,OptionScene等。

然后让这些场景中的每一个处理游戏那部分的输入/绘制。

  • MenuScene处理游戏菜单
  • 的绘制和输入等
  • MainScene处理正在运行的游戏
  • 的绘图和输入等
  • BattleScene处理run_ani中的绘图和输入等操作

  • 在您的主循环中,只需通过实现 draw()handle_event()update()方法将控制权传递到当前场景即可。

    一些示例代码可以帮助您理解:
    scenes = {'Main': MainScene(),
    'Battle': BattleScene()} #etc

    scene = scenes['Main']

    class MainScene():
    ...
    def handle_event(self, event):
    if event.type == KEYUP:
    if event.key == K_a:
    scene = scenes['Battle']
    ...

    class BattleScene():
    ...
    def draw(self):
    # draw your animation

    def update(self):
    # if animation is over:
    scene = scenes['Main']

    ...

    def main_game():
    ending=False
    While Not ending:
    clock.tick(30)
    for event in pygame.event.get():
    scene.handle_event(event)
    scene.update()
    scene.draw()

    这是一种清晰区分游戏逻辑并允许上下文切换的简便方法。

    关于python-3.x - Pygame中的多个显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11105836/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com