skycrow520 2021-10-17 09:33 采纳率: 0%
浏览 56

pygame无法正常检测KEYUP事件

运行系统:Windows10专业版
Python版本:3.9.7

我的代码:
主文件:

class Fire_Water_Fight:
    """管理游戏资源和行为"""

    def __init__(self):
        pygame.init()
        self.settings = Settings()

        self.screen = pygame.display.set_mode(
            (self.settings.screen_width, self.settings.screen_height))
        pygame.display.set_caption("Fire_Water_Fight")

        self.fire = Fire(self)
        self.water = Water(self)

    def run_game(self):
        """开始游戏的主循环"""
        while True:
            self._check_events()
            self._update_screen()
            self.water.update()
            
    def _check_events(self):
        """监视键盘和鼠标事件"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT:
                    #向右移动水娃
                    self.water.moving_right = True
                elif event.type == pygame.KEYUP:
                    if event.key == pygame.K_RIGHT:
                        self.water.moving_right = False
    def _update_screen(self):
        """更新屏幕上的图像,并切换到新屏幕"""
        self.screen.fill(self.settings.bg_color)
        self.fire.blitme()
        self.water.blitme()

        #让绘制的屏幕可见
        pygame.display.flip()

if __name__ == '__main__':
    ai = Fire_Water_Fight()
    ai.run_game()

fire_water.py:

import pygame

class Fire:
    """管理火娃的类"""

    def __init__(self, ai_game):
        """初始化人物并设置初始位置"""
        self.screen = ai_game.screen
        self.screen_rect = ai_game.screen.get_rect()

        #加载图像并获取其外接矩形
        self.image = pygame.image.load('images/fire.bmp')
        self.rect = self.image.get_rect()

        #将人物放在指定位置
        self.screen_rect.midbottom

        #移动标志
        self.moving_right = False

    def blitme(self):
        """在指定位置绘制人物"""
        self.screen.blit(self.image, (180,850))

    

class Water:
    """管理冰娃的类"""

    def __init__(self, ai_game):
        """初始化人物并设置初始位置"""
        self.screen = ai_game.screen
        self.screen_rect = ai_game.screen.get_rect()

        #加载图像并获取其外接矩形
        self.image = pygame.image.load('images/water.bmp')
        self.rect = self.image.get_rect()


        #将人物放在指定位置
        self.screen_rect.midbottom

        #移动标志
        self.moving_right = False

    def blitme(self):
        """在指定位置绘制人物"""
        self.screen.blit(self.image, (1420,850))

    def update(self):
        """根据移动标志调整水娃的位置"""
        print(self.moving_right)
        if self.moving_right:
            self.rect.x += 1

  • 写回答

1条回答 默认 最新

  • Python-ZZY 2021-10-17 16:27
    关注

    主程序第27-33代码打错了

    elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_RIGHT:
                        #向右移动水娃
                        self.water.moving_right = True
                    elif event.type == pygame.KEYUP:
    '''你这边缩进有问题,这部分代码向左边退4格(tab)
    两个event.type的检测要对齐'''
                        if event.key == pygame.K_RIGHT:
                            self.water.moving_right = False
    
    评论

报告相同问题?

问题事件

  • 创建了问题 10月17日