[英]Pygame Snake Game
好的,这是我第一次访问这个网站,所以我希望我能做到这一点。
我在Pygame做一个蛇游戏,用于学校评估任务,我有一个问题。 我无法让蛇的身体部位消失。
目前,这是身体部位的生成方式:
def more_body(bodyparts, x, y, z):
body = pygame.sprite.Sprite()
body.image = pygame.image.load('body.png')
body.rect = head.image.get_rect()
body.rect.right = x
body.rect.top = y
body.timeleft = z
bodyparts.add(body)
身体删除检查,就像这样工作。
for x in bodyparts:
body.timeleft -= 1
if body.timeleft == 0:
body = False
很明显,Bodyparts是身体部位的分组。 这是一个OrderedUpdates精灵组。
问题是代码似乎不喜欢这个解决方案。 目前,错误列为“NameError:name'body'未定义”。 如果我尝试扩展它,检查引用bodyparts.body.timeleft而不是body.timeleft,我改为“AttributeError:'OrderedUpdates'对象没有属性'body'”。
我想出了第二个解决方案。 由于bodyparts是OrderedUpdates组,因此应该可以根据列表中的位置选择和删除特定的部分。 因此,计划的步骤如下:
我的主要问题是:
这是一个可行的解决方案,你能提供代码吗? 我可以像对待列表一样对待它,并将其拆分,以便丢弃bodyparts组的前面(或后面,取决于它们的添加方式)吗? 你能提供的任何解决方案都会有很大的帮助。
for x in bodyparts:
body.timeleft -= 1
if body.timeleft == 0:
body = False
在这里,您遍历精灵组,将每个精灵存储在变量x
。 您永远不会定义body
,因此会引发异常。
即使你这样做,将body
设置为False
也不会神奇地从精灵组中删除精灵。 为此,请使用remove
方法。
所以你应该把你的循环改为:
for body in bodyparts:
body.timeleft -= 1
if body.timeleft == 0:
bodyparts.remove(body)
您也可以使用简单列表,而不是使用精灵组,并在元素过大时删除元素:
max_len = 4 # current max length of snake
bodyparts = []
def more_body(bodyparts, x, y, z):
body = ...
bodyparts.append(body)
bodyparts=bodyparts[-max_len:]
此外,您应该只加载一次图像'body.png'
并重复使用它,而不是每次都加载它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.