コードは、岩石リスト内のスプライトが弾丸スプライトと衝突した後、一時的な岩石スプライトを生成すると考えられています。現在、一時的な岩石は産卵しません。私が岩石のリストの長さを印刷するプログラムを実行すると、小惑星を撮影するとその数は増えますが、新しいものは産卵しません。Pygame小惑星産卵の問題
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
SOのコードの書式を正しく設定するには、 '{}'ボタンを使用します。 – furas
実行時にエラーメッセージが表示されますか?問題の**完全な**メッセージ(トレースバック)を表示してください。 – furas
古い方法: 'print()'を使って変数の値と実行されるコードの部分を見ます。この方法で問題を見つけることができます。 (またはデバッガの使い方を学んでください) – furas