0

我使用迭代的代码,我不断收到错误。不知道为什么它正在做什么。我是这种编程的新手,并且在我创建的游戏中使用它。我也不熟悉这个网站,所以请多多包涵。此代码将显示爆炸。当它逐步浏览爆炸的图像时,一切都很好,直到它结束,我得到这个错误:

Traceback (most recent call last):
  File "C:\Users\Steve\Desktop\Project April\Alien Metor Storm v1_4\AlienMetorStorm.py", line 560, in <module>
    main()
  File "C:\Users\Steve\Desktop\Project April\Alien Metor Storm v1_4\AlienMetorStorm.py", line 222, in main
    ships.update()
  File "C:\Python31\lib\site-packages\pygame\sprite.py", line 399, in update
    for s in self.sprites(): s.update(*args)
  File "C:\Users\Steve\Desktop\Project April\Alien Metor Storm v1_4\explosion.py", line 26, in update
    self.image = next(self.image_iter)
StopIteration

这是代码:

import pygame

class Explosion(pygame.sprite.Sprite):
    def __init__(self,color,x,y):
        pygame.sprite.Sprite.__init__(self)
        self.frame = 0
        self.width = 0
        self.height = 0
        self.x_change = 0
        self.y_change = 0
        self.images = []
        for i in range (0,25):
            img = pygame.image.load('Explosion'+str(i)+'.png').convert()
            img.set_colorkey([0,0,0])
            self.images.append(img)
        self.image = self.images[0]
        self.image_iter = iter(self.images)
        self.rect = self.image.get_rect()
        self.rect.left = x
        self.rect.top = y

    def update(self):
        self.image = next(self.image_iter)

在这里的任何帮助将不胜感激!

4

2 回答 2

4

StopIteration是迭代器耗尽时引发的异常。您可以像任何其他异常一样捕获它:

def update(self):
     try:
         self.image = next(self.image_iter)
     except StopIteration:
         pass #move on, explosion is over ...

或者,next内置函数允许您通过传递第二个参数在迭代耗尽时返回一些特殊的东西:

def update(self):
    self.image = next(self.image_iter,None)
    if self.image is None:
        pass #move on, explosion is over ...
于 2013-03-19T02:08:22.930 回答
0

我不确定您到底想做update什么,但这是您可以使用的生成器版本,因此您不需要外部迭代器

def update(self):
    for image in self.images:
        self.image = image
        yield

或者如果你想永远迭代

def update(self):
    while True:
        for image in self.images:
            self.image = image
            yield
于 2013-03-19T02:37:29.727 回答