2016-11-22 2 views
0

灰色と緑色のブロックの間に赤色のブロックを表示する方法。上記画像自分のゲームに合わせて座標を正しく設定する方法

enter image description here

私は私がない場合、私は灰色ブロックの下に隠れるよ手段赤いブロックを見ることができ、次いで160にロバの私の長方形のx位置を変更しました。

これは私がRace_carクラスに正常に動作赤いブロックをコメントした後、自分のコードを実行すると、

enter image description here

を参照してくださいので、事は、私が表示したいです私のコード

class Road(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.Surface((200, 500)) 
     self.image.fill(grey) 
     self.rect = self.image.get_rect() 
     self.rect.centerx = width/2 
     #self.rect.left = width-200 
     #print self.rect.left 
     self.speedy = 5 
    def update(self): 
     self.rect.y += self.speedy 
     if self.rect.y > 0: 
      self.rect.y = 0 

class Donkey(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.Surface((100, 100)) 
     self.image.fill(red) 
     self.rect = self.image.get_rect() 
     self.rect.x = 200 
     print 'x:',self.rect.x 
     self.rect.y = -54 
     print 'y:',self.rect.y 
     self.speedy = random.randint(8,10) 
    def update(self): 
     self.choice = (200, 300) 
     self.rect.y += self.speedy 
     if self.rect.top > height: 
      self.rect.x = random.choice(self.choice) 
      print 'x:', self.rect.x 
      self.rect.y = random.randrange(-100, -40) 
      print 'y', self.rect.y 
      self.speedy = random.randint(8,10) 

class Race_car(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.Surface((100, 100)) 
     self.image.fill(green) 
     self.rect = self.image.get_rect() 
     self.rect.x = 200 
     self.rect.bottom = height 
     self.speedy = -0.1 
    def update(self): 
     #self.speedx = 0 
     self.rect.y += self.speedy 
     keypressed = pygame.key.get_pressed() 
     if keypressed[pygame.K_RIGHT]: 
      self.rect.x = 300 
     elif keypressed[pygame.K_LEFT]: 
      self.rect.x = 200 


#Group, object for game_hearth 
game_hearth = pygame.sprite.Group() 
road = Road() 
game_hearth.add(road) 

#Group, object for donkey 
donkey = Donkey() 
donkeys = pygame.sprite.Group() 
game_hearth.add(donkey) 
donkeys.add(donkey) 

#Group, object for racecar 
racecar = Race_car() 
racecars = pygame.sprite.Group() 
game_hearth.add(racecar) 
racecars.add(racecar) 

です灰色の道路の上の赤と緑のブロック。私のプログラムのどのクラスにもコメントすることなくそれを行う方法。私はいくつかの調整ミスを知っていますが、私はそれをどこで変更するのか分かりません。 Pygame docsから

+0

コード全体へのリンクを投稿できますか? – Jovito

+0

[link] https://gist.github.com/karthicbz/72d5a5b29edb6f082c96abe67c7b91a4 – pkarthicbz

+0

@Jovito私のリンクを掲載しました – pkarthicbz

答えて

1

グループは、任意の順序でスプライトを保持しませんので、描画順は 任意です。

おそらくpygame.sprite.OrderedUpdatesに切り替える必要があります。

このクラスはpygame.sprite.RenderUpdates(から派生)。レンダリングのためにスプライトがグループに追加された順序を に維持します。 これにより、グループからのスプライトの追加と削除が通常のグループより少し遅い になります。

#Group, object for game_hearth 
game_hearth = pygame.sprite.OrderedUpdates() 

road = Road() 
game_hearth.add(road) 

#Group, object for donkey 
donkey = Donkey() 
donkeys = pygame.sprite.OrderedUpdates() 
game_hearth.add(donkey) 
donkeys.add(donkey) 

#Group, object for racecar 
racecar = Race_car() 
racecars = pygame.sprite.OrderedUpdates() 
game_hearth.add(racecar) 
racecars.add(racecar) 
関連する問題