【Pygame 学习笔记】8.精灵

术语“精灵”是旧计算机和游戏机的保留。这些较旧的盒子无法以足够快的速度绘制和擦除普通图形,使其无法用作游戏。这些机器有特殊的硬件来处理需要快速动画的游戏对象。这些对象被称为“精灵”并有特殊的限制,但可以非常快速地绘制和更新。它们通常存在于视频中的特殊覆盖缓冲区中。这些天来,计算机已经变得足够快,可以在没有专用硬件的情况下处理类似精灵的对象。sprite 一词仍然用于表示 2D 游戏中的任何动画。

这一篇学习笔记,我们来学习精灵,首先给出基础框架代码

import pygame
from pygame.locals import *
import sys

class Game:
    def __init__(self):
        pygame.init()
        self.W,self.H=800,800
        self.screen=pygame.display.set_mode((self.W,self.H))
        pygame.display.set_caption("【Pygame 学习笔记】")

    def listen(self):
        for event in pygame.event.get():
            if event.type==QUIT:
                sys.exit()

    def draw(self):
        self.screen.fill((255,255,255))

    def run(self):
        while True:
            self.listen()
            self.draw()
            pygame.display.update()

if __name__ == '__main__':
    game=Game()
    game.run()

 给出需要的资源文件:

balloon.png


我们来写一个源源不断有气球从屏幕顶端往下落的程序,首先,我们将balloon.png放置于python文件同目录下的resources文件夹,resources文件夹可以用来储存资源文件,然后定义一个类Balloon,继承自pygame.sprite.Sprite,初始化中进行超类初始化

class Balloon(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()

然后继续在初始化方法中创建self.image变量用于储存气球的图片,将图片导入并缩小到50x50的大小,self.rect变量储存该精灵的位置,self.speed表示下落的速度,在程序开头导入random,import random as rd,然后使用随机库的生成随机整数方法,随机生成x坐标,底部y坐标为窗口顶部

注意,这里的self.image和self.rect变量名不可以改成其它名字,因为这两个变量是在pygame的Sprite类中定义的,我们只是重写为自己想要的内容,并且在之后我们要讲到的将精灵绘制到窗口的操作都和这两个变量息息相关,所以这里的self.image和self.rect存储的必须是图像和它对应的rect对象

        self.image=pygame.transform.smoothscale(pygame.image.load("resources/balloon.png"),(50,50))
        self.rect=self.image.get_rec
<think>嗯,用户想了解pygame.QUIT事件的使用方法和应用场景。结合站内引用,我需要系统整理相关知识点。回顾引用内容:引用[1]展示了基础的事件循环结构,其中pygame.QUIT用于处理窗口关闭事件。引用[2][4]提到事件模拟,但pygame.QUIT通常不建议主动模拟。引用[3]详细展示了完整的事件类型判断流程。用户可能刚接触Pygame事件机制,需要明确三点:1触发时机:pygame.QUIT仅在用户点击窗口关闭按钮时由系统生成2必要操作:必须在此事件中执行退出操作(pygame.quit()+exit())3位置要求:必须放在事件循环最前部确保能及时响应特别注意技术细节:-使用for循环处理pygame.event.get()是效率更高的方式(如引用[1])-不能省略sys.exit(),否则进程可能无法完全终止(Win系统常见问题)-在调用pygame.quit()前保存数据是常见使用场景考虑到用户可能是初学者,示例代码将保持最简结构,但补充必要注释。同时需强调常见错误:比如把退出事件和其他事件顺序写反,或者忘记调用exit()。关于应用场景,除游戏退出外,补充两个实用案例:1退出前自动存档(如引用未提及可创造性补充)2多窗口程序中关闭子窗口时不退出主程序(需配合状态标志位)最后生成的三个问题覆盖了事件循环优化、退出清理操作和多窗口处理,都是实际开发中的高频痛点。</think> ### `pygame.QUIT`事件详解 `pygame.QUIT`是Pygame中处理程序退出的核心事件,通常在用户点击窗口关闭按钮时触发。以下是具体使用方法和场景: --- #### **基本语法** ```python import pygame pygame.init() screen = pygame.display.set_mode((800, 600)) # 主循环 running = True while running: # 遍历事件队列 for event in pygame.event.get(): if event.type == pygame.QUIT: # 检测关闭事件 running = False # 终止主循环 # 其他游戏逻辑(渲染、更新等) pygame.display.flip() # 退出Pygame pygame.quit() ``` --- #### **关键特性** 1. **触发条件** 当用户点击窗口关闭按钮(`X`)时,系统自动生成`pygame.QUIT`事件[^1][^3]。 2. **必要操作** 必须在事件中调用`pygame.quit()`释放资源,并终止程序(例如`sys.exit()`)[^1]。 > ⚠️ 仅设置`running=False`不会退出进程,需额外终止程序。 3. **事件队列位置** 必须在循环中优先检测`QUIT`事件,避免其他事件阻塞退出响应[^3]。 --- #### **高级场景** 1. **主动触发退出** 可通过模拟事件强制退出(不推荐常规使用): ```python quit_event = pygame.event.Event(pygame.QUIT) # 创建QUIT事件 pygame.event.post(quit_event) # 加入事件队列[^2][^4] ``` 2. **退出前保存数据** 在触发`QUIT`后执行资源保存: ```python if event.type == pygame.QUIT: save_game_data() # 自定义保存函数 running = False ``` --- #### **典型错误** ```python # 错误:未完全退出进程 if event.type == pygame.QUIT: pygame.quit() # 仅释放Pygame资源,进程仍在运行 ``` **正确做法**: ```python if event.type == pygame.QUIT: pygame.quit() # 释放资源 sys.exit() # 终止进程 ``` --- #### **应用场景** - 游戏/应用退出流程控制 - 退出前自动保存进度 - 多窗口程序中关闭主窗口时销毁子窗口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值