2016-06-29 10 views
0

私はスペースインベーダーのクローンでPython 2.7とpygameを使って作業しています。私は戦車を動かすことができます、弾丸と外国船は、衝突の検出がうまく動作するように削除されます。私はスプライトグループを作りました。私はこのグループを使ってすべての船を1つに移動できることを願っていました。 私も "unionall"を試しましたが、これはグループではうまくいかないようです。 私はこのようなすべての船舶をループすることができます:私は船の境界を見つけたい。このようにスプライトのグループを1つに移動する

shipXpos = [] 
for ship in shipList: 
    shipXpos.append(ship.rect.x) 

その後、

shipXMax = max(shipXpos) 
shipXMin = min(shipXpos) 

(私はrect.rightとrect.leftを推測するが、私は船の方向を変更することができるように画面の場合エッジに比べて良いだろう)。

私がすべてのスプライトを一番簡単な方法で扱うことができたと思われます。

私はこれが意味を持ち、明らかであることを望みます。ありがとうございました。

+0

"動き"タグの説明には "DO NOT USE - ambiguous"と表示されています。本当に使いたいですか?それはあいまいかもしれない、イモ:) –

答えて

0

エイリアン船のSpriteクラスには、エイリアン船を移動するupdate関数を記述します。現在の方向(左または右など)に必要なパラメータを渡すことができます。次に、メインプログラムでpygame.sprite.Group.update()を使用して、すべてのスプライトを一度に更新します。

目的の動作に応じて、画面の側面を確認する必要がない場合があります。私はあなたが一斉にすべてのエイリアン船を移動したいと考えています。つまり、最も外側に当たっていれば、すべての船が方向を変えたいと思っています。一番外側の船が破壊されても、元の宇宙の侵略者はこれを行います。つまり、残りの船は外縁に移動せず、あらかじめ定義された経路にとどまります。その場合、すべての船は左に移動する前に一定数のピクセルを右に移動し、update機能でそのループを追跡するだけで済みます。

+0

それは感謝しますあなたに感謝します。私は実際にはやや異なったやり方でそれをやっていました。私はすべての船の最大と最小のx位置を見つける関数を書いた。だから私は現在の船リストを関数に渡し、最大と最小の位置を返しました。これらは、船の方向と結合して、現在の位置に基づいて次の移動を決定するifステートメントに入力されました。ありがとうございました。また、私は元のゲームがそれをしたことを知らなかった。素晴らしいお返事ありがとうございました。 – alfo35x

関連する問題