2016-11-18 9 views
0

コードは、岩石リスト内のスプライトが弾丸スプライトと衝突した後、一時的な岩石スプライトを生成すると考えられています。現在、一時的な岩石は産卵しません。私が岩石のリストの長さを印刷するプログラムを実行すると、小惑星を撮影するとその数は増えますが、新しいものは産卵しません。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 
+0

SOのコードの書式を正しく設定するには、 '{}'ボタンを使用します。 – furas

+0

実行時にエラーメッセージが表示されますか?問題の**完全な**メッセージ(トレースバック)を表示してください。 – furas

+0

古い方法: 'print()'を使って変数の値と実行されるコードの部分を見ます。この方法で問題を見つけることができます。 (またはデバッガの使い方を学んでください) – furas

答えて

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()に追加しようとすると、そのトリックを行う必要があります。

+0

'self.rockGroup.add(self.tempRock)' –

+0

@Seanに追加する必要があります。それはそうする方法でしょう。 – thebergh

関連する問題