Skip to content

ペンを引いたりスタンプしたり

ペンとスタンプ

ランダムな場所へスプライトを移動させながら、ペンで線を引いてみましょう。 そして、スタンプを押してみましょう。

動作例

スプライトを使ってPENでラインを引きます。次にスプライトのスタンプを取ります。


※ TypeScratcherロゴをクリックで表示、緑の旗クリックで動作開始

線とスタンプ

緑の旗を押すと、『サメ』が『どこかへ行く』動作をします(ランダムな場所へ移動)。
移動しながら、ペンで線を引きます。
ペンの太さや色がジョジョに変化していきます。

ペンを引き終えたら、スタンプを押し始めます。


sub/images.ts

typescript
import { Typescratcher as Ts } from "@tscratch3/typescratcher";

// ローカルのassetsフォルダーの中に shark.png, water.svg があるとします。
// assetsフォルダーの場所は相対パスで指定しています。
// 【画像読み込み】
import sharkPng from './assets/shark.png';
import WaterSvg from './assets/water.svg';

/** サメ **/
export const SharkImage = new Ts.Image( { sharkPng } );
/** 水中 **/
export const WaterImage = new Ts.Image( { WaterSvg } );

index.ts

typescript
import { Typescratcher as Ts } from "@tscratch3/typescratcher";
import type { Sprite } from "@tscratch3/typescratcher";

// イメージを取り込む
import { SharkImage, WaterImage } from './sub/images';

// 【スプライト】(さめ)
const shark = new Ts.Sprite( 'shark' );
// サメイメージをスプライトへ追加
shark.Costume.add( SharkImage );
// サメの大きさを 30%にする
shark.Looks.size.scale = [ 30, 30 ];

// 【ステージ】(water)
const stage = new Ts.Stage();
// 水中のイメージをスプライトへ追加
stage.Backdrop.add( WaterImage );

// 旗が押されたときの『shark』のスレッド
shark.Event.flagPresser().func = async function* ( this: Sprite ) {
    // 初期位置 ( 中央 )
    this.Motion.position.xy = [ 0, 0 ];
    // 初期の大きさ ( 30% )
    this.Looks.size.scale = [ 30, 30 ];
    // 画像効果初期化
    this.Looks.effect.clear();
    // 少しまつ
    await this.Control.wait( 1 );

    // ペンを準備する(クリア)
    this.Pen.penClear();

    // ずっと繰り返す
    for( ;; ){

        // 20回繰り返す
        this.Looks.bubble.say( 'ペンをひく' );
        this.Pen.HSVColor.hue = 0; // 色相 [0 - 360]
        //this.Pen.HSVColor.saturation = 0;
        this.Pen.HSVColor.transparency = 0; // 透明度
        this.Pen.penDown();
        for( const _ of Ts.Loop.Iterator( 20 ) ) {
            this.Looks.effect.change( Ts.ImageEffective.COLOR, +25 );

            // どこかに行く
            this.Motion.move.toRandom();

            // ペン太さを太くしていく
            this.Pen.size.thickness += 1;

            // ペンの色を変える
            this.Pen.HSVColor.hue += 15; // 色相 [0 - 360]
            this.Pen.HSVColor.transparency += 10; // 透明度
            // すこし待つ
            await this.Control.wait( 0.5 );

            yield;
        }
        this.Pen.penUp();
        this.Pen.penClear();

        // 20回繰り返す
        this.Looks.bubble.say( 'スタンプ' );
        for( const _ of Ts.Loop.Iterator( 20 ) ) {
            this.Looks.effect.change( Ts.ImageEffective.COLOR, +25 );

            // どこかに行く
            this.Motion.move.toRandom();

            // スタンプする
            this.Pen.stamp();

            // すこし待つ
            await this.Control.wait( 0.5 );

            yield;
        }
        // ペンをクリアする
        this.Pen.penClear();
        yield;
    }
}

// 開始
Ts.engine.start();

index.tsについて

this.Pen』は、『Pen機能』を意味します。『Pen機能』はスプライトでしか使えません。

『色』の設定は Pen.HSVColorで与えます。

this.Pen.HSVColor.hue は色相で 範囲は[0 - 360]です。
this.Pen.HSVColor.saturation は彩度です。
this.Pen.HSVColor.brightness は明度です。
this.Pen.HSVColor.transparency は 透明度です

『Penの太さ』は、Pen.size.thickness で与えます。

『スタンプ』は、Pen.stamp()でとることができます。