Как сбросить игру после выхода из Game Over -screen?

avatar
Aatu Tahkola
8 августа 2021 в 19:57
47
0
0

Итак, я создаю свою собственную маленькую игру, и когда я "умираю" в игре, я хочу, чтобы мое приложение переключалось на другой экран Game Over. Я смог заставить это работать и заставить приложение возвращаться на экран игры при нажатии перезапуска, но когда я возвращаюсь на экран игры, я не могу сбросить его, как это было, когда игра была началось. Как снова сделать тот же экран? Весь код main.py составляет около 300 строк, поэтому я включил сюда только самые важные строки. Также ниже находится файл .kv.

import kivy
import random
from kivy.app import App
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.graphics.context_instructions import Color
from kivy.graphics.vertex_instructions import Line, Rectangle, Ellipse
from kivy.properties import Clock, BooleanProperty
from kivy.lang import Builder

kv = Builder.load_file("game.kv")
 
class WindowManager(ScreenManager):

    ready_to_play = BooleanProperty(False)

    def __init__(self, **kwargs):
        super(WindowManager, self).__init__(**kwargs)

class GameOverScreen(Screen):
    def __init__(self, **kwargs):
        super(GameOverScreen, self).__init__(**kwargs)
sm = WindowManager()
class GameScreen(Screen):
    sm = sm
    def __init__(self, **kwargs):
        super(GameScreen, self).__init__(**kwargs)
    def update(self, dt):
        if self.ready_to_play:
            # a lot of stuff that need to be updated
        if self.collision == True:
            # print('COLLISION')
            self.game_over = True
            self.collision = False
        if self.game_over:
            self.game_over = False
            self.reset_game()
            self.init_fl_tiles()
            self.first_line_ready = True
            sm.current = 'gameover'


screens = [GameScreen(name='game'), MenuLayout(name='menu'), GameOverScreen(name='gameover')]
for screen in screens:
    sm.add_widget(screen)
sm.current = 'game'

class GameApp(App):
    sm = sm
    def build(self):
        return sm

if __name__ == '__main__':
    GameApp().run()

.kv файл:

<GameOverScreen>:

    RelativeLayout:
        size: root.width - root.width/5, root.height - root.height/5
        pos: root.width/10, root.height/10
        Button:
            text: 'R E S T A R T'
            size_hint: 
            background_normal: ''
            background_color: 66/255, 135/255, 245/255, 1
            on_release:
                app.sm.ready_to_play = True
                app.sm.current = 'game' 

<MenuLayout>:
    
<GameScreen>:
Источник
John Anderson
9 августа 2021 в 16:23
0

Если вы просто хотите перезапустить App, см. этот вопрос.

Ответы (0)