2017-02-01 16 views
-2

PyGameを使用して、スペースインベーダースタイルのゲームでエイリアンのスプライトグループを作成しました。PyGame - 同時に多くのスプライトを移動するには?

私の質問は、どうして私はエイリアンを同時に動かすことができますか?エイリアンの各インスタンスはリストに格納されます。

+0

動きを必要とします"その後、あなたは最初から始まります。ループ(mainloop)でそれを繰り返すと、同時にすべてのエイリアンが動くように見えます。 – furas

+0

BTW:エイリアンに 'update()'関数があり、 'grp = pygame.sprite.Group'に保存されている場合、' grp.update()のみが必要です。 – furas

答えて

1

リストから小さな「ステップ」ですべてのエイリアンを移動してください。その後、あなたは最初から始まります。ループ(mainloop)でそれを繰り返すと、同時にすべてのエイリアンが動くように見えます。

# mainloop 

while True: 

    # events 
    # .... 

    # updates 

    for aline in aliens_group: 
     alien.rect.x += 1 # small move 
     # or 
     alien.update() # function have to do small move 

    # draws 
    # ... 

ところで:エイリアンが機能update()を持つことになりますし、あなたがpygame.sprite.Groupでエイリアンを続けるならば、あなたは小さな「ステップと、リスト1対1からすべての外国人のみgroup.update()

class Alien: 

    def update(self): 
     self.rect.x += 1 # small move 

# init 

aliens_group = pygame.sprite.Group() 

alien_1 = Alien() 
alien_2 = Alien() 

aliens_group.app(alien_1, alien_2) 

# mainloop 

while True: 

    # events 
    # .... 

    # updates 

    aliens_group.update() # function have to do small move 

    # draws 

    aliens_group.draw() 
+0

素敵な仕事:)あなたのコードはきちんとしており、記述的です。私が助言する唯一のものは、私の答えの要点である 'map'関数です。反復の使用ははるかに遅いです。どのような場合でも 'map'関数は良い習慣です:)全体的にあなたのコードはよく見えます:D –

+0

@CoolqB' pygame.sprite.Group() 'は' map'よりも優れています – furas

+0

よろしくお願いします。コードを取る?私は私の時を過ごし、それは... 0.0秒:P 私はcProfileを使用しました。 :) –

-1

あなたがmap機能を使用することができ、リスト内のエイリアンの位置を持っていると仮定するとOK:

aliens = [[0,0],[5,9],[5,2]] # Three aliens in list, these are their X,Y coords. 

def move_alien_right(alien): 
    alien[0] += 1 
    return alien 

aliens = list(map(move_alien_right,aliens)) 

print(aliens) 

map機能は非常に高速ですので、あなたがエイリアンの大規模なグループを持っている場合、それは非常にうまく動作するはずです。

ありがとうございました:

+0

リスト内の各エイリアンのrect値を持っています。だからこれはまだ動作しますか? –

+0

Pygame rect?もしそうなら絶対に私は私の答えを編集することができます:) –

+0

なぜdownvote? –

関連する問題