学而无谓 2022-10-12 22:15 采纳率: 100%
浏览 158
已结题

python运用pygame运行窗口未响应

问题遇到的现象和发生背景

编程python的坦克大战游戏,使用pygame模块 在创建游戏窗口有后会发生未响应,然后我使用pygame.QUIT.和pygame.KEYDOWN后依然未响应

用代码块功能插入代码,请勿粘贴截图

总代码:如下

import pygame
_display = pygame.display
COLOR_BLACK = pygame.Color(0, 0, 0)
verson = 'v1.042'
class MainGame():#主逻辑类的实现
    #游戏主窗口
    window = None
    SCREEN_HEIGHT = 500
    SCREEN_WIDTH = 800

    def __init__(self):
        pass
    #开始游戏方法
    def startGame(self):
        _display.init()
        # 创建窗口加载窗口(借鉴官方文档)
        MainGame.window =_display.set_mode([MainGame.SCREEN_WIDTH,MainGame.SCREEN_HEIGHT])
        #设置游戏标题
        _display.set_caption("坦克世界大战"+verson)
        #让窗口持续刷新操作
        while True:

            #给窗口完成一个颜色的填充
            MainGame.window.fill(MainGame.COLOR_BLACK)

            _display.update()

    #获取程序期间所有事件(鼠标事件,键盘事件)
    def getEvent(self):
        #1、获取所有事件
        eventList = pygame.event.get()
         #2、对事件进行判断处理(1.点击关闭按钮 2.按下键盘上的某个键)
        for event in eventList:
            #判断event.type 是否QUIT。如果是退出的话,直接调用程序结束方法
            if event.type == pygame.QUIT:
                self.endGame()
            #判断事件类型是否为按键按下,如果是继续判断按键是哪一个按键来进行对应处理
            if event.type == pygame.KEYDOWN:
                #具体是那一按键的处理
                if event.key == pygame.K_LEFT:
                     print("坦克向左掉头,移动")
                elif event.key == pygame.K_RIGHT:
                     print("坦克向右掉头,移动")
                elif event.key == pygame.K_UP:
                     print("坦克向上掉头,移动")
                elif event.key == pygame.K_DOWN:
                     print("坦克向下掉头,移动")
                elif event.key == pygame.K_SPACE:
                    print("发射子弹")
    def endGame(self):
        print("谢谢使用")
        #结束python解释器
        exit()
class Tank():
    def __init__(self):
        pass
    #坦克的移动方法
    def move(self):
        pass
    #射击方法
    def shot(self):
        pass
    #展示坦克
    def displayTank(self):
        pass
class MyTank(Tank):
    def __init__(self):
        pass
class EnemyTank(Tank):
    def __init__(self):
        pass
class Bullet():
    def __init__(self):
        pass
    #子弹的移动方法
    def move(self):
        pass
    #展示子弹的方法
    def displayBullet(self):
        pass
class Explode():
    def __init__(self):
        pass
    def displayExplode(self):
        pass
class Wall():
    def __init__(self):
        pass
    #展示墙壁的方法
    def displayWall(self):
        pass
class Music():
    def __init__(self):
        pass
    #开始播放音乐
    def play(self):
        pass
MainGame().startGame()

运行结果及报错内容

img

我的解答思路和尝试过的方法

一开始以为是pycharm上没有对应的类(像pygame一样没有安装)后来发现应该是def getEvent(self): 后的程序没有进行编译,还有
event.type == pygame.KEYDOWN: 中key的成员属性

我想要达到的结果

创建的游戏窗口响应,且对应我在键盘的操作输出对应信息。

img

  • 写回答

3条回答 默认 最新

  • 浪客 2022-10-12 22:40
    关注
    
    24行 MainGame.window.fill(COLOR_BLACK)
    后面加一句            self.getEvent()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月21日
  • 已采纳回答 10月13日
  • 创建了问题 10月12日

悬赏问题

  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)
  • ¥20 web页面如何打开Outlook 365的全球离线通讯簿功能
  • ¥15 io.jsonwebtoken.security.Keys