Skip to content

TypeScracherとは何? ​

特徴 ​

Scratch3風 ~ Scratch3でやれることを「同様に」で表現できることを目指しています。

イベント起動型 ​

イベント起動

Scratch3のハットブロックに対応したスレッド定義(非同期/並列動作)

体系的なメソッド構成 ​

直観的に使える体系的なメソッド構成

Scratch3のブロックグループに対応したメソッドグループを用意しています。

  • Motion(動き)
  • Looks(見た目)
  • Sound(音)
  • Events(イベント)
  • Control(制御)
  • Sensing(調べる)
  • Pen(ペン)
  • Operations(演算)
  • Variables(変数)

Scratch3座標系 ​

ステージの大きさは、横 480ピクセル、縦 360ピクセル、とScratch3と同じにしています。

座標(X,Y)は ステージの中央が(X,Y)=(0,0)であり、座標の扱いはScratch3と完全に同じです。

coordinate

Scratch3と同等の衝突判定 ​

衝突判定は、Scratch3と同じく、見えたままの判定を提供します。

collisionDetection

Scratch3と同等の色判定 ​

色判定も、Scratch3と同じく、見えたままの判定を提供します。

collistionColor

画像ファイル ​

SVG画像、BITMAP画像、どちらも使用可能です。

Scratch3から出力した画像はそのまま使用することができます。

音ファイル ​

Scratch3で使える音ファイルは、すべてTypsScratcherでも利用可能です。

繰り返しループはフレームに連動 ​

フレームごとに繰り返しループを1回分処理します。これは Scratch3と同じです。

描画フレーム1回でループを1回分
実行する(=10歩動かす)


typescript
function( this: Sprite ) {
    // ずっと繰り返す
    for(;;) {
        this.Motion.move.steps( 10 ); // 10 動かす

        // ★★★★★★★★★★★★★★★★★★★★★
        // 繰り返しの最後で自動的に
        // 『次のフレームになるまで一時停止』を
        // するようにコンパイルされます
        // ★★★★★★★★★★★★★★★★★★★★★
    }
}

LoopFrameFPS08


プログラミングが楽 ​

体系的なメソッド構成

  • 体系的なメソッド構成 ~ 提供するメソッドはScratch3のブロック群を参考にして構成されています。
  • コーディングが楽 ~ Typescriptのコード補完により、候補メソッドを教えてくれます。

マウスで触れたら再生(離れたら停止) ​

マウスを重ねるとGIF再生Eslint

難しい書き方を意識させない ​

初心者に優しいコーディング(難しい書き方を意識させない)

  • 非同期のメソッドのときでも、awaitを付与することを意識する必要がありません( TypeScratcherが自動的にawaitにします )。
  • 繰り返し処理では描画フレームごとに休止させるのですが、休止させるための特殊な書き方を意識する必要がありません( TypeScratcherが自動的に休止させるコードを追加してくれます )。

機能拡張への道 ​

機能拡張

『TypeScratcher』が提供するクラスを継承し、機能拡張された「スプライトクラス」を作り出すことも可能です。 typescriptを使いこなして、独自の機能拡張にも挑戦しましょう。


  • スプライトクラス『Ts.Sprite』を継承して、独自機能を組み込む例
typescript
import { Typescratcher as Ts } from "@tscratch3/typescratcher";
import type { Sprite } from "@tscratch3/typescratcher";

class Wall extends Ts.Sprite {
    /** プロパティ type */
    public type: number = -1; // 初期値は -1

    /**
     * クローンしたときにプロパティ『type』を引き継ぐようにする
     */
    protected makeClone( name: string ): Sprite {
        const clone = new Wall( name );
        clone.type = this.type;
        return clone;
    }
}