pygame.draw.rect未起作用(外星人入侵,点击空格子弹没有显示)

本文探讨了在制作pygame小游戏时,如何解决子弹绘制被主屏幕填充覆盖的问题。关键在于调整更新屏幕的顺序,确保子弹绘制在填充背景之前,以确保子弹可见。
部署运行你感兴趣的模型镜像

问题描述:

在实现pygame 的外星人入侵小游戏的时候,点击攻击按钮发现子弹并未出现。灵感来源:在查阅问题时,发现有一位网友遇到的问题是绘制的矩形没有显示出来,文章给出的答案是被主屏幕填充时候给覆盖了。

https://www.cnpython.com/qa/485551

    def draw_bullet(self):
        """在屏幕上绘制子弹"""
        pygame.draw.rect(self.screen, self.color, self.rect)

原因分析:在更新主屏幕(填充screen)的时候,将原本应该显示的子弹给覆盖了


解决方案:

应将填充screen放在更新子弹和飞船的前面进行
如:

    def update_screen(ai_settings, screen, ship, bullets):
    """"更新屏幕上的图像,并切换到新屏幕"""
    # 每次循环都重新绘制屏幕
    screen.fill(ai_settings.bg_color)
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    ship.blitme()
    # 让最近绘制的屏幕可见
    pygame.display.flip()

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

`pygame.Rect` 和 `pygame.draw.rect` 在 Pygame 库中有着不同的用途。 ### `pygame.Rect` `pygame.Rect` 是一个类,用于创建和管理矩形区域。它可以用来表示游戏中各种元素的边界框,例如角色、障碍物等。`pygame.Rect` 提供了一系列方法来操作矩形,如移动、缩放、合并等。以下是一些常用方法及其作用: - `copy()`:拷贝一个 `Rect` 对象[^1]。 - `move()`:移动 `Rect` 对象[^1]。 - `move_ip()`:原地移动 `Rect` 对象[^1]。 - `inflate()`:放大和缩小 `Rect` 对象的尺寸[^1]。 - `inflate_ip()`:原地放大和缩小 `Rect` 对象的尺寸[^1]。 - `clamp()`:将一个 `Rect` 对象移动到另一个 `Rect` 对象的中心[^1]。 - `clamp_ip()`:原地将一个 `Rect` 对象移动到另一个 `Rect` 对象的中心[^1]。 创建 `pygame.Rect` 对象的语法为:`Rect(left, top, width, height)`,其中 `left` 指的是距离左边界面的距离,`top` 指的是距离上边的距离,`width` 和 `height` 指的是矩形的宽度与高度[^3]。 示例代码如下: ```python import pygame pygame.init() # 创建一个 Rect 对象 rect = pygame.Rect(100, 100, 200, 150) # 移动 Rect 对象 new_rect = rect.move(50, 50) pygame.quit() ``` ### `pygame.draw.rect` `pygame.draw.rect` 是一个函数,用于在 Pygame 的屏幕上绘制矩形。它接受一个 `Surface` 对象、颜色、`Rect` 对象以及可选的线条宽度作为参数,然后在指定的 `Surface` 上绘制矩形。 示例代码如下: ```python import pygame pygame.init() screen = pygame.display.set_mode((800, 600)) # 创建一个 Rect 对象 rect = pygame.Rect(100, 100, 200, 150) # 绘制矩形 pygame.draw.rect(screen, (255, 0, 0), rect) pygame.display.flip() running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygame.quit() ``` ### 区别总结 - `pygame.Rect` 是一个类,用于创建和管理矩形的属性和位置,不涉及图形的绘制;而 `pygame.draw.rect` 是一个函数,用于在屏幕上绘制矩形图形。 - `pygame.Rect` 提供了丰富的方法来操作矩形,如移动、缩放等;`pygame.draw.rect` 主要用于将矩形图形显示在屏幕上。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值