提供:Japanese Scratch-Wiki
ターゲット(英: Target)は、Scratchのスクリプトを実行できるオブジェクトの内部名である。
特徴
Scratchの仮想マシン(Scratch VM)では、名前、コスチューム(ステージの場合は背景)、ブロック、音を共有するオブジェクト(ステージを含む)を「スプライト」と呼び、スクリプトを実行し、変数を有するオブジェクトを「ターゲット」と呼ぶ。ターゲットと(広義の、ステージを含む)スプライトは多対一である: 一つのスプライトは、一以上のターゲットから成る。スプライトを実装するコード上では、あるスプライトに関連付けられたターゲットは、(実際にクローンであるかにかかわらず)「クローン」と呼ばれている。混乱を避けるため、この記事ではこの意味でのターゲットを「広義のクローン」、制御ブロックで生成されるターゲットを「狭義のクローン」という。
ターゲットには名前がない。(スプライトには名前があるが、これだけではターゲットを特定できない。)そのため、ターゲットはランダムに生成されたIDで識別される。
ターゲットは、ブロックの実行と変数の管理を行うだけで、理論上は電子機器などでもよい: しかし、実際のScratchで実装されているターゲットは、「描画されたターゲット」(RenderedTarget)のみである。このため、「ターゲット」というと、ほとんどの場合描画されたターゲットを指す。描画されたターゲットは、座標等の属性を有する。
「ターゲット」の語の使用
「ターゲット」の語は、様々な場所で、仮想マシンのコード内での定義とは異なる意味で利用されている。
シリアライザー
プロジェクトの読み込み(デシリアライザー)と書き込み(シリアライザー)では、ターゲットは、広義のスプライトと同義で利用される。これは、狭義のクローンであるターゲットは、プロジェクト内に書き込まれないためである。そのため、project.jsonファイルの、スプライトを列挙する配列は、targets
と呼ばれる。
UI
Scratchのユーザーインターフェースを定めるScratch GUIでは、「ターゲットペイン」(TargetPane
)が定義されている。これは、仮想マシンの用語では「広義のスプライトのペイン」であり、実際にスプライトペインと呼ばれている。ターゲットペインは、スプライトを選択するスプライトセレクターとステージを選択するステージセレクターを含む。
アクセス方法
Scratchの仮想マシンでは、ターゲットの一覧は以下の二つの配列によりアクセスできる:
Runtime.targets
- ターゲットが追加順に並べられている。多くの場合、ステージが配列の最初のターゲットである。Runtime.executableTargets
- ターゲットが実行の逆順に並べられている。ステージのターゲットは必ず配列の最初にある。これは、ターゲットのレイヤーの逆順と一致している。(つまり、一番下にあるターゲット - つまりステージのターゲットから、一番上のターゲットの順、ということである。)
また、以下の関数によりターゲットを取得できる:
Runtime.getTargetById
- ターゲットをIDで取得する。Runtime.getSpriteTargetByName
- 渡される名前で識別されるスプライトに結びつけられた、狭義のクローンではないターゲットを取得する。(つまり、スプライトの「オリジナル」のターゲットのこと。)Runtime.getTargetByDrawableId
- レンダリングエンジンにて使用される「Drawable ID」で取得する。Runtime.getTargetForStage
- ステージのターゲットを取得する。ステージは狭義のクローンを作成できないため、ステージのターゲットは常に最大で一個である。
さらに、ターゲットはさまざまなオブジェクトのtarget
属性で取得できる。たとえば、Threadオブジェクトのtarget属性には、そのスレッドの実行に用いられるターゲットが格納されている。
ターゲットの属性
ターゲットには、以下の属性がある:
- ID - ランダムに生成された、ターゲットを一意に識別する文字列。
- 変数 - このターゲットが保有する変数。「すべてのスプライト用」(グローバル)変数は、ステージのターゲットの変数として管理される。それ以外は、ターゲットごとに管理される。このため、UI上で「このスプライトのみ」とある変数は、実際は「このターゲットのみ」の変数である。
- リスト - 同様。
- メッセージ - 内部では、メッセージはステージのターゲットのみが保有できる、変数の一種として扱われている。
- コメント - ブロックはスプライトで管理されているが、コメントはターゲットが管理している。
- カスタムステータス(
_customState
) - ターゲットが持つ様々な属性で、通常ブロックのみが利用する。音の効果やペンの状態などが保管されている。この値は永続的に保存されない: プロジェクトを保存して再読み込みすると失われる。読み込みにはTarget.getCustomState
、書き込みにはTarget.setCustomState
関数を利用する。
描画されたターゲットには、加えて以下の属性がある:
- スプライト - このターゲットに結びつけられているスプライト。
- Drawable ID - レンダリングエンジンにてターゲット等の「描画できるもの」を識別する数値。
- 画像効果
- 「オリジナルかどうか」(
isOriginal
) - このターゲットが狭義のクローンでないか。 - このターゲットがステージのターゲットか。(
isStage
) - x座標、y座標
- 向き
- ドラッグ可能かどうか。
- 表示されているかどうか。
- 大きさ
- 現在のコスチューム番号 - コスチューム自体はスプライトが管理している。
- 回転方法
- 音量
- テンポ - 全ターゲットに適用されるため、ステージのターゲットで一元的に管理されている。
- ビデオの透明度 - 全ターゲットに適用されるため、ステージのターゲットで一元的に管理されている。
- ビデオの状態 - 全ターゲットに適用されるため、ステージのターゲットで一元的に管理されている。
- 音声合成拡張機能の言語。
ターゲットの選択
ターゲットは、エディター内のステージ上にある表示をダブルクリックして選択できる。この場合、スプライトペインを利用した場合と異なり、狭義のクローンも選択できる。選択した状態でコードペインからブロックを実行すると、そのターゲットにより実行される。