代码应该在岩石列表中的任何sprite与子弹精灵碰撞后产生一个临时的岩石精灵。目前,临时岩石不会产卵。当我运行程序来打印岩石列表的长度时,如果我射出一颗小行星,数字会增加,但是新的小行星不会产生。
class Rock(gameEngine.SuperSprite):
def __init__(self, scene):
gameEngine.SuperSprite.__init__(self, scene)
self.setImage("rock.gif")
self.reset()
def checkEvents(self):
self.rotateBy(self.rotSpeed)
def reset(self):
""" change attributes randomly """
self.hitOnce = False
#set random position
x = random.randint(0, self.screen.get_width())
y = random.randint(0, self.screen.get_height())
self.setPosition((x, y))
#set random size
scale = random.randint(20, 40)
self.scale = scale
self.setImage("rock.gif")
self.imageMaster = \
pygame.transform.scale(self.imageMaster, (scale, scale))
self.speed = random.randint(1,6)
self.angle = random.randint(0, 360)
self.setSpeed(self.speed)
self.setAngle(self.angle)
self.rotSpeed = random.randint(-5, 5)
class Game(gameEngine.Scene, gameEngine.SuperSprite):
def __init__(self):
gameEngine.Scene.__init__(self)
self.ship = Ship(self)
self.bullet = Bullet(self)
self.rocks = []
for i in range(10):
self.rocks.append(Rock(self))
self.score = -50
self.lives = 11
self.lblInfo = gameEngine.Label()
self.lblInfo.center = (175, 20)
self.lblInfo.size = (350, 30)
self.rockGroup = self.makeSpriteGroup(self.rocks)
self.addGroup(self.rockGroup)
self.sprites = [self.bullet, self.ship, self.lblInfo]
self.setCaption("asteroids")
def update(self):
rockHitShip = self.ship.collidesGroup(self.rocks)
if rockHitShip:
rockHitShip.reset()
self.lives -= 1
rockHitBullet = self.bullet.collidesGroup(self.rocks)
if rockHitBullet:
if rockHitBullet.scale >= 20:
rockHitBullet.setSpeed(rockHitBullet.speed * -1) #inverts the direction
rockHitBullet.imageMaster = \
pygame.transform.scale(rockHitBullet.imageMaster, (rockHitBullet.scale/2, rockHitBullet.scale/2))
self.tempRock = Rock(self)
self.tempRock.rect.center = rockHitBullet.rect.center
self.tempRock.dir = (rockHitBullet.dir - 90)
self.rocks.append(self.tempRock)
else:
rockHitBullet.reset()
self.bullet.reset()
self.score += 50
答案 0 :(得分:0)
问题最有可能在于:
self.tempRock = Rock(self)
self.tempRock.rect.center = rockHitBullet.rect.center
self.tempRock.dir = (rockHitBullet.dir - 90)
self.rocks.append(self.tempRock)
你正在创造一个新的岩石,设定位置和方向。然后将其添加到您的岩石列表中。所以你会看到岩石的数量增加,但你不会在屏幕上看到它,因为你可能正在使用rockGroup()绘制你的精灵。您可以在 init 中处理此问题,但不在更新方法中处理。 尝试将tempRock添加到rockGroup(),这应该可以解决问题。