Переключение классов в киви без screenmanger - PullRequest
0 голосов
/ 01 мая 2020

Я создаю игру и хочу иметь разные уровни и разные настройки параметров, такие как кнопка воспроизведения и так далее. Поэтому для этого мне нужно много экранов, особенно для моих уровней. Мои классы наследуются от виджетов, поэтому я не могу использовать менеджер экрана. Но я хотел бы использовать это. Моя идея состоит в том, чтобы очистить все widegts и затем отобразить новые виджеты. Но я не знаю, как начать и реализовать мою идею. Кто-нибудь может помочь. Вот мой код.

class PongGame(Widget):
    ball = ObjectProperty(None)
    ship = ObjectProperty(None)
    enemy = ObjectProperty(None)
    def serve_ball(self,*args):
        self.ball.x = self.ship.x
        self.ball.y = self.ship.y
        self.ball.velocity = Vector(5,0).rotate(90)
        if self.ball.y > self.height:
            self.ball.x = self.ship.x
            self.ball.y = self.ship.y
        self.sound = SoundLoader.load('laser.wav')
        self.sound.play()


    def random_generator(self,x,y):
        return random.randint(x,y)

    enemies = ListProperty([])

    def add_enemy(self, *args):
        enemy = Enemy()
        enemy.pos = (random.randint(0,600), randint(200,600))
        self.add_widget(enemy)
        self.enemies.append(enemy)
    And so on lots of code I don't think that everything else is important

Мой враг и класс корабля

class Enemy(Widget):
    x_change = NumericProperty(3)
    y_change = NumericProperty(-50)
    score = NumericProperty(0)

    def collision(self, ball):
        if self.collide_widget(ball):
            self.y = 1000
            self.score += 5
           # enemy1.y = randint(300, 500)
            ball.x = -1000
            ball.y = self.height / self.width

    def move(self, *args):
        self.x -= self.x_change
        if self.x >= self.parent.width - 64:
            self.x_change = 3
            self.y += self.y_change
        elif self.x <= 0:
            self.x_change = -3
            self.y += self.y_change
        if self.y < 0:
            print('Game Over')
            self.clear_widgets()





class SpaceShip(Widget):
    pass

Мой основной класс приложения

class PongApp(App):

    def build(self):
        game = PongGame()
        # game.serve_ball()
        # pro second 60 frames are shown
        Clock.schedule_interval(game.update,1/60)
        return game

Некоторые из моих кодов kv

<Enemy>:
    size_hint: None,None
    size: 64,64
    canvas:
        Rectangle:
            pos:self.pos
            size: self.size
            source:'alien.png'



<PongGame>:
    ball: pong_ball
    ship: space_ship
    start_button: start_button
    resume_button:resume_button

    canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
            source: 'background.png'
    Label:
        font_size: 40
        x:root.width/ 1/4 +70
        y:root.height -350
        text: 'Your score :'

    Label:
        font_size: 40
        x:root.width/ 1/2
        y:root.height -350
        #text: str(root.Enemy.score)
...