【pygame】スプライトクラス

スプライトクラス

pygame.sprite.Sprite は、ビジュアル ゲームのオブジェクトの基本クラスです。

属性: スプライト(*グループ) -> スプライト

Sprite クラスを使用して新しいクラスを派生する場合、Sprite.image プロパティと Sprite.rect プロパティを割り当て、Sprite.update() メソッドを追加する必要があります。イニシャライザは、任意の数のグループ インスタンスを追加できます。Sprite クラスをサブクラス化するときは、Sprite クラスをグループに追加する前に、基本初期化子が呼び出されていることを確認してください。例えば:

class Block(pygame.sprite.Sprite):
 
    # 构造函数。传入图块的颜色和x,y位置。
    def __init__(self, color, width, height):
       # 调用父类 (Sprite) 构造函数
       pygame.sprite.Sprite.__init__(self)
 
       # 创建一个图块并填色,或加载image
       self.image = pygame.Surface([width, height])
       self.image.fill(color)
 
       # 获取有图像尺寸的Rect形对象
       # 通过设定rect.x和rect.y来更新对象的位置
       self.rect = self.image.get_rect()

スプライトの動作を制御する pygame.sprite.Sprite.update() メソッド

update(*args, **kwargs) -> なし

このメソッドのデフォルトの実行アクションは何もありません。これは簡単に書き換えられる「フック」です。このメソッドは Group.update() によって呼び出されます。【Group.update()のパラメータは自由に設定可能】
グループクラス内で同名のメソッドを使用しない場合は、このメソッドを使用する必要はありません。

pygame.sprite.Sprite.add() グループにスプライトを追加します

add(*groups) -> なし

任意の数のグループ インスタンスをパラメータとして渡すことができます。エルフは、まだメンバーになっていないグループに追加されます。

pygame.sprite.Sprite.remove() はグループからスプライトを削除します

delete(*groups) -> なし 任意
の数のグループ インスタンスを引数として渡すことができます。エルフは、現在属しているグループから削除されます。

pygame.sprite.Sprite.kill() はすべてのグループからスプライトを削除します

kill() -> なし
スプライトは、それを含むすべてのグループから削除されます。これによってスプライトの状態は変更されません。このメソッドを呼び出した後は、グループへの追加など、スプライトの操作を続けることができます。

pygame.sprite.Sprite.alive() は、スプライトがいずれかのグループに属しているかどうかを決定します

live() -> bool
スプライトが 1 つ以上のグループに属している場合に True を返します。

pygame.sprite.Sprite.groups() このスプライトを含むグループのリストを取得します

groups() -> group_list

このスプライトを含むすべてのグループのリストを返します。

pygame.sprite.DirtySprite は、より多くのプロパティと機能を備えたスプライト クラスのサブクラスです。

DirtySprite(*グループ) -> DirtySprite

追加の DirtySprite プロパティとそのデフォルト値:

ダーティ = 1
1 に設定されている場合は再描画し、再度 0 に設定します

2 に設定すると、常にダーティになります (フレームごとに再描画され、フラグはリセットされません)。

0 は汚れていないため再塗装されないことを意味します

Blendmode = 0 blit、ブレンドモードの特別なフラグパラメータ
source_rect =
使用するソース四角形はなし、self.imaged の topleft(0,0) を基準に

visible = 1
通常は 1、0 に設定すると再描画されません (画面から削除するにはダーティに設定する必要があります)

layer = 0
読み取り専用値、LayeredDirty に追加すると読み取り可能 (詳細については LayeredDirty のドキュメントを参照)

pygame.sprite.Group は、複数のスプライト オブジェクトを保存および管理するために使用されるコンテナ クラスです。

グループ(*スプライト) -> グループ

単純なスプライト オブジェクトのコンテナー。このクラスを継承して、より具体的な動作を持つコンテナを作成できます。コンストラクターは、グループ クラスに追加する任意の数のスプライト引数を受け入れます。このクラスのセットは、次の標準的な Python 操作をサポートします。

スプライトが含まれているかどうかのテストで

lenに含まれるスプライトの数

bool はスプライトが含まれているかどうかをテストします

iter はすべてのスプライトを走査します

グループ クラスのスプライトには順序がないため、スプライトの描画と反復に特定の順序はありません。

pygame.sprite.Group.sprites() このグループクラスに含まれるスプライトのリスト

スプライト() -> スプライト_リスト

このグループ クラスに含まれるすべてのスプライトのリストを返します。イテレータはグループ クラスから取得することもできますが、グループ クラスが変更された場合、グループ クラスに対してイテレータ操作を実行することはできません。

pygame.sprite.Group.copy() グループクラスのコピー

copy() -> グループ

元のグループ クラスと同じスプライトを持つ新しいグループ クラスを作成します。サブクラス グループ クラスがある場合、新しいオブジェクトは元のオブジェクトと同じ (サブ) クラスを持ちます。これは、派生クラスのコンストラクターがグループ クラスと同じパラメーターを取る場合にのみ機能します。

pygame.sprite.Group.add() このグループ クラスにスプライトを追加します

add(*スプライト) -> なし

任意の数のエルフをこのグループに追加します。このメソッドは、まだメンバーになっていないグループ クラスにスプライトのみを追加します。
各スプライト パラメータは、スプライトを含むイテレータにすることもできます。

pygame.sprite.Group.remove() はグループクラスからスプライトを削除します

削除(*スプライト) -> なし

グループから任意の数のスプライトを削除しても、すでにグループ クラスのメンバーであるスプライトのみが削除されます。
各スプライト パラメータは、スプライトを含むイテレータにすることもできます。

pygame.sprite.Group.has() は、グループ クラスにスプライトが含まれているかどうかをテストします。

has(*スプライト) -> ブール値

グループ クラスに指定されたすべてのスプライトが含まれている場合は True を返します。これは、グループ クラスで "in" 演算子 ("if sprite in Group:...") を使用して、単一のスプライトがグループに属しているかどうかをテストするのと似ています。
各スプライト パラメータは、スプライトを含むイテレータにすることもできます。

pygame.sprite.Group.update() は、含まれているスプライトの update メソッドを呼び出します。

update(*args, **kwargs) -> なし

グループ クラス内のすべてのスプライトで update() メソッドを呼び出します。基本 Sprite クラスには、任意の数の引数を受け入れますが、操作は実行しない update() メソッドがあります。Group.update() に渡されたパラメータは各スプライトに渡されます。
Sprite.update() メソッドから戻り値を取得できません。

pygame.sprite.Group.draw() ビットブロック転送スプライト画像

描画(サーフェス) -> なし

含まれているスプライトを Surface パラメータに描画します。Sprite.image プロパティと Sprite.rect プロパティをソース サーフェスのプロパティとして使用します。
グループクラスはスプライトを任意の順序で保存しないため、描画順序は任意です。

pygame.sprite.Group.clear() はスプライト上に背景を描画します (オーバーレイします)。

クリア(Surface_dest, 背景) -> なし

Group.draw() を使用して最後に描画されたスプライトを削除します。描画されたスプライトの位置を背景で埋めることによって、ターゲットのサーフェスをクリアします。
通常、背景はターゲット サーフェスと同じ寸法のサーフェス イメージです。ただし、2 つのパラメーター (ターゲット サーフェスとクリアされる領域) を持つコールバック関数にすることもできます。バックグラウンド コールバック関数は、クリアするたびに複数回呼び出されます。以下は、赤一色のスプライトをクリアするコールバックの例です。

def clear_callback(surf, rect):
    color = 255, 0, 0
    surf.fill(color, rect)

pygame.sprite.Group.empty() はすべてのスプライトを削除します

empty() -> None は、
このグループからすべてのスプライトを削除します。

pygame.sprite.RenderPlain

機能: pygame.sprite.Group と同等。このクラスは、pygame.sprite.Group() のエイリアスです。余分な機能はありません。

pygame.sprite.RenderClear

機能: pygame.sprite.Group と同等。このクラスは、pygame.sprite.Group() のエイリアスです。余分な機能はありません。

ダーティ アップデートを追跡するグループ クラス pygame.sprite.RenderUpdates のサブクラス。

プロパティ:RenderUpdates(*スプライト) -> RenderUpdates

このクラスは pygame.sprite.Group() から派生します。画面の変化する領域を追跡するための拡張されたdraw() メソッドがあります。

pygame.sprite.RenderUpdates.draw() ビットブリックのスプライト画像と変更された領域の追跡

描画(表面) -> Rect_list

すべてのスプライトを Surface に描画します。Group.draw() と同等です。このメソッドは、画面上で変更された長方形領域のリストも返します。返される変更には、以前の Group.clear() 呼び出しの影響を受ける画面の領域が含まれます。
返された Rect リストは pygame.display.update() に渡されます。これは、ソフトウェア主導の表示モードでのパフォーマンスの向上に役立ちます。このタイプの更新は通常、アニメーション化されていない背景を持つターゲットにのみ役立ちます。

pygame.sprite.OrderedUpdates() RenderUpdates サブクラス。追加された順序でスプライトを描画します。

プロパティ:OrderedUpdates(*spites) -> OrderedUpdates

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

pygame.sprite.LayeredUpdates レイヤー クラス

LayeredUpdates は、[OrderedUpdates と同様に] レイヤーと描画を処理するスプライト グループです。

プロパティ:LayeredUpdates(*spites, **kwargs) -> LayeredUpdates

このグループは、pygame.sprite.Sprite と完全な互換性があります。
デフォルトのレイヤーは、「default_layer」または整数を使用して kwargs 経由で設定できます。デフォルトのレイヤーは 0 です。

追加したスプライトに属性レイヤーがある場合は、そのレイヤーが使用されます。kwarg に「layer」が含まれている場合、渡されたスプライトはそのレイヤーに追加されます (sprite.layer プロパティをオーバーライドします)。スプライトに属性レイヤーもクワーグもない場合は、デフォルトのレイヤーを使用してスプライトを追加します。

pygame 1.8の新機能。

pygame.sprite.LayeredUpdates.add() は、スプライトまたはスプライト シーケンスをグループに追加します

属性: add(*sprites, **kwargs) -> なし

スプライトに属性レイヤーがある場合、その属性レイヤーがそのレイヤーに使用されます。**kwargs に「layer」が含まれている場合、スプライトがそのパラメータに追加されます (スプライト レイヤーのプロパティをオーバーライドします)。どちらも合格しない場合、スプライトはデフォルトのレイヤーに追加されます。

pygame.sprite.LayeredUpdates.sprites() は、スプライトの順序付きリスト (最初が下に、最後が上) を返します。

プロパティ: sprites() -> スプライト

pygame.sprite.LayeredUpdates.draw()

機能: 渡されたサーフェス上のすべてのスプライトを正しい順序で描画します。

属性:draw(surface) -> Rect_list

pygame.sprite.LayeredUpdates.get_sprites_at()

機能: この位置にあるすべてのスプライトを含むリストを返します (最初のスプライトが下にあり、最後のスプライトが上にあります)。

プロパティ:get_sprites_at(pos) -> colliding_sprites

pygame.sprite.LayeredUpdates.get_sprite()

関数: グループ スプライトからインデックス idx のスプライトを返します。

属性:get_sprite(idx) -> sprite

idx が範囲内にない場合、IndexOutOfBounds が発生します。

pygame.sprite.LayeredUpdates.remove_sprites_of_layer()

機能: レイヤーからすべてのスプライトを削除し、リストとして返します。

プロパティ:remove_sprites_of_layer(layer_nr) -> スプライト

pygame.sprite.LayeredUpdates.layers()

機能: 定義された (一意の) レイヤーリストを下から上にソートして返します。

属性:layers() -> レイヤー

pygame.sprite.LayeredUpdates.change_layer()

機能: スプライトのレイヤーを変更します。

属性:change_layer(スプライト, new_layer) -> なし

スプライトは事前にレンダラに追加する必要があります。検査には注意してください。

pygame.sprite.LayeredUpdates.get_layer_of_sprite()

機能: スプライトが現在配置されているレイヤーを返します。

プロパティ:get_layer_of_sprite(スプライト) -> レイヤー

スプライトが見つからない場合は、デフォルトのレイヤーに戻ります。

pygame.sprite.LayeredUpdates.get_top_layer()

機能: トップレベルに戻る

属性: get_top_layer() -> レイヤー

pygame.sprite.LayeredUpdates.get_bottom_layer()

機能:一番下に戻る

属性: get_bottom_layer() -> レイヤー

pygame.sprite.LayeredUpdates.move_to_front()

機能: エルフをトップに上げる

プロパティ:move_to_front(スプライト) -> なし

スプライトを最前面に移動し、スプライト レイヤーを最上位に変更します(レイヤーの最後に追加されます)。

pygame.sprite.LayeredUpdates.move_to_back()

機能: スプライトを一番下に移動します。

プロパティ:move_to_back(スプライト) -> なし

スプライトを一番下のレイヤーに移動し、他のすべてのレイヤーの後ろに移動して、レイヤーを追加します。

pygame.sprite.LayeredUpdates.get_top_sprite()

機能: 先頭のスプライトに戻る

属性: get_top_sprite() -> スプライト

pygame.sprite.LayeredUpdates.get_sprites_from_layer()

レイヤー内のすべてのスプライトを、追加された位置でソートして返します。 関数

プロパティ:get_sprites_from_layer(レイヤー) -> スプライト

レイヤー内のすべてのスプライトを、追加された位置でソートして返します。線形検索が使用され、スプライトはレイヤーから削除されません。

pygame.sprite.LayeredUpdates.switch_layer()

機能: スプライトをレイヤー 1 からレイヤー 2 に切り替えます。

プロパティ:switch_layer(layer1_nr、layer2_nr) -> なし

レイヤ番号が存在する必要があります。確認してください。

pygame.sprite.LayeredDirty

機能: LayeredDirty グループ クラスは DirtySprite オブジェクトに使用されます。LayeredUpdates をサブクラス化します。

属性:LayeredDirty(*spites, **kwargs) -> LayeredDirty

このクラスのセットには、pygame.sprite.DirtySprite または次のプロパティを持つ任意のスプライトが必要です: image、rect、dirty、visible、blendmode (DirtySprite のドキュメントを参照)
このクラスのセットはダーティ フラグ テクノロジーを使用しているため、pygame.sprite より高速です。 .RenderUpdates 。また、プログラムに多数の静的スプライトがある場合、ダーティ Rect 更新と全画面描画を自動的に切り替えることもできます。
pygame.sprite.Group と同様に、kwargs を介していくつかの追加プロパティを指定できます。
_use_update True/False デフォルトは False です。
_default_layer レイヤーが追加されていないスプライトのデフォルトレイヤー
_time_threshold
ダーティ Rect モードを切り替えるためのしきい値時間。全画面モード、デフォルトは 1000./80==1000./fps

pygame 1.8の新機能。

pygame.sprite.LayeredDirty.draw()

機能: 渡されたサーフェス上のすべてのスプライトを正しい順序で描画します。

属性:draw(surface, bgd=None) -> Rect_list

背景を渡すことも可能です。背景がすでに設定されている場合、bgd パラメータは効果がありません。

pygame.sprite.LayeredDirty.clear()

機能: 背景を設定するために使用されます

属性:clear(surface, bgd) -> None

pygame.sprite.LayeredDirty.repaint_rect()

機能: 指定された領域、screen_rect をスクリーン座標で再描画します。

プロパティ:repaint_rect(screen_rect) -> なし

pygame.sprite.LayeredDirty.set_clip()

機能: 描画する領域をクリップします。None を渡してクリップをリセットします (デフォルト)

プロパティ:set_clip(screen_rect=None) -> なし

pygame.sprite.LayeredDirty.get_clip()

機能: 描画する領域をクリップします。None を渡してクリップをリセットします (デフォルト)

プロパティ: get_clip() -> Rect

pygame.sprite.LayeredDirty.change_layer()

機能: スプライトのレイヤーを変更します。

属性:change_layer(スプライト, new_layer) -> なし

スプライトは事前にレンダラーに追加する必要がありますのでご確認ください。

pygame.sprite.LayeredDirty.set_timing_treshold()

機能: しきい値をミリ秒単位で設定します。

プロパティ:set_timing_treshold(time_ms) -> なし

デフォルト値は 1000/80 で、80 は全画面モードに切り替える fps です。このメソッドの名前には小さな誤りがあります。

発生: TypeError -- time_ms が int または float でない場合
pygame.sprite.GroupSingle()
関数: 単一のスプライトを保存するグループ コンテナー。

属性:GroupSingle(sprite=None) -> GroupSingle

GroupSingle コンテナにはスプライトが 1 つだけ保存されます。新しいスプライトが追加されると、古いスプライトは削除されます。
このグループ クラスに含まれるスプライトにアクセスするために使用される特別なプロパティ [GroupSingle.sprite] があります。グループクラスが空の場合は「なし」が表示されます。プロパティを指定して、GroupSingle コンテナにスプライトを追加することもできます。
pygame.sprite.spritecollide()
関数: グループ クラス内で別のスプライトと交差するスプライトを見つけます。

属性:spritecollide(sprite, group, dokill, collided = None) -> Sprite_list

グループ内の別のスプライトと交差するすべてのスプライトを含むリストを返します。Intersect は、各スプライトの Sprite.rect プロパティを比較します。
dokill パラメータはブール値です。True に設定すると、衝突するすべてのスプライトがグループから削除されます。
衝突パラメータは、2 つのスプライトが衝突するかどうかを計算するために使用されるコールバック関数です。両方のスプライトを値として受け取り、それらが衝突したかどうかを示すブール値を返す必要があります。衝突しない場合、すべてのスプライトの値は「rect」[衝突の計算に使用されるスプライトの領域の長方形] でなければなりません。衝突した呼び出し可能パラメータ: collide_rect、collide_rect_ratio、collide_circle、collide_circle_ratio、collide_mask。例えば:

スプライト ブロックがグループ クラス block_list 内の何かと競合するかどうかを確認します。

True フラグは block_list 内のスプライトを削除します

block_hit_list = pygame.sprite.spritecollide(player, block_list, True)

衝突スプライトのリストとカウントを確認する

for block inblocks_hit_list:
スコア +=1
pygame.sprite.collide_rect()
関数: 四角形で表される 2 つのスプライト間の衝突を検出します。

プロパティ:collide_rect(left, right) -> bool

2 つのスプライト間の衝突をテストします。衝突は、pygame rect colliderect 関数を使用して計算されます。そして衝突コールバック関数として *collide 関数に渡されます。
スプライトには「rect」プロパティが必要です。
pygame 1.8の新機能。

pygame.sprite.collide_rect_ratio()
関数: 2 つのスプライト間の衝突検出。指定された比率でスケールされた四角形で表されます。

プロパティ:collide_rect_ratio(比率) ->collided_callable

2 つのスプライト間の衝突をチェックする呼び出し可能なクラス。スプライト四角形のスケーリングされたバージョンを使用して表現されます。
Ratio を使用して作成し、インスタンスを衝突コールバック関数として *collide 関数に渡します。
比率は浮動小数点です。1.0 は同じサイズ、2.0 は 2 倍、0.5 は半分の大きさです
。pygame 1.8.1 の新機能です。

pygame.sprite.collide_circle()
関数: 円で表される 2 つのスプライト間の衝突を検出します。

プロパティ:collide_circle(left, right) -> bool

スプライトを中心とする 2 つの円が重なるかどうかをテストして、2 つのスプライト間の衝突をテストします。スプライトに「radius」プロパティがある場合は、このプロパティを使用して円が作成されます。そうでない場合は、スプライトの「rect」プロパティを完全に囲むのに十分な大きさの円が作成されます。そして、競合コールバック関数として *collide 関数に渡されます。
スプライトには「rect」属性とオプションの「radius」属性が必要です。
pygame 1.8.1の新機能。

pygame.sprite.collide_circle_ratio()
関数: 2 つのスプライト間の衝突検出。指定された比率でスケールされた円で表されます。

プロパティ:collide_circle_ratio(比率) ->collided_callable

2 つのスプライト間の衝突をチェックする呼び出し可能なクラス。スプライトの半径のスケール バージョンで表されます。
浮動小数点比率を使用して作成し、インスタンスを衝突コールバック関数として衝突関数に渡します。
比率は浮動小数点数です。1.0 は同じサイズ、2.0 は 2 倍、0.5 は半分です。
保存されている比率で円の半径をスケーリングした後、スプライトを中心とする 2 つの円が重なるかどうかをテストすることにより、2 つのスプライト間の衝突に対する呼び出し可能なテストを作成します。スプライトに「radius」プロパティがある場合、そのプロパティは円の作成に使用されます。そうでない場合は、スプライトを完全に囲むのに十分な大きさの円が作成され、衝突コールバックとして collide 関数に渡されます。スプライトには「rect」が必要です

オプションの「radius」属性
pygame 1.8.1 の新機能。

pygame.sprite.collide_mask()
関数: マスクで表される 2 つのスプライト間の衝突検出。

属性:

collide_mask(sprite1, sprite2) -> (int, int)
collide_mask(sprite1, sprite2) -> None
2 つのスプライトのビットマスクが重なっているかどうかをテストして衝突を検出します (pygame.mask.Mask.overlap() を使用)。スプライトにマスク属性がある場合は、それがマスクとして使用されます。それ以外の場合、マスクはスプライトのイメージ属性から作成されます (pygame.mask.from_surface() を使用)。スプライトには、rect 属性が必要です。マスク属性はオプションです。
マスク間の最初の衝突点を返します。衝突点の座標原点はスプライト1のマスクの左上隅です[常に(0,0)とみなします]。衝突点はマスク内の位置であり、スプライト 1 の実際の画面位置とは独立しています。
この関数は、衝突コールバック関数としてグループ クラス衝突関数に渡されます (spritecollide()、group collide()、spritecollideany() を参照)。
知らせ:

パフォーマンスを向上させるには、この関数を使用して衝突をチェックするすべてのスプライトのマスク属性を作成して設定します。それ以外の場合、この関数が呼び出されるたびに、新しいマスクが作成されます。
スプライトのイメージを変更するたびに (たとえば、新しいイメージを使用したり、既存のイメージを回転したりする場合)、新しいマスクを再作成する必要があります。

スプライト用マスクの作成例。

sprite.mask = pygame.mask.from_surface(sprite.image)
戻り値: マスク間の最初の競合ポイント; 競合がない場合は None を返します
戻り値の型: tuple(int, int) または NoneType
pygame 1.8. 0 の新機能。

pygame.sprite.groupcollide()
関数: 2 つのグループ間で衝突しているすべてのスプライトを検索します。

属性:groupcollide(group1, group2, dokill1, dokill2, collided = None) -> Sprite_dict

このメソッドは、両方のグループ内のすべてのスプライト間の衝突を検出します。衝突は、各スプライトの Sprite.rect プロパティを比較するか、collided 関数を使用することによって行われます (引数が None でない場合)。
group1 の各スプライトは、返された辞書に追加されます。各項目の値は、group2 内の交差するスプライトのリストです。
dokill パラメータが true の場合、衝突するスプライトはそれぞれのグループ クラスから削除されます。
衝突パラメータは、2 つのスプライトが衝突するかどうかを計算するために使用されるコールバック関数です。両方のスプライトを値として受け取り、それらが衝突したかどうかを示すブール値を返す必要があります。衝突が発生しない場合、すべてのスプライトは「rect」値[衝突の計算に使用されるスプライトの領域の長方形]を持つ必要があります。
pygame.sprite.spritecollideany()
関数: スプライトがグループ内の何かと交差するかどうかを単純にテストします。

属性:

spritecollideany(sprite, group,collided = None) -> 返されたスプライトとのスプライト衝突
spritecollideany(sprite, group, collided = None) -> なし 衝突なし
スプライトがグループ内のいずれか 1 つのスプライトと衝突した場合、スプライトを返します。グループAの単体エルフ。衝突がない場合は None を返します。
pygame.sprite.spritecollide() 関数のすべての機能が必要ない場合は、この関数の方が高速です。
衝突パラメータは、2 つのスプライトが衝突するかどうかを計算するために使用されるコールバック関数です。両方のスプライトを値として受け取り、それらが衝突したかどうかを示すブール値を返す必要があります。衝突が発生しない場合、すべてのスプライトは「rect」値[衝突の計算に使用されるスプライトの領域の長方形]を持つ必要があります。

おすすめ

転載: blog.csdn.net/apythonlearner/article/details/130709585