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

Pygame中Enemy类draw方法调用报错:缺少Win参数求助

Pygame Enemy.draw() 参数错误排查与解决

错误原因分析

你的代码存在两个关键问题:

1. 实例方法调用方式错误

你在主循环中直接通过Enemy.draw(Win)调用类的方法,但draw是实例方法,它的第一个参数默认是实例本身(self)。当你用类直接调用时,Python会把传入的Win当作self,此时方法还需要第二个参数Win,自然会报缺少参数的错误。

同时你创建的Enemy(0, 0)实例没有被保存,相当于每帧创建一个临时敌人就丢弃了,根本没用到它。

2. draw方法的语法错误

draw方法里的Win.blit( enemy_img ( self.x , self.y ) )是错误的:enemy_img是你加载并缩放好的Surface对象,不是函数,不能加括号调用。blit的正确语法是Win.blit(表面对象, (x, y))。


修复步骤

步骤1:修正实例调用方式

在主循环中,先把Enemy实例保存到变量,再用实例调用draw方法:

# 替换主循环里的这两行
# Enemy( 0 , 0 )
# Enemy.draw( Win )

enemy = Enemy(0, 0)
enemy.draw(Win)

步骤2:修复draw方法的语法错误

修改Enemy类的draw方法:

def draw(self, Win):
    # 去掉enemy_img后面的括号,把位置作为第二个参数传给blit
    Win.blit(enemy_img, (self.x, self.y))

进阶优化:保留多个敌人(可选)

如果你想生成多个敌人并持续存在,建议用列表存储敌人实例,每帧遍历更新:

# 在主循环外初始化敌人列表
enemies = []

# 主循环内
# 可以控制生成逻辑,比如每隔几帧生成一个敌人
enemies.append(Enemy(0, 0))

# 遍历所有敌人,执行移动和绘制
for enemy in enemies:
    enemy.move()
    enemy.draw(Win)

修复后的完整Enemy类与主循环关键代码

# Enemy Class
class Enemy:
    def __init__(self, x, y): 
        self.x = x
        self.y = y

    def move(self):
        fpx = self.x - PlayerPos[0]
        fpy = self.y - PlayerPos[1]
        fpxx = fpx * (-1)
        fpyy = fpy * (-1)
        fp = [fpx, fpy]

        if fp[0] > PlayerPos[0] and fpxx < 0:
            fp[0] = fp[0] * (-1)

        if fp[0] > 10 or fp[0] < -10 :
            self.x = self.x + (fp[0]) ^0 * enemy_speed

        if fp[1] > PlayerPos[1] and fpyy < 0:
            fp[1] = fp[1] * (-1)

        if fp[1] > 10 or fp[1] < -10 :
            self.y = self.y + (fp[1]) ^0 * enemy_speed

    def draw(self, Win):
        Win.blit(enemy_img, (self.x, self.y))

##### main loop #####
Running = True
# 初始化敌人列表
enemies = []
while Running:
    Win.fill((39, 188, 39))

    # ... 其他事件处理、玩家移动代码保持不变 ...

    player()

    # 添加敌人并更新
    enemies.append(Enemy(0, 0))
    for enemy in enemies:
        enemy.move()
        enemy.draw(Win)

    pygame.display.update()
    clock.tick(60)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:06:17