Pygame小行星产卵问题

时间:2016-11-18 00:43:59

标签: pygame

代码应该在岩石列表中的任何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

1 个答案:

答案 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(),这应该可以解决问题。

相关问题