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

Pygame按下上键触发跳跃时报float对象不可下标错误如何解决?

错误原因

报错TypeError: 'float' object is not subscriptable是因为你定义的MeltingSnowman.update方法期望接收的参数是键盘输入状态数组,但你在main函数里调用all_sprites.update(mt)时,传入的是时间差mt(float类型),导致update方法内尝试用[]下标读取float类型的值触发了报错。

修复步骤
  • 第一步:在main函数的while循环内,调用精灵组update之前,先获取键盘输入状态
# 放在mt = clock.tick(100) / 1000 之后即可
userInput = pygame.key.get_pressed()
  • 第二步:修改all_sprites.update的传参,同时传入键盘输入和时间差两个参数
all_sprites.update(userInput, mt)
  • 第三步:修改MeltingSnowman.update方法的参数列表,兼容两个传入参数,同时在update内调用run方法处理动画逻辑
def update(self, userInput, mt):
    if self.SM_jump:
        self.jump()

    if self.walk_index >= 10:
        self.walk_index = 0

    if userInput[pygame.K_UP] and not self.SM_jump:
        self.SM_jump = True
    elif userInput[pygame.K_DOWN] and not self.SM_jump:
        self.SM_jump = False
    elif not (self.SM_jump or userInput[pygame.K_DOWN]):
        self.SM_jump = False
    # 新增调用run方法处理动画切换
    self.run(mt)
  • 第四步:删除jump方法中无意义的类属性修改代码,你已经通过self.rect.y控制角色位置,直接删除以下两行即可,避免位置逻辑冲突
MeltingSnowman.SnowMan_Y = 100
MeltingSnowman.SnowMan_Y = 400
  • 第五步:调整画面绘制顺序,先画背景再画精灵,避免背景盖住角色,将main函数内的背景绘制代码挪到all_sprites.draw之前:
# 先绘制背景
Background(BG01, BG01_x, 0)
Background(BG02, BG02_x, 0)
# 再绘制精灵
all_sprites.draw(SCREEN)
pygame.display.update()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:24:01