Как сделать так, чтобы несколько экземпляров из класса одновременно перемещались в gyame - PullRequest
0 голосов
/ 23 октября 2018
import pygame, os, sys
from pygame import *

pygame.init()

RED = ( 255, 0, 0)

class WPawn():
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.image = pygame.transform.scale(pygame.image.load('wpawn.png'), (100,100))

        self.move_x = 0
        self.move_y = 0

    def event_handler(self):

        for event in pygame.event.get():
            if event.type == KEYDOWN:
               if event.key == K_UP:
                   self.move_y = -100
               if event.key == K_DOWN:
                   self.move_y = 100

            elif event.type == KEYUP:
                if event.key in (K_UP, K_DOWN):
                    self.move_y = 0


    def update(self, screen):
        self.y = self.y + self.move_y

    def draw(self, screen):
        screen.blit(self.image, (self.x, self.y))


class Game():
    def __init__(self):
        screen_width = 900
        screen_height = 900
        self.screen = pygame.display.set_mode((screen_width,screen_height))
        pygame.display.set_caption ("Chess Project")        

        self.pawn1 = WPawn(50,650)
        self.pawn2 = WPawn(150,650)
        self.pawn3 = WPawn(250,650)
        self.pawn4 = WPawn(350,650)
        self.pawn5 = WPawn(450,650)
        self.pawn6 = WPawn(550,650)
        self.pawn7 = WPawn(650,650)
        self.pawn8 = WPawn(750,650)    

    def play(self):
        clock = pygame.time.Clock()


        RUNNING = True
        while RUNNING:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    RUNNING = False

            clock.tick(30)

            self.pawn1.event_handler()
            self.pawn2.event_handler()
            self.pawn3.event_handler()
            self.pawn4.event_handler()
            self.pawn5.event_handler()
            self.pawn6.event_handler()
            self.pawn7.event_handler()
            self.pawn8.event_handler()

            self.pawn1.update(self.screen)
            self.pawn2.update(self.screen)
            self.pawn3.update(self.screen)
            self.pawn4.update(self.screen)
            self.pawn5.update(self.screen)
            self.pawn6.update(self.screen)
            self.pawn7.update(self.screen)
            self.pawn8.update(self.screen)

            self.screen.fill(RED)

            self.pawn1.draw(self.screen)
            self.pawn2.draw(self.screen)
            self.pawn3.draw(self.screen)
            self.pawn4.draw(self.screen)
            self.pawn5.draw(self.screen)
            self.pawn6.draw(self.screen)
            self.pawn7.draw(self.screen)
            self.pawn8.draw(self.screen)

            pygame.display.update()

Game().play()
pygame.quit()

1 Ответ

0 голосов
/ 24 октября 2018

Событие KEY_UP (или что-либо еще) потребляется при его обработке.Таким образом, какой бы класс WPawn не получал событие первым, он будет перемещаться.

Как правило, программа, управляемая событиями, имеет только один цикл событий.

Может быть проще сделать этоработать, обрабатывая обработку событий вне игровых объектов.Сделайте так, чтобы единичный дескриптор цикла событий записывал нажатие клавиши, затем перемещайте каждый WPawn, который вы хотите переместить.

Возможно что-то вроде:

event = pygame.event.get()
if event.type == K_DOWN:
    foreach pawn in all_pawns:
        pawn.moveDown()
elif event.type == K_UP:
    foreach pawn in all_pawns:
        pawn.moveUp()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...