Pygame中Sprite的使用方法6-4

本文介绍了如何在Pygame中利用Sprite类实现一个游戏功能,玩家通过鼠标控制蓝色方块,与绿色和红色方块碰撞计分。通过派生Sprite类定义方块,随机生成并管理不同颜色的方块,以及检测和处理碰撞事件。
摘要由CSDN通过智能技术生成

判断两个或多个Sprite图形是否相撞也是在Pygame中经常要完成的。接下来我们通过编程实现如下功能,鼠标控制一个蓝色方块去触碰其他方块,要触碰的方块有两种颜色,红色和绿色,当鼠标控制的蓝色方块碰到绿色方块,则分数加1,碰到红色方块则分数减1,如图1和图2所示。

图1 程序界面

图2 分数显示

以上功能可以通过Pygame的Sprite类的碰撞检测实现。

1 定义Sprite派生类

首先定义Sprite派生类Block,Block表示程序中的方块,代码如下所示。

class Block(pygame.sprite.Sprite):
    def __init__(self, color, width, height):
        super().__init__()
        self.image = pygame.Surface((width, height))
        self.image.fill(color)
        self.rect = self.image.get_rect()

其中,Block类的__init__()方法的color参数表示方块的颜色,width和height表示方块的宽度和高度。在__init__()方法中首先调用父类也就是Sprite类的__init__()方法;之后通过pygame.Surface()方法创建方块;接下来调用fill()方法为方块填充颜色;最后通过get_rect()获取方块的位置。

相关链接1 pygame.sprite.Sprite类的使用,请参考

Pygame中Sprite类的使用3_棉猴的博客-CSDN博客

2 创建三种颜色方块

通过创建Block类的实例来创建三种颜色的方块。

2.1 创建绿色方块

假设绿色方块有50个,创建绿色方块的代码如下所示。

for i in range(50):
    block = Block(GREEN, 20 ,15)
    block.rect.x = random.randrange(screen_width)
    block.rect.y = random.randrange(screen_height)
    block_list.add(block)
    all_sprites_list.add(block)

其中block即为Bloct类的实例,通过random.randrange()方法随机设置绿色方块的位置,之后把创建的绿色方法添加到block_list和all_sprites_list中。以上两个变量的类型是pygame.sprite.Group类的实例,分别用来保存所有绿色方块和所有三种颜色的方块。

相关链接2 pygame.sprite.Group类的使用,请参考

Pygame中Sprite类的使用3_棉猴的博客-CSDN博客

2.2 创建红色方块

假设红色方块有10个,创建红色方块的代码如下所示。

for i in range(10):
    block = Block(RED, 20 ,15)
    block.rect.x = random.randrange(screen_width)
    block.rect.y = random.randrange(screen_height)
    block_bad_list.add(block)
    all_sprites_list.add(block)

其中,block_bad_list是pygame.sprite.Group类的实例,将创建的红色方块分别保存到block_bad_list和all_sprites_list中。

2.3 创建蓝色方块

蓝色方块表示鼠标,只需要创建1个即可,其代码如下所示。

player = Block(BLUE, 20, 15)
all_sprites_list.add(player)

将蓝色方块player保存到all_sprites_list中。

`pygame`的`Sprite`模块是用于处理游戏精灵(game sprites)的基本类,它是Pygame用来组织可重复使用的图像对象的工具。`Sprite`类主要用于管理游戏的多个对象,如角色、敌人、道具等,它们共享相同的行为和更新逻辑。 以下是一些主要的`Sprite`模块函数和概念: 1. **Sprite类**: - `__init__(self, group=None)`:初始化方法,创建一个新的精灵并将其添加到给定的组(group,默认为None,表示不加入任何组。 - `image` 和 `rect` 属性:分别代表精灵的图像以及其对应的矩形区域。 - `update(self, *args, **kwargs)`:精灵的主要更新方法,一般在这里处理碰撞检测、移动等逻辑。 - `blit(self, dest, src=dest)` 或 `draw()`:绘制精灵到另一个表面或当前位置。 2. **Group类**: - `Surface` 类型的属性 `images` 和 `sprites`:分别存储了所有精灵的图像列表和实际的精灵对象列表。 - `add(sprite)`:将精灵添加到组。 - `remove(sprite)`:从组移除精灵。 - `collidepoint(x, y)`:检查某个点是否与组内的精灵有重叠。 - `colliderect(rect)`:检查某个矩形区域是否与组内的精灵有重叠。 使用示例: ```python import pygame from pygame.sprite import Sprite # 初始化Pygame pygame.init() # 创建一个精灵组 player_group = pygame.sprite.Group() class Player(Sprite): def __init__(self, x, y): super().__init__() # 继承自Sprite self.image = pygame.Surface((50, 50)) # 设置精灵的尺寸和图像 self.rect = self.image.get_rect() # 获取精灵的矩形区域 self.rect.center = (x, y) # 将精灵放置在指定位置 def update(self): # 在这里编写精灵的动作更新逻辑 pass # 创建玩家实例并加入组 player = Player(100, 100) player_group.add(player) # 游戏主循环 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() player_group.update() # 更新精灵组 screen.fill((0, 0, 0)) player_group.draw(screen) # 在屏幕上绘制所有精灵 pygame.display.flip() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值