python-pygame精灵组使用示例

前言

在使用pygame进行游戏开发和学习时,Sprite精灵和精灵组是非常常用的模块,本文提供一个非常简单的使用精灵组的例子,在学习精灵组使用时中可快速入门。其中重要的信息全部在注释中写出,因此文中不再赘述。

代码

"""
精灵测试
"""
import pygame
from random import randint
from sys import exit
from pygame.locals import *

SCREEN_WIDTH = 480
SCREEN_HEIGHT = 640


# 继承Sprite精灵类
class Player(pygame.sprite.Sprite):
    # 构造函数
    def __init__(self, init_position):
        pygame.sprite.Sprite.__init__(self)  # 父类构造函数
        '''精灵图片:加载图片(1)或者绘制(2)'''
        # 方法(1)
        # self.image = pygame.image.load('resources/images/enemy.png')
        # 方法(2)
        self.image = pygame.Surface([10, 20])  # 绘制大小
        self.image.fill((0, 0, 0))  # 填充颜色
        self.rect = self.image.get_rect()
        self.rect.topleft = init_position
        self.speed = 1

    # 每个精灵组执行update,组内所有精灵都会update
    def update(self):
        self.rect.top = self.rect.top + self.speed
        if self.rect.top > SCREEN_HEIGHT:
            self.kill()


# 初始化pygame
pygame.init()
# 初始化窗口
screen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])
# 窗口标题
pygame.display.set_caption('精灵类测试')
# 建立精灵组
group = pygame.sprite.Group()

# 主循环
while True:
    # 绘制背景
    screen.fill((255, 255, 255))
    # 往精灵组添加精灵
    group.add(
        Player(
            (randint(0, SCREEN_WIDTH), randint(0, SCREEN_HEIGHT))
        )
    )
    # 更新精灵组
    group.update()
    # 绘制精灵组
    group.draw(screen)
    # 界面更新
    pygame.display.update()
    # 退出
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            exit()

结果

在这里插入图片描述

稍稍改进

更改简介

运行起来就会发现,上面循环速度太快了,不利于观察不说,还闪眼-_- ,这里可以增加一个时钟对象控制刷新频率。
改变两个地方即可:
主循环外创建时钟对象:

# 创建时钟对象(可控制游戏循环频率)
clock = pygame.time.Clock()

主循环内使用时钟对象控制刷新频率:

    # 通过时钟对象指定循环频率(每秒60次)
    clock.tick(60)

更改后的完整代码

"""
精灵测试
"""
import pygame
from random import randint
from sys import exit
from pygame.locals import *

SCREEN_WIDTH = 480
SCREEN_HEIGHT = 640


# 继承Sprite精灵类
class Player(pygame.sprite.Sprite):
    # 构造函数
    def __init__(self, init_position):
        pygame.sprite.Sprite.__init__(self)  # 父类构造函数
        '''精灵图片:加载图片(1)或者绘制(2)'''
        # 方法(1)
        # self.image = pygame.image.load('resources/images/enemy.png')
        # 方法(2)
        self.image = pygame.Surface([10, 20])  # 绘制大小
        self.image.fill((0, 0, 0))  # 填充颜色
        self.rect = self.image.get_rect()
        self.rect.topleft = init_position
        self.speed = 1

    # 每个精灵组执行update,组内所有精灵都会update
    def update(self):
        self.rect.top = self.rect.top + self.speed
        if self.rect.top > SCREEN_HEIGHT:
            self.kill()


# 初始化pygame
pygame.init()
# 初始化窗口
screen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])
# 窗口标题
pygame.display.set_caption('精灵类测试')
# 建立精灵组
group = pygame.sprite.Group()
# 创建时钟对象(可控制游戏循环频率)
clock = pygame.time.Clock()
# 主循环
while True:
    # 通过时钟对象指定循环频率(每秒60次)
    clock.tick(60)
    # 绘制背景
    screen.fill((255, 255, 255))
    # 往精灵组添加精灵
    group.add(
        Player(
            (randint(0, SCREEN_WIDTH), randint(0, SCREEN_HEIGHT))
        )
    )
    # 更新精灵组
    group.update()
    # 绘制精灵组
    group.draw(screen)
    # 界面更新
    pygame.display.update()
    # 退出
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            exit()

更改后的结果

在这里插入图片描述

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值