python - 一旦玩家与它发生碰撞,如何从屏幕上删除矩形对象?
问题描述
在 draw()
函数中,当玩家 pos = 敌人 pos 但“del”不起作用时,我试图删除 rect 对象。有什么方法可以完全删除敌人的对象?是否有内置的 pygame 函数来删除我不知道的对象?
# draw player
def draw():
enemy = pygame.draw.rect(screen, enemy_color, (enemy_x, enemy_y, 25, 25))
player = pygame.draw.rect(screen, player_color, (player_x, player_y, 25, 25))
# if the player is over the enemy then delete the enemy
if player_x == enemy_x and player_y == enemy_y:
# this does not work
del enemy
解决方案
您不能“删除”在 Surface 上绘制的内容。Surface 仅包含按行和列组织的一堆像素。如果要“删除”矩形,则不能绘制它。
创建pygame.Rect
并进行碰撞之前测试。例如:
def draw():
enemy_rect = pygame.Rect(enemy_x, enemy_y, 25, 25)
player_rect = pygame.Rect(player_x, player_y, 25, 25)
if player_rect.colliderect(enemy_rect):
# create new enemy
# [...]
else:
enemy = pygame.draw.rect(screen, enemy_color, enemy_rect)
player = pygame.draw.rect(screen, player_color, player_rect)
无论如何,我建议使用pygame.sprite.Sprite
以pygame.sprite.Group
. pygame.sprite.Sprite.kill
从所有组中删除 Sprite。
推荐阅读
- php - 未定义的偏移量:1 使用复选框
- spring - 在 Spring Boot 中为 REST API 使用 Jersey 而不是 Spring MVC 有什么好处?
- linux - 如何在 Redhat 上根据磁盘名称区分闪存盘
- ubuntu - snap-installed slack 在 xfce 面板中不显示图标
- javascript - 如何在javascript中将元素从一个数组复制到另一个数组?
- swift4 - 如何在swift 4中用所有大写字母分隔单词
- react-native - 您请求的体验使用 Expo SDK v(null),但此 Expo Client 副本至少需要 v23.0.0
- amazon-redshift - Redshift 创建没有基表的视图
- java-8 - 如何为 Java 8 并行流指定 ForkJoinPool?
- vb.net - 如何将字节写入数组,写入特定位置 vb.net