我正在用python和tkinter为一个比赛做游戏。到目前为止,一切进展顺利,因为我有动作,还有投篮。。。不错的射击。我能创造子弹并把它们朝我想要的方向移动。但是,当它们离开屏幕时,我想删除它们。这是我遇到麻烦的部分。下面是我的射击代码(鼠标左键绑定)和我的移动代码:
def shoot(self,e):
theplayer=self.find_withtag("player")
bullet=self.create_image([self.coords(theplayer)],image=self.playerUp,tag="bullet")
self.bullets.append(bullet)
def movebullet(self):
for bullet in self.bullets:
x1,x2,y1,y2=self.bbox(bullet)
if x1>1200:
self.move(bullet,14,0)
else:
self.delete(bullet)
我以为删除代码可以工作,但它给了我一个错误,它说: 1英寸,1英寸,2英寸=自我.bbox(bullet)TypeError:“NoneType”对象不可读取
我不知道这意味着什么,而且射击实际上不适用于这个。然而,在我删除子弹之前,它起作用了。我真的很感谢任何人的帮助。 谢谢
没有看到你的代码自删除()方法和self是其实例的类声明的代码,很难判断到底是什么错误。在
我猜,您正在删除已移到屏幕外的项目符号的实例对象,但您并没有从列表bullets[]中删除它,所以下次调用movebullet(self)时,它会遍历自我。子弹当它试图移动的时候会掉下来 现在不存在的子弹。在
尝试:
当您看到
'NoneType' object is not iterable
时,这意味着您正在尝试迭代具有值None
的内容:您不能迭代单个值None
。在在
x1,x2,y1,y2=self.bbox(bullet)
语句中,您正在迭代self.bbox(bullet)
的结果,在某些情况下,该函数显然返回None
。在对函数返回的内容进行任何操作之前,您需要获取该函数的值并检查它是否为not None
,例如将其拆分为单独的变量。在例如,您可能希望将代码更改为:
可能发生的情况是,当一个项目符号第一次从屏幕上消失时,你可以很好地删除它,但是你忘了从项目列表中删除它。下次迭代项目符号列表时,列表中有一些项目已被删除。在
解决方法应该很简单:当你删除一个项目符号时,你会想把它从列表中删除。在
相关问题 更多 >
编程相关推荐