为何Button类is_pressed方法返回None?预期返回2-10的随机整数
你的is_pressed方法只有在三个条件全部满足时才会返回2-10的随机整数,其他任何情况都没有显式返回值——Python中函数默认会返回None,这就是self.deleteTime一直为None的原因。
触发返回值的三个必要条件:
- 鼠标位置命中按钮的矩形区域:
self.rect.collidepoint(pos)为True - 鼠标左键处于按下状态:
pressed[0]为True(pygame中pressed数组索引0对应左键) - 按钮的
actionID参数等于1:self.id == 1
只要其中一个条件不满足,方法就不会执行return self.newTime语句,最终返回默认的None。
修复方案
给方法添加默认返回逻辑,确保所有分支都有返回值。比如可以返回上一次生成的newTime,或者指定一个默认值:
def is_pressed(self, pos, pressed): if self.rect.collidepoint(pos) and pressed[0] and self.id == 1: self.newTime = random.randint(2, 10) print(self.newTime) return self.newTime # 不满足条件时,返回已有的newTime或默认值 return getattr(self, 'newTime', None)
或者如果不需要保留历史值,也可以直接返回一个默认整数:
def is_pressed(self, pos, pressed): if self.rect.collidepoint(pos) and pressed[0] and self.id == 1: self.newTime = random.randint(2, 10) print(self.newTime) return self.newTime return 0 # 替换为你期望的默认值
额外检查项
- 确认
mousePos是pygame.mouse.get_pos()获取的窗口内坐标,而非其他转换后的坐标 - 确认
mousePressed是pygame.mouse.get_pressed()返回的持续状态数组,而非单次点击事件的状态 - 检查
buttonGrow实例初始化时传入的actionID确实为1
内容的提问来源于stack exchange,提问作者Sadra
相关产品推荐
相关产品推荐

