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

无法为列表中每个Pipe对象修改Rect的X坐标问题求助

问题分析与解决
  • 报错核心原因:你循环的pipes是Pipe类的实例列表,循环变量i是一个个Pipe对象,并非整数,自然无法和100执行乘法运算,这就是'Pipe' and 'int'不支持相乘的根源。
  • 你改成range(pipes)后没问题,说明此时你把pipes换成了管道数量的整数(比如原来的列表改成了数字3),range(3)会生成0、1、2这类整数,能正常和100做乘法。

正确写法分两种场景:

场景1:基于管道列表的索引做X轴偏移

如果pipes是管道实例列表,需要遍历列表的索引来计算偏移:

def draw(self):
    # 用enumerate同时拿到索引和管道实例(实例不用的话也可以只拿索引)
    for idx, _ in enumerate(pipes):
        self.top_rect = pygame.draw.rect(
            DISPLAYSURF, YELLOW, 
            (self.__x + (idx * 100), (self.__y - self.__h) - 185, self.__w, self.__h),
        )

或者直接遍历列表长度生成的索引:

def draw(self):
    for idx in range(len(pipes)):
        self.top_rect = pygame.draw.rect(
            DISPLAYSURF, YELLOW, 
            (self.__x + (idx * 100), (self.__y - self.__h) - 185, self.__w, self.__h),
        )

场景2:让每个管道实例自带独立X坐标

更合理的设计是给每个Pipe实例分配专属的x属性,不用在draw方法里统一计算偏移:

# 初始化时给每个管道设置不同的x值
pipes = [Pipe(x=100 * i) for i in range(3)]

# draw方法直接使用实例自身的x属性
def draw(self):
    for pipe in pipes:
        self.top_rect = pygame.draw.rect(
            DISPLAYSURF, YELLOW, 
            (pipe.x, (self.__y - self.__h) - 185, self.__w, self.__h),
        )

本质上你是混淆了「管道实例对象」和「用来计算偏移的数字索引/数量」,循环拿到的是管道对象而非数字,这就是你忽略的关键问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:20:38