首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使一个类在gyame中同时移动多个实例

如何使一个类在gyame中同时移动多个实例
EN

Stack Overflow用户
提问于 2018-10-23 20:19:33
回答 1查看 27关注 0票数 0
代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-23 23:03:32

当您处理KEY_UP事件(或其他事件)时,它就会被消耗掉。因此,无论哪个WPawn类首先得到事件,都会移动。

通常,事件驱动程序只有一个事件循环.

通过处理游戏对象之外的事件处理,可以更容易地完成这项工作。让单个事件循环句柄记录键按下,然后移动您希望被移动的每个WPawn

也许是这样的:

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52957273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档