You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame横版平台游戏单矩形批量检测多矩形碰撞的实现方法

核心错误原因

pygame.Rect.colliderect()方法仅支持接收单个矩形对象作为参数,你直接传入存储了多个Rect的ground_rect列表,不符合API的参数要求,因此触发类型错误。同时pygame.draw.rect()方法也仅支持绘制单个矩形,直接传入列表同样会报错。

修正方案

你用列表存储所有平台矩形的思路是完全正确的,只需要调整碰撞检测和绘制的逻辑,遍历列表中的每个矩形进行操作即可。后续新增平台仅需要往ground_rect列表追加元素即可,不需要额外修改逻辑,完全适配多平台场景。

修改后的核心代码段

仅需要替换原代码中碰撞检测和绘制的相关部分即可:

# !!Collision!!
    for i in range(10):
        # 遍历所有平台逐个检测碰撞
        for platform in ground_rect:
            if player_rect.colliderect(platform):
                player_y -= 1
                player_y_velocity = 0.5
                coyote = 4
                player_rect = pygame.Rect(player_x, player_y, 32, 32)
    # Draw stuff (pic is a function I made to shorten the blit)
    pic(player_img, player_x, player_y)
    # 遍历绘制所有平台
    for platform in ground_rect:
        pygame.draw.rect(screen, (64, 0, 0), platform)

更简洁的碰撞检测写法

Pygame内置了collidelist()方法,可以直接传入矩形列表,返回第一个和玩家碰撞的平台索引,没有碰撞则返回-1,代码更简洁:

# !!Collision!!
    for i in range(10):
        collision_idx = player_rect.collidelist(ground_rect)
        if collision_idx != -1:
            player_y -= 1
            player_y_velocity = 0.5
            coyote = 4
            player_rect = pygame.Rect(player_x, player_y, 32, 32)

内容的提问来源于stack exchange,提问作者Plide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:45:01