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

pygame.draw.line绘制鱼线不随鱼漂移动更新问题求助

问题根源

你在实例化FishLine对象时,传入的(float.x, float.y)是实例创建时刻的鱼漂坐标快照,属于值传递,后续鱼漂的x/y属性更新后,FishLine实例中存储的self.float_pos仍为初始的旧值,不会自动同步,因此鱼线不会跟随鱼漂移动。

修复方案(推荐第一种)

方案1:动态读取鱼漂坐标(更易维护)

修改FishLine类的逻辑,初始化时传入鱼漂实例本身而非固定坐标,每次绘制鱼线时实时读取当前鱼漂坐标:

class FishLine():
    def __init__(self, GameDisplay, color, fishingrod_end, float_obj, lineThickness):
        self.GameDisplay = GameDisplay
        self.color = color
        self.fishingrod_end = fishingrod_end
        self.float_obj = float_obj # 存储鱼漂实例的引用
        self.lineThickness = lineThickness

    def draw(self):
        # 每次绘制时获取最新的鱼漂坐标
        current_float_pos = (self.float_obj.x, self.float_obj.y)
        pygame.draw.line(self.GameDisplay, self.color, self.fishingrod_end, current_float_pos, self.lineThickness)

对应修改实例化代码即可:

# 注意不要用类名作为实例名,避免覆盖类定义,这里修改为fish_line
fish_line = FishLine(gameDisplay, red, (383, 230), float, 6)

同时记得修改draw()函数里的鱼线绘制调用为fish_line.draw()。

方案2:手动同步坐标

如果不想修改FishLine类结构,可以在主循环的鱼漂移动逻辑结束后,手动更新鱼线的坐标属性:

if not Game_Paused and AtTheRiver:
    if keys[pygame.K_a] :
        float.x -= float.vel
    if keys[pygame.K_d] :
        float.x += float.vel
    if keys[pygame.K_s] :
        float.y += float.vel
    if keys[pygame.K_w] :
        float.y -= float.vel
    # 新增一行,手动同步鱼漂坐标到鱼线实例
    FishLine.float_pos = (float.x, float.y)

额外注意

你当前的代码存在实例名和类名重名的问题:FishLine = FishLine(...),这种写法会覆盖原本的FishLine类定义,后续如果要创建新的鱼线实例会报错,建议统一使用小写蛇形命名法命名实例,比如fish_line。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 07:06:00