PyGameを使用して、スペースインベーダースタイルのゲームでエイリアンのスプライトグループを作成しました。PyGame - 同時に多くのスプライトを移動するには?
私の質問は、どうして私はエイリアンを同時に動かすことができますか?エイリアンの各インスタンスはリストに格納されます。
PyGameを使用して、スペースインベーダースタイルのゲームでエイリアンのスプライトグループを作成しました。PyGame - 同時に多くのスプライトを移動するには?
私の質問は、どうして私はエイリアンを同時に動かすことができますか?エイリアンの各インスタンスはリストに格納されます。
リストから小さな「ステップ」ですべてのエイリアンを移動してください。その後、あなたは最初から始まります。ループ(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()
素敵な仕事:)あなたのコードはきちんとしており、記述的です。私が助言する唯一のものは、私の答えの要点である 'map'関数です。反復の使用ははるかに遅いです。どのような場合でも 'map'関数は良い習慣です:)全体的にあなたのコードはよく見えます:D –
@CoolqB' pygame.sprite.Group() 'は' map'よりも優れています – furas
よろしくお願いします。コードを取る?私は私の時を過ごし、それは... 0.0秒:P 私はcProfileを使用しました。 :) –
あなたが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
機能は非常に高速ですので、あなたがエイリアンの大規模なグループを持っている場合、それは非常にうまく動作するはずです。
ありがとうございました:
リスト内の各エイリアンのrect値を持っています。だからこれはまだ動作しますか? –
Pygame rect?もしそうなら絶対に私は私の答えを編集することができます:) –
なぜdownvote? –
動きを必要とします"その後、あなたは最初から始まります。ループ(mainloop)でそれを繰り返すと、同時にすべてのエイリアンが動くように見えます。 – furas
BTW:エイリアンに 'update()'関数があり、 'grp = pygame.sprite.Group'に保存されている場合、' grp.update()のみが必要です。 – furas