※この翻訳ドキュメントはスクリプトによって出力・同期されています。内容が怪しそうな場合はGitHubにissueを追加したり英語の原文の確認をお願いします。

add_child と remove_child インターフェイス

このページではGraphicsクラスやSprite、Stageクラスなどのコンテナーとして扱えるクラスが持つadd_childremove_childのインターフェイスについて説明します。

各インターフェイスの概要

add_childインターフェイスではコンテナーのインスタンスへ子となる各DisplayObjectを継承したインスタンスを追加し、逆にremove_childインターフェイスでは子のインスタンスをコンテナーから取り除きます。apyscでは取り除かれた子のインスタンスは表示されなくなります。

子のインスタンスの自動追加について

apyscでは各DisplayObjectのインスタンスはコンストラクタの時点で親のインスタンスへと自動で追加されます。例えばSpriteクラスであればStageクラスのインスタンスを親として追加され、Spriteクラスを親として内部で作成されるgraphicsプロパティのインスタンスはSpriteクラスのインスタンスへと自動で追加されます。

もし親のインスタンスを調整したい場合には手動でadd_childremove_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