为何PyGame代码触发操作数错误?点击鼠标游戏崩溃
PyGame弓箭发射功能崩溃的解决方法
错误根源
触发操作数错误的核心问题在这行代码:
self.last_shot = pygame.time.get_ticks
你没有调用get_ticks()函数,而是将函数本身赋值给了self.last_shot。后续执行冷却判断时,pygame.time.get_ticks() - self.last_shot是用整数时间戳减去函数对象,类型不兼容直接导致游戏崩溃。
修复步骤
- 修正时间戳赋值:给
get_ticks加上括号,调用函数获取正确的时间戳:
self.last_shot = pygame.time.get_ticks()
- 补充发射状态重置逻辑:当前代码设置
self.fired = True后没有重置逻辑,点击一次后无法再次发射,需添加鼠标释放判断:
# 重置发射状态(鼠标左键释放时) if not pygame.mouse.get_pressed()[0]: self.fired = False
修复后的完整update方法
def update(self, player): shot_cooldown = 250 arrow = None self.rect.center = player.rect.center pos = pygame.mouse.get_pos() x_dist = pos[0] - self.rect.centerx y_dist = -(pos[1] - self.rect.centery) self.angle = math.degrees(math.atan2(y_dist, x_dist)) # mouse clicks if pygame.mouse.get_pressed()[0] and self.fired == False and (pygame.time.get_ticks() - self.last_shot) >= shot_cooldown: arrow = Arrow(self.arrow_image, self.rect.centerx, self.rect.centery, self.angle) self.fired = True self.last_shot = pygame.time.get_ticks() # 重置发射状态 if not pygame.mouse.get_pressed()[0]: self.fired = False
内容的提问来源于stack exchange,提问作者Coding_Newbie
相关产品推荐
相关产品推荐

