※この翻訳ドキュメントはスクリプトによって出力・同期されています。内容が怪しそうな場合はGitHubにissueを追加したり英語の原文の確認をお願いします。
add_child と remove_child インターフェイス¶
このページではGraphicsクラスやSprite、Stageクラスなどのコンテナーとして扱えるクラスが持つadd_child
とremove_child
のインターフェイスについて説明します。
各インターフェイスの概要¶
add_child
インターフェイスではコンテナーのインスタンスへ子となる各DisplayObject
を継承したインスタンスを追加し、逆にremove_child
インターフェイスでは子のインスタンスをコンテナーから取り除きます。apyscでは取り除かれた子のインスタンスは表示されなくなります。
子のインスタンスの自動追加について¶
apyscでは各DisplayObject
のインスタンスはコンストラクタの時点で親のインスタンスへと自動で追加されます。例えばSprite
クラスであればStage
クラスのインスタンスを親として追加され、Sprite
クラスを親として内部で作成されるgraphics
プロパティのインスタンスはSprite
クラスのインスタンスへと自動で追加されます。
もし親のインスタンスを調整したい場合には手動でadd_child
やremove_child
などのインターフェイスを呼ぶ必要があります。例えば親としてのとあるSprite
クラスのインスタンスから別のSprite
クラスのインスタンスに子を移したい場合などが該当します。
remove_child インターフェイスの基本的な使い方¶
remove_child
インターフェイスでは子を親のコンテナー要素から取り除きます。apyscは取り除かれたDisplayObject
の子のインスタンスを表示しません。
例えば以下のコードでは四角をクリックした際のハンドラ内でremove_child
インターフェイスを呼び出しており、クリック時に四角が画面から取り除かれます。
from typing_extensions import TypedDict
import apysc as ap
class _RectOptions(TypedDict):
rectangle: ap.Rectangle
def on_sprite_click(e: ap.MouseEvent[ap.Sprite], options: _RectOptions) -> None:
"""
The handler that the sprite calls when clicked.
Parameters
----------
e : MouseEvent
Event instance.
options : dict
Optional arguments dictionary.
"""
sprite: ap.Sprite = e.this
rectangle: ap.Rectangle = options["rectangle"]
sprite.remove_child(child=rectangle)
ap.Stage(
background_color=ap.Color("#333"),
stage_width=150,
stage_height=150,
stage_elem_id="stage",
)
sprite: ap.Sprite = ap.Sprite()
sprite.graphics.begin_fill(color=ap.Color("#0af"))
rectangle: ap.Rectangle = sprite.graphics.draw_rect(x=50, y=50, width=50, height=50)
options: _RectOptions = {"rectangle": rectangle}
sprite.click(on_sprite_click, options=options)
ap.save_overall_html(dest_dir_path="sprite_basic_usage_of_remove_child/")
add_child インターフェイスの基本的な使い方¶
add_child
インターフェイスは取り除かれた子のインスタンスをもう一度他の親のコンテナーのインスタンスへと追加します。
以下のコードでは四角をクリックした際に1つ目の左に配置されているSprite
の親のコンテナーからその四角を取り除き、そして2つ目の右側に配置してあるSprite
のインスタンスへと子を追加しています。
from typing_extensions import TypedDict
import apysc as ap
class _SpriteAndRectOptions(TypedDict):
rectangle: ap.Rectangle
sprite: ap.Sprite
def on_sprite_click(
e: ap.MouseEvent[ap.Sprite], options: _SpriteAndRectOptions
) -> None:
"""
The handler that the sprite calls when clicked.
Parameters
----------
e : MouseEvent
Event instance.
options : dict
Optional arguments dictionary.
"""
first_sprite: ap.Sprite = e.this
rectangle: ap.Rectangle = options["rectangle"]
second_sprite: ap.Sprite = options["sprite"]
first_sprite.remove_child(child=rectangle)
second_sprite.add_child(child=rectangle)
ap.Stage(
background_color=ap.Color("#333"),
stage_width=250,
stage_height=150,
stage_elem_id="stage",
)
first_sprite: ap.Sprite = ap.Sprite()
first_sprite.graphics.begin_fill(color=ap.Color("#0af"))
first_sprite.x = ap.Number(50)
first_sprite.y = ap.Number(50)
rectangle: ap.Rectangle = first_sprite.graphics.draw_rect(x=0, y=0, width=50, height=50)
second_sprite: ap.Sprite = ap.Sprite()
second_sprite.x = ap.Number(150)
second_sprite.y = ap.Number(50)
options: _SpriteAndRectOptions = {"rectangle": rectangle, "sprite": second_sprite}
first_sprite.click(on_sprite_click, options=options)
ap.save_overall_html(dest_dir_path="sprite_basic_usage_of_add_child/")
関連資料¶
add_child API¶
特記事項: このAPIドキュメントはドキュメントビルド用のスクリプトによって自動で生成・同期されています。そのためもしかしたらこの節の内容は前節までの内容と重複している場合があります。
[インターフェイスの構造] add_child(self, child: apysc._display.display_object.DisplayObject) -> None
[インターフェイス概要]
表示オブジェクトの子をこのインスタンスへと追加します。
[引数]
child
: DisplayObject追加する子のインスタンス。
[コードサンプル]
>>> import apysc as ap
>>> stage: ap.Stage = ap.Stage()
>>> sprite_1: ap.Sprite = ap.Sprite()
>>> sprite_1.graphics.begin_fill(color=ap.Color("#0af"))
>>> rectangle: ap.Rectangle = sprite_1.graphics.draw_rect(
... x=50, y=50, width=50, height=50
... )
>>> sprite_2: ap.Sprite = ap.Sprite()
>>> sprite_2.add_child(rectangle)
remove_child API¶
特記事項: このAPIドキュメントはドキュメントビルド用のスクリプトによって自動で生成・同期されています。そのためもしかしたらこの節の内容は前節までの内容と重複している場合があります。
[インターフェイスの構造] remove_child(self, child: apysc._display.display_object.DisplayObject) -> None
[インターフェイス概要]
このインスタンスから指定された表示オブジェクトの子を取り除きます。
[引数]
child
: DisplayObject取り除く対象の子のインスタンス。
[コードサンプル]
>>> import apysc as ap
>>> stage: ap.Stage = ap.Stage()
>>> sprite: ap.Sprite = ap.Sprite()
>>> sprite.graphics.begin_fill(color=ap.Color("#0af"), alpha=0.5)
>>> rectangle: ap.Rectangle = sprite.graphics.draw_rect(
... x=50, y=50, width=50, height=50
... )
>>> sprite.graphics.remove_child(rectangle)
>>> print(rectangle.parent)
None