課題:クローンを作る
クローンと大きさの設定
スプライトのクローンを作り、クローンされたとき、クローンの大きさを変えてみましょう。
動作例
緑の旗をクリックすると、1秒ごとにクローンを作成し(大きさ20%にする)、クローンはランダムな方向へ「端に触れるまで」走り出します。
※ TypeScratcherロゴをクリックで表示、緑の旗クリックで動作開始
index.ts
typescript
import { Typescratcher as Ts } from "@tscratch3/typescratcher";
import type { Sprite } from "@tscratch3/typescratcher";
// イメージ作成
import { CatAImage, BlueskyImage } from "./sub/images";
// スプライト作成(ネコ)
const cat = new Ts.Sprite( "catA" );
cat.Costume.add( CatAImage ); // イメージを追加
// ステージ作成
const stage = new Ts.Stage();
stage.Backdrop.add( BlueskyImage ); // 背景を追加
// 【旗クリックされたとき】( ネコ )
cat.Event.flagPresser().func = async function* ( this: Sprite ) {
// ずっと繰り返す
for( ;; ){
// 1秒ごとにクローンを作る
await this.Control.wait( 1 );
this.Control.clone();
yield;
}
}
// ネコがクローンされたときのクローンのスレッド
cat.Event.cloned().func = async function* ( this:Sprite ) {
// Looks.size.scale へ 大きさの配列を設定
this.Looks.size.scale = [ 20, 20 ]; // 横・縦 20% にする
this.Motion.direction.degree = Ts.Utils.randomValue( 0, 360 );
// ずっと繰り返す
for( ;; ) {
this.Motion.move.steps( 10 );
// Sensing.edge.isTouching は「端に触れた」ときにTrueを返す
if( this.Sensing.edge.isTouching ){
// break で繰り返しループを抜ける
break;
}
yield;
}
// クローンを削除する
this.Control.removeClone();
}
// 開始
Ts.engine.start();『クローン』を作る
『this.Control.clone()』を実行すると、クローンが作成されます。
クローンは本体のプロパティ(位置、大きさ、表示非表示、画像効果、など)を全て引き継ぎますので、本体と異なるプロパティにするならばクローン側で変更する必要があります。cat.Event.cloned().func = async function*(this:Sprite) { // クローンのコード }
にて、クローンのスレッドを作り出します。
クローンを消したいときは 『this.Control.removeClone()』で削除します。
『繰り返し構文』のなかで、途中で繰り返しから抜け出したい場合は、『break』文を使います。