トップへ戻る | Cdrom || Color || Cursors || Display || Draw || Event || Examples || Font || Gfxdraw || Image || Joystick || Key || Locals || Mixer || Mouse || Movie || Music || Overlay || Pixelarray || Pygame || Rect || Scrap || Sndarray || Sprite || Surface || Surfarray || Tests || Time || Transform |
pygame.sprite.Sprite - 特定の画像をゲーム画面に表示するためのシンプルな基底クラス |
pygame.sprite.DirtySprite - 属性を増やして機能を追加した、Spriteのサブクラス。 |
pygame.sprite.Group - 複数のSpriteを保持するクラス |
pygame.sprite.RenderUpdates - 描写先範囲の情報を取得するGroupクラス |
pygame.sprite.OrderedUpdates - 追加された順番に従ってSpriteの画面描写を行うRenderUpdatesクラス |
pygame.sprite.LayeredUpdates - レイヤーを制御し、OrderedUpdatesのように画像描写処理を行うLayeredUpdates Groupクラス |
pygame.sprite.LayeredDirty - DirtySprites用のGroupです。これは LayeredUpdatesのサブクラスです。 |
pygame.sprite.GroupSingle - Spriteオブジェクトを一つだけ格納できるGroupです。 |
pygame.sprite.spritecollide - Groupが格納しているSpriteの中から、指定したSpriteと接触しているものを探します。 |
pygame.sprite.collide_rect - rect属性を使って二つのspriteの当たり判定を行います。 |
pygame.sprite.collide_rect_ratio - rectの大きさを指定した比率に変換したうえで、二つのspriteの当たり判定を調べます。 |
pygame.sprite.collide_circle - 円に変換した大きさを使って、二つのspriteの当たり判定を行います。 |
pygame.sprite.collide_circle_ratio - radius属性の大きさを指定した比率に変換したうえで、二つのspriteの当たり判定を調べます。 |
pygame.sprite.collide_mask - mask属性を使って二つのspriteの当たり判定を行います。 |
pygame.sprite.groupcollide - 二つの Group間で、接触している全てのSpriteを探します。 |
pygame.sprite.spritecollideany - 指定した Sprite が、Group内にあるSpriteのどれかと接触しているかを調べます。 |
pygame.sprite.spritecollideany - 指定した Sprite が、Group内にあるSpriteのどれかと接触しているかを調べます。 |
このモジュールにはゲームで使えるシンプルなクラスがいくつか含まれています。メインとなるSpriteクラスと、Spriteクラスを含んだ様々なGroupクラスがあります。Pygameのゲーム開発でこれらのクラスを使うかどうかは、あなたの自由です。これらのクラスは非常にコンパクトな作りとなっており、基本的な機能しか持っていませんが、大抵のゲームに流用できるようなプログラムコードとなっています。
ゲーム開発では、Spriteクラスは他のクラスの基底クラスとして使われるのを目的として作られています。単にspriteを格納するためのGroupという基底クラスも用意されてます。 ゲーム開発では、Spriteクラスを内部に持って特別にカスタマイズした、様々な種類のGroupクラスを作ることができます。
この基底Spriteクラスは、内部に格納した情報をSurfaceへ描写する機能を持っています。Group.draw命令を実行するには、格納している各SpriteオブジェクトにSurface.image属性と Surface.rect属性が設定されている必要があります。Group.clear 命令にも上記属性が設定されている必要があり、この命令を使うと背景を上書きして全てのSpriteの画像をクリアすることができます。他にも更なる拡張を加えたpygame.sprite.RenderUpdatesクラス と pygame.sprite.OrderedUpdatesクラスもあります。
最後に、このモジュールには様々は当たり判定機能があります。この機能を使うと、複数のgroupに格納されている各spriteが衝突していないか、rect範囲を基にして調べることができます。当たり判定を行うためには、SpriteオブジェクトにSurface.rect属性を設定しておく必要があります。
Groupクラスは、内部に保持するSpriteオブジェクトを削除したり追加したりして、より高度な処理を行えるように設計されています。Groupクラスを使うことで、対象のSpriteオブジェクトが既に内部に存在しているかどうかを簡単に調べることができます。Spriteオブジェクトは、複数のGroupクラスに追加することができます。 ゲーム開発では、これらのGroupオブジェクトを使って対象物の描写処理を行ったり、プレイヤーの操作とそれによって生じる内部処理をgroupごとに分けたりできます。Spriteクラスを継承する場合は新しい属性を定義せずに、同じgroupに所属する他のSpriteと同じ構造にするようにしてください。そうすることで、ゲーム中でのsprite走査処理が簡単になります。
add()命令やremove()命令を使って、GroupクラスにSpriteクラスを追加したり削除したりできます。これらの命令では一つもしくは複数のクラスをまとめて処理することができます。処理できる数はクラスの構造によります。また、これらのクラスで既定のコンストラクタを実行する際にも一つもしくは複数のクラスを引数として設定することもできます。設定できる数はコンストラクタの構造によります。Groupクラスに対して、同じSpriteクラスを繰り返し追加・削除しても特に問題はありません。
SpriteクラスやGroupクラスを継承せず新規にクラスを作成することも可能ですが、作ったクラスをSpriteやGroupに追加するのであれば、既存のクラスを継承することを強く勧めます。
Spriteクラスにはスレッドセーフ機能はありません。そのため、マルチスレッド環境で使う場合はSpriteクラスのロックを必ず行ってください。
Sprite.update - spriteクラスで行う処理を制御する命令です。 |
Sprite.add - GroupにSpriteを追加します。 |
Sprite.remove - GroupからSpriteを削除します。 |
Sprite.kill - 全てのGroupからSpriteを削除します。 |
Sprite.alive - spriteが1つ以上のgroupに属しているか調べます。 |
Sprite.groups - このSpriteが属しているGroupの一覧 |
特定の画像をゲーム画面に表示するためのシンプルな基底クラスです。このクラスを継承する場合は、 Sprite.update命令をオーバーライドして、 Sprite.image属性とSprite.rect属性を設定してください。コンストラクタ実行時には望む数のGroupインスタンスを引数として設定することができ、所属Groupとして追加されます。
このSpriteクラスを継承して使う場合は、Groupへ追加する前に必ず基底Spriteクラスの初期化処理を実行するようにしてください。
この命令は本来は何の処理も行いません。;自分で好きなように処理を定義できる、便利な"フック"なのです。引数に何を設定したかに関わらず、この命令はGroup.update命令実行時に自動的に呼び出されます。
所属するGroupでupdate()命令を使わないのであれば、この命令を使う必要はありません。
任意の数のGroupオブジェクトを引数として設定することができます。SpriteオブジェクトがそのGroupにまだ属していない場合に、SpriteオブジェクトはそのGroupに追加されます。
任意の数のGroupオブジェクトを引数として設定することができます。SpriteオブジェクトがそのGroupに属している場合に、SpriteオブジェクトはそのGroupから削除されます。
所属する全てのGroupからSpriteを削除します。所属情報以外のSpriteの情報については、一切変更されません。この命令を実行した後もSpriteオブジェクトは使い続けることはできますし、再度Groupに所属させることもできます。
Spriteが1つ以上のgroupに属している場合はTrueが戻り値として返ります。
このSpriteが所属している全てのGroup一覧を戻り値として返します。
DirtySpriteオブジェクトに追加された属性には、既定値が設定されています。:
dirty = 1
1が設定されている場合は、画面描写後に再び0が設定されます。 2が設定されている場合は、描写画像の更新が必要です。( 画面描写後もこのフラグは0にリセットされません) 0が設定されている場合は、描写画像画像の更新が必要ないという意味なので、画面描写は行われません。
blendmode = 0
これはコピー描写時のブレンドモードの設定に使われるspecial_flags 引数です
source_rect = None
source_rectは、self.imageを画面に表示する描写位置と関わってくるので 覚えておいてください。
visible = 1
通常は1が設定されており、0を設定した場合は画面に描写されません。 (you must set it dirty too to be erased from screen)
layer = 0
(参照のみに使う値です。このSpriteクラスがLayeredRenderGroupに追加された場合に使われます。 詳しくはLayeredRenderGroupの項目を参照してください)
Group.sprites - このGroupが保持するSpriteの一覧 |
Group.copy - Groupを複製する |
Group.add - このGroupにSpriteを追加する |
Group.remove - GroupからSpriteを削除します。 |
Group.has - 指定したSpriteがGroupに格納されているか調べます。 |
Group.update - 格納している各Spriteオブジェクトのupdate命令を実行します。 |
Group.draw - Spriteの持つ画像をコピー描写します |
Group.clear - Spriteの画像に背景を上書きします。 |
Group.empty - 全てのSpriteを削除します |
Spriteオブジェクトを格納するためのシンプルなクラスです。このクラスを継承して、格納するSpriteオブジェクトに対して具体的な処理を行うクラスを作成することができます。コンストラクタ実行時には、望む数のSpriteを引数に設定してこの Groupに追加できます。 Groupクラスでは、下記のPython標準操作をサポートしています。:
in 指定したSpriteオブジェクトを格納しているか調べます。 len 格納しているSpriteオブジェクトの数 bool Spriteオブジェクトを1つ以上格納しているか調べます。 iter 格納されている全てのSpriteオブジェクトを逐次参照します。
Groupクラスに格納されたSpriteオブジェクトは順番どおりに並んでいません。そのため、Spriteオブジェクトを画面描写したり逐次参照したりする順番は特に決まっていません。
このgroupが格納している全てのSpriteオブジェクトの一覧を戻り値として返します。iter命令を使った逐次参照を行うこともできますが、groupの編集を行っている間は逐次参照はできません。
このGroupが持つSpriteオブジェクトと、全て同じものを持つGroupオブジェクトを新規に作成します。 If you have subclassed Group, the new object will have the same (sub-)class as the original. This only works if the derived class's constructor takes the same arguments as the Group class's.
このGroupに任意の数のSpriteオブジェクトを追加します。まだGroupに格納されていないSpriteのみを追加できます。
引数には、Spriteオブジェクトのインテレーターを設定することもできます。
このGroupから任意の数のSpriteを削除します。既にGroupに格納されているSpriteのみを削除できます。
引数には、Spriteオブジェクトのインテレーターを設定することもできます。
引数に設定したspriteをGroupが全て格納していた場合、Trueが戻り値として返ります。これを使うと、"in"演算子を使ってGroupに格納されたSpriteを一つ一つ調べる時と同じ処理を行えます。("if sprite in group: ...")
引数には、Spriteオブジェクトのインテレーターを設定することもできます。
この Groupが格納している全てのSpriteのupdate()命令を実行します。基底Spriteクラスのupdate()命令には引数を設定できますが、特に何か処理をすることはありません。Group.updateに設定した引数は、格納するSpriteのupdate命令へそのまま渡されます。
Sprite.update命令から戻り値を取得する、といった使い方はできません。
格納する Sprite の画像を、引数として設定した Surface へ描写します。Sprite.image属性が描写する画像として使われ、Sprite.rect属性が画像の描写位置として使われます。
この Group はspriteを順番通りに管理しているわけではないので、描写はランダムな順番で行われます。
直近のGroup.draw命令で描写されたSpriteの画像を消去します。Spriteの画像の表示された位置を背景画像で上書きして塗り潰すことで、 描写先の Surface をクリアします。
ここで言う背景画像とは、普通は描写先Surfaceの該当位置に表示されている画像のことを指します。ですが、引数を二つ持つコールバック関数を独自に作成することもできます。;二つの引数とは、描写先Surfaceとその上書き範囲のことです。コールバック関数は画像クリアの度に複数回実行されます。
下記がSpriteの画像を赤一色で塗りつぶすコールバック関数の例です。:
def clear_callback(surf, rect): color = 255, 0, 0 surf.fill(color, rect)
RenderUpdates.draw - Spriteの画像のコピー描写を行い、描写先となった範囲の情報を取得します。 |
これはpygame.sprite.Groupの派生クラスです。draw()命令が拡張されており、画面上の描写先となった範囲の情報を取得できます。
格納している全てのSpriteの画像を指定surface上に描写します。Group.drawと同じ動きですが、この命令では画面上で描写が行われた範囲の一覧を戻り値として返します。Group.clear命令でクリアした範囲も描写先範囲に含まれるので、戻り値として取得されます。
戻り値として得られた Rect 値はpygame.display.update命令実行時に引数として設定するとよいでしょう。そうすることで、ソフトウェア駆動モードでのパフォーマンスが向上します。こうした画面更新の速度を向上させる手法は、描写先の背景が静止画の場合にのみ有効です。
これはpygame.sprite.RenderUpdatesの派生クラスです。追加された順番に従ってSpriteの画面描写を行います。通常のGroupに比べて、Spriteの追加や削除処理がやや遅くなります。
LayeredUpdates.add - 一つ、もしくは複数のspriteをgroupに追加します。 |
LayeredUpdates.sprites - spriteの一覧を戻り値として返します。(一覧の並び順は、最後列にあるspriteから始まり、最前列にあるspriteが最後になります)。 |
LayeredUpdates.draw - 引数に指定したsurfaceへ、格納する全てのspriteを順番に描写します。 |
LayeredUpdates.get_sprites_at - 指定した位置にある全てのspriteの一覧を戻り値として返します。 |
LayeredUpdates.get_sprite - 格納されたspriteの中から、idx引数に指定した配列位置にあるspriteを戻り値として返します。 |
LayeredUpdates.remove_sprites_of_layer - レイヤーから全てのspriteを削除し、その削除した一覧を戻り値として返します。 |
LayeredUpdates.layers - 設定されているレイヤーの一覧を戻り値として取得します(unique)。並び順は、最後列から最前列の順番になります。 |
LayeredUpdates.change_layer - spriteのレイヤーを変更します。 |
LayeredUpdates.get_layer_of_sprite - spriteが載っているレイヤーを戻り値として返します。 |
LayeredUpdates.get_top_layer - 最前列のレイヤーを戻り値として返します。 |
LayeredUpdates.get_bottom_layer - 最後列のレイヤーを戻り値として返します。 |
LayeredUpdates.move_to_front - 指定したspriteを最前列のレイヤーに移動させます。 |
LayeredUpdates.move_to_back - 指定したspriteを最後列のレイヤーに移動させます。 |
LayeredUpdates.get_top_sprite - 最前列のspriteを戻り値として返します。 |
LayeredUpdates.get_sprites_from_layer - レイヤーから全てのspriteを戻り値として返します。追加された順番がspriteの並び順となります。 |
LayeredUpdates.switch_layer - layer1 から layer2 へspritesを移動させます。 |
この group にもpygame.sprite.Spriteオブジェクトの追加・削除をすることができます。
kwargs 引数にキーワード 'default_layer'とレイヤー値を設定することで、既定となるレイヤー値を設定することができます。既定となるレイヤー値は0が設定されています。
格納したsprite にレイヤー属性が設定されていた場合は、そのレイヤー属性が使用されます。**kwarg引数の中に'layer'の文字が含まれていた場合は、引数に設定したspriteにはそのレイヤーが設定されます(sprite._layer 属性に上書きされます)。Spriteにlayer属性が設定されておらず、**kwarg引数も設定されなかった場合は、既定のレイヤーが設定されます。
このクラスはpygameバージョン1.8.0で新たに実装されました。
※sprite.layerは誤りのためsprite._layerに変更して訳しています。
sprite にレイヤー属性が設定されていた場合は、そのレイヤー属性が使用されます。**kwarg引数の中に'layer'の文字が含まれていた場合は、引数に設定したspriteにはその引数が設定されます(sprite._layer 属性に上書きされます)。**kwarg引数が設定されなかった場合は、既定のレイヤーが設定されます。
※sprite.layerは誤りのためsprite._layerに変更して訳しています。
最後列にあるspriteは一覧の最初に取得され、最前列にあるspriteは一覧の最後に取得されます。
idx引数に指定した値が格納しているsprite数の配列範囲外だった場合は、IndexOutOfBoundsエラーが発生します。
この命令を実行するためには、引数に指定するspriteがこのクラスに格納されていなければなりません。プログラム内部では、格納されているかのチェックは行われません。
指定したspriteが見つからなかった場合は、既定のレイヤーが戻り値として返ります。
spriteのレイヤーを最前列のレイヤーに変更し、前に移動させます(added at the end of that layer)。
Moves the sprite to the bottom layer, moving it behind all other layers and adding one additional layer.
レイヤーから全てのspriteを戻り値として返します。追加された順番がspriteの並び順となります。この命令では線形探索が使われ、取得したspriteがレイヤーから削除されることもありません。
この関数では、引数に指定したlayerの整合性チェックまでは行わないので、必ず定義済みのlayerを指定してください。
LayeredDirty.draw - 引数に指定したsurfaceへ、格納する全てのspriteを順番に描写します。 |
LayeredDirty.clear - 画面の塗りつぶしに使うbackground情報を設定します。 |
LayeredDirty.repaint_rect - 指定した範囲の再描写を行います。 |
LayeredDirty.set_clip - 描写可能領域を設定します。 None値を引数に設定すると、描写可能領域の設定が解除されます。(既定ではNone値が設定されています) |
LayeredDirty.get_clip - 描写可能領域を取得します。 |
LayeredDirty.change_layer - spriteのレイヤーを変更します。 |
LayeredDirty.set_timing_treshold - 閾値をミリ秒単位で設定します。 |
この group ではpygame.sprite.DirtySpriteクラスか、もしくは下記の属性を持つspriteクラス を格納することができます。:
image, rect, dirty, visible, blendmode (詳しくはDirtySpriteの項目を参照してください)。
この関数はdirtyフラグを使っているので、spriteクラスを常時大量に使う場合にはpygame.sprite.RenderUpdates関数よりも処理が速くなります。また、dirtyフラグを使った部分更新と通常の画面全体更新を必要に応じて切り替えるので、処理速度を気にする必要はありません。
このクラスはpygame.sprite.Groupクラスとほぼ同じ機能を持ちます。kwargs引数に任意の属性を設定することができます:
_use_update: TrueかFalseを設定します。既定では Falseが設定されています。 _default_layer: default layer where sprites without a layer are added. _time_threshold:部分更新モードと全体更新モードの切り替えにかかる限界時間です。既定では 1000./80 が設定されており、1000./(フレームレート)となります。
この命令はpygameのバージョン1.8.0で新たに実装されました。
この命令ではbackgroundの情報も設定することができます。 background情報が既に設定されている場合は、bgd引数で設定した値は無視されます。
この命令を実行するためには、引数に指定するspriteがこのクラスに格納されていなければなりません。プログラム内部では、格納されているかのチェックは行われません。
既定では1000./80が設定されています。この 80 とは、全体描写モードへの切り替えにかかるフレームレートです。
このクラスではSpriteオブジェクトを一つだけ格納できます。Spriteを新たに追加するたびに、格納されているSpriteは削除されます。
このGroupは、GroupSingle.spriteという内部に格納したSpriteを制御するための特殊なプロパティを持っています。空のGroupを作成する場合は引数にNoneを指定します。引数にSpriteを設定して、GroupSingleにSpriteを格納することもできます。
Groupが格納している全てのSpriteの中から、指定したSpriteと接触しているものの一覧を戻り値として返します。各SpriteのSprite.rect属性同士を比較して、接触しているどうかの判別を行います。
dokill引数にはbool型の値を設定します。Trueを設定した場合は、取得したSpriteの一覧はGroupから削除されます。
collided 引き数には、二つのspriteが接触しているかどうかを調べるコールバック関数を設定します。このコールバック関数は、spritesを二つ引数として設定でき、それらが接触しているどうかを示すbool型の戻り値を返すようにしてください。collided引数を設定しない場合は、sprite全てにその範囲を表すrect属性を設定するようにしてください。この関数では、spriteの持つrect属性を使って当たり判定を調べます。
collided引数に設定できるコールバック関数は以下のものです:
collide_rect, collide_rect_ratio, collide_circle, collide_circle_ratio, collide_mask
二つのspriteが接触しているかどうかを調べます。pygameのRect.colliderectを使って当たり判定の計算を行います。この関数は、spritecollideで当たり判定を調べるためのコールバック関数として使うことを目的に作られています。引数に使う Sprite には"rect" 属性が設されていなければなりません。
この命令はpygameのバージョン 1.8.0 で新たに実装されました。
rect属性の大きさを変換したうえで、二つのspriteの当たり判定を調べるためのコーラブルクラスです。
この関数の戻り値は、spritecollideで当たり判定を調べるためのコールバック関数として使うことを目的としています。
ratio引数には浮動少数値を設定します。 ratioが1.0ならば大きさは同じ、 2.0ならば大きさは2倍、0.5ならば大きさは半分となります。
この命令はpygameのバージョン 1.8.1 で新たに実装されました。
各spriteの中心を起点として円を作り、その円同士が重なるかを調べることによって当たり判定を行います。spritesが"radius"属性を持っていればそれを元にして円が作られます。それがない場合は、"rect"属性のサイズを完全に囲むことができる大きさの円が作成されます。この関数は、spritecollideで当たり判定を調べるためのコールバック関数として使うことを目的に作られています。引数に使う Sprite には"rect" 属性と、可能であれば"radius"属性が設定されていなければなりません。
この命令はpygameのバージョン 1.8.1 で新たに実装されました。
radius属性の大きさを指定した比率に変換したうえで、二つのspriteの当たり判定を調べるためのコーラブルクラスです。
この関数の戻り値は、spritecollideで当たり判定を調べるためのコールバック関数として使うことを目的としています。
radius引数には浮動少数値を設定します。radiusが1.0ならば大きさは同じ、 2.0ならば大きさは2倍、0.5ならば大きさは半分となります。
このコーラブルクラスでは、ratio引数に指定した比率で円の半径サイズを変更し、spriteを中心として円が重なっているかどうかを調べることによって当たり判定を調べます。spritesが"radius"属性を持っていればそれを元にして円が作られます。それがない場合は、"rect"属性のサイズを完全に囲むことができる大きさの円が作成されます。この関数の戻り値は、spritecollideで当たり判定を調べるためのコールバック関数として使うことを目的としています。引数に使う Sprite には"rect" 属性と"radius"属性が設定されていなければなりません。
この命令はpygameのバージョン 1.8.1 で新たに実装されました。
bitmaskが重なっているかどうかを調べることによって、二つのspriteの当たり判定を行います。spriteが "mask" 属性を持っていた場合はそれがマスクとして使われ、持っていない場合はspriteの画像を基にしてマスクが作成されます。この関数は、spritecollideで当たり判定を調べるためのコールバック関数として使うことを目的に作られています。引数に使う Sprite には"rect" 属性と"mask"属性が定義されていなければなりません。
この命令はpygameのバージョン 1.8.0 で新たに実装されました。
この関数では、二つのGroup内のSpriteが接触しているかどうかを調べます。 各SpriteのSprite.rect属性同士を比較して、接触しているかどうかの判別を行います。
Group1内のSpriteが戻り値として取得されます。取得された各Spriteには、それと接触しているgroup2内のSpriteの一覧が格納されています。
dokill1 引数かdokill2 引数に True が設定された場合は、該当するGroupからは取得したSpritesの一覧が削除されます。
補足
dokill2 引数にTrueを設定すると重複カウントがされなくなります。 Group1内の一つのSpriteに接触していると判定されれば、他のSpriteに接触していてもそこではカウントされません。 Spriteの削除は最後にまとめて行われるのではなく、接触判定時に合わせて行われているようです。 |
指定した Sprite が、Group内にあるSpriteのどれかと接触しているかどうかを調べます。各SpriteのSprite.rect属性同士を比較して、接触しているかどうかの判別を行います。
処理が単純なので、 pygame.sprite.spritecollide 命令よりも素早い当たり判定ができます。
指定した Sprite が、Group内にあるSpriteのどれかと接触しているかどうかを調べます。各SpriteのSprite.rect属性同士を比較して、接触しているかどうかの判別を行います。
処理が単純なので、 pygame.sprite.spritecollide 命令よりも素早い当たり判定ができます。
トップへ戻る | Cdrom || Color || Cursors || Display || Draw || Event || Examples || Font || Gfxdraw || Image || Joystick || Key || Locals || Mixer || Mouse || Movie || Music || Overlay || Pixelarray || Pygame || Rect || Scrap || Sndarray || Sprite || Surface || Surfarray || Tests || Time || Transform |