npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@tscratch3/typescratcher

v0.0.45

Published

TypeScript library that generates Scratch 3-style drawings

Readme

@amami-harhid@typeScratcher

This is a TypeScript library that generates Scratch 3-style drawings.

準備

npm ci

テスト実行

npm run dev /test/

ビルド

npm run webpack

npm publish

  • npm adduser
  • npm publish

TODO

赤ボタンで停止した後、旗クリックが効かない

赤ボタンで停止した後に旗クリックをすると、動作が始まらない。 赤ボタンで停止するとき、 Proxyで「このスクリプトを止める」フラグオンとしスローを発生させている。フラグオンのままなので再実行ですぐにスローしていた。 フラグをオフに(Proxyを再生成)した。 完了 ---> 0.0.17

実行中スレッドの数の監視

停止したスレッドは、スレッドプールから適切に削除されていること

QuestionBoxElement内で半角スペース入力抑止

半角スペース入力抑止をしている理由を忘れてしまった。 そもそも、抑止をしている場所が「文字列入力終了」時点であるのが不思議な感じがしている。

スプライトクリックされたときを実装

実装 0.0.19

一時停止中に旗クリックしても動作開始をしない

ScratchEvent.ts 修正 Threads.ts 修正 一時停止すると、スレッドインターバルを抑止してしまうので、旗クリック時に抑止解除する

終わるまで音を鳴らす(連続)

「終わるまで音を鳴らす」の実行中に同じ音で「終わるまで音を鳴らす」をすると前回の再生が止まる(新しく先頭から鳴り出す) これは正解か? → Scratch3本家の同じ動作であるので正解とする。

Sprite#Scale 設定変更

0.0.19

メッセージ受信処理

0.0.19

threadObjを作り出しステータスはYIELDにせずに threadManager.registThread() をする メッセージIDに紐づく 配列へthreadObjを追加していく メッセージIDのScratchEventを受信(on)したとき(※1) ・配列からthreadObjを取り出し、取り出したすべてのthreadObjへ対して、 ・・ステータスが実行中の場合、強制終了 ・・ステータス(YIELD以外)の場合、YIELD (待機中)にする

ImageEffect 実装

実装: 色、幽霊、ピクセルなど(0.0.20)

PEN機能 (+Stamp)

実装: 0.0.21

スプライト PNG画像

サイズを半分にするとちょうどいい。 なぜか?検証が必要。

ステージ背景、PNG画像

どんな感じになるかを検証すべき 検証済。 ステージのupdate処理にバグあり。修正済。

エンティティ.Image.effect 参照NGとした

0.0.22 #02

エンティティ第二階層

0.0.22 #02

小文字始まりにする 例 apple.Looks.Effect.clear() ↓ apple.Looks.effect.clear()

Bubble willReadFrequently対応

0.0.22 #02 同時に、ELementを ScratchElementと名称変更

全てのスレッドが終了したとき

赤ボタンを非活性にする 0.0.22 #03

Timer.wait を使用不可にする

0.0.22 #04

playground → engine と名称変更

~ engine.start() のみを公開 0.0.22 #05

背景切り替え時のイベント処理

0.0.22 #06 (実装済) 0.0.22 #07 (実装済)

背景切替、コスチューム切替の個別指定

名称ではなく、Imageを渡すほうが直感的だと思う 0.0.23 #01 (実装済)

メッセージ送受信時の引数

0.0.24 #01 (実装済)

一時停止中に旗クリック

音がならなくなる不具合あり。 0.0.25 #01

文字列をSVG化してコスチュームにできるようにした

0.0.25 #05 ( 実装済 )

Font-Family の設定方法を調査すること

0.0.25 #05 ( 実装済 )

text.setAttribute('font-family', 'Marker');

## test/007
コスチューム変化を 2秒ごと、背景変化を 1秒ごと ==> だんだんとずれていく
コスチューム変化を 4秒ごと、背景変化を 1秒ごと ==> だんだんとずれていく(ずれる具合が大)
コスチューム変化を 1秒ごと、背景変化を 1秒ごと ==> ずれない
コスチューム変化を 4秒ごと、背景変化を 4秒ごと ==> ずれない
Scratch3本家も同様の傾向にあるので仕様通りとする

Timer.wait(sec) のなかで setTimeout(()=>{}, sec*1000) でPromise終了をさせている。
Scratch3本家の実装に寄せると、yield を使うことになり、利用者にとって面倒になるし、
今のままでも本家の動作結果と大差がないので 本家実装には寄せないことにする。

## クローン
実装中 (0.0.27)
クローンされたときのイベントで、クローン側のプロパティを操作すると
本体側も変化してしまうような事象あり。

## vite 実行時のエラー

[vite-plugin-static-copy] Error: No file was found to copy on D:\Scratch3\ts\typeScratcher\CNAME src.
==> 対処 vite.config.js で 静的コピーを削除した

## test/012/

・ 旗クリックを短時間で連続して押すと、背景の変化が速くなる(しばらくすると元に戻る)
==> 対処 0.0.27 #08 

・ クローンが大量にあるとき、ときどき、動きが止まるような感じがする。
 クローンするとき Skinを新たに作成していた。本体のSkinと共有するようにした。
==> 対処 0.0.27 #08 

・ 動いているスレッド(ネコ回転)があるのに、赤ボタンが非活性
==> 対処 0.0.30 #03
・ 赤ボタンを押しても 背景変化がすぐには止まらないような気がする
==> 対処 0.0.30 #03

・ 赤ボタンを押して、旗クリックをしても 動き出さないときがある(いつも動かない気がする)
==> 対処 0.0.30 #03

・ クローンを削除すると、本体側の音が止まる
クローン削除時に音を止めているが、本体とクローンでSoundインスタンスを共有しているため、クローンで止めると本体も止まる
音のデータは 共有するが Soundインスタンスは共有せずにクローン用に作り直す
==> 対処 0.0.28 #01
==> 対処 0.0.29 #01
==> 対処 0.0.30 #02 同じ音を複数スプライトで共有するときの対応

# test/001/

・ await playUntilDone(); の後に wait(0.5)を入れると 鳴り終わった後に次の音が鳴り始めると「カッカッ」という雑音が入る。
==> 対処 0.0.30 #02 「同じ音を複数スプライトで共有するときの対応」により改修されている

# test/001/
スプライトが0.5秒ごとにコスチュームを変えているとき
赤ボタンを押したあとに スプライトコスチュームが一回変わる
==> 対処 0.0.30 #03 赤ボタン押下で全エンティティの 描画を抑止する
==> 対処 0.0.30 #04 エンティティのisRunningプロパティは不要なので削除

## Motion.move.glideTo() 実装

glideTo()を同時に並列動作させたときの動作を 本家に寄せられないか?
同じにした。
==> 対処 0.0.31 #01
Glide中に停止ボタン、旗ボタンクリックで、Glideを停止させる
==> 0.0.34 #01

# スピーチ機能を実装 ( test/013)
==> 0.0.31 #02 スピーチ実装中 
同じ文字列のときでも 文字列を音に変換している( SoundPlayerを生成している)
文字列変化がないときは、保存したSoundPlayerを使うことにしたい。
==> 0.0.31 #03 スピーチ実装完 
==> 0.0.32 #01 スピーチ改良完了

# (004) 赤ボタン押下時に スピーチが止まらない
==> 0.0.33 #01

# (004) 一時停止ボタン押下時に、メッセージ送信イベントが止まらない?
一時停止時には描画を止めていたが、スレッド実行を止めていなかった。止めるようにした。
==> 0.0.33 #02

# マウスがステージの外に出たときの対応
ステージの外に出たときでも マウス位置を把握できるようにしたい。
これは本家の仕様でもある
==> 0.0.33 #05

# スプライトを進めていきステージ外に出たときの動作
==> 0.0.33 #04

本家と同じ動作にしたい。ステージの枠のところで止まるようになっているか?
==> 0.0.33 #04

# 動作中の旗クリック時
メッセージ送信で開始したスレッドが止まらない。
・メッセージ受信スレッド
・キー押下スレッド、など
==> 0.0.33 #06
==> 0.0.34 #01

# (0.0.33 #05)動作中の赤ボタンクリック時、ふきだしがきえない
==> 0.0.33 #06
==> 0.0.34 #01

# (0.0.33 #05) キー押下して離したのに、キー押下と判定される
==> 0.0.33 #06
==> 0.0.34 #01

# 一時停止ボタン 動いているスレッドがないなら非活性(変化しない)
==> 0.0.34 #02

# 座標がステージの外に出ているときの位置プロパティ
位置プロパティ は ステージの外に出ている状態で、描画位置だけステージの端に引っかかっている状態にするべきでは?

本家は プロパティ座標 = 描画されている位置
現状(0.0.34 #02)の TypeScratcher 通りでOKである。

# ステージサイズ(StageBounds)
0.0.35 #01

# (0.0.35 #01) マウスが触ったとき

スプライトに触れていない状態で、マウスポインターをステージ外に出すと音がなる。
ステージの上下に出すと音がならない。
ステージの左右に出すと音がなる。
ブラウザを非アクティブにすると音がなる。

if(this.Sensing.mouse.isTouching) { await this.Sound.playUntilDone(CatSound); }

### 原因 
spriteSensingMouseの renderer.pick() へ与える座標を間違えていた
Stage(Canvas)左上基準の Offset座標( 表示拡大率 を考慮しない実座標 )が正しい。

### 対応
0.0.36 #01

# this.Looks.costume.next() とかけてしまう
でも動作はしない。

## costume
sprite.Costume.add();   // OK
sprite.Costume.names    // OK
sprite.Costume.他       // 不可にする
sprite.Looks.costume.add();   // 不可にする
sprite.Looks.costume.names    // 不可にする
sprite.Looks.costume.他       // OK
sprite.Backdrop.~      // 不可にする
sprite.Looks.backdrop.add() // 不可にする
sprite.Looks.backdrop.names // 不可にする
sprite.Looks.backdrop.next() // OK

## backdrop
stage.Backdrop.add();   // OK
stage.Backdrop.names    // OK
stage.Backdrop.他       // 不可にする
sprite.Looks.backdrop.add();   // 不可にする
sprite.Looks.backdrop.names    // 不可にする
sprite.Looks.backdrop.next()       // OK

==> 0.0.38 対処

# マウス座標を取得するとき間違えている
==> 0.0.38 対処

# クローンが端に触れているかの判定

大きなサイズの本体からクローンしてクローンサイズを小さくするとき、クローンをマウス座標の位置にするとき
クローンが常に「端に触れている」状態になってしまう。

クローンのサイズを小さく設定した後、Scratch-renderへサイズ変更を教える前に 端に触れたかを判定しているので
クローンも本体のサイズだとレンダー処理が思ってしまうため。

==> 0.0.38 対処


# 半透明のスプライトからクローンを作るとき

クローンしたときに 本体スプライトの半透明効果が無くなり、すぐに元に戻るように見える
ちなみに、本家ではそのようなことにはならない。

## 原因の推測
幽霊効果50% の本体からクローンを作成する
幽霊効果を引き継ぐクローンが同じ場所、同じ大きさで表示される
そのため 幽霊効果が弱くなったように見えた。

## 改善の方向性
クローン作成する --> Drawing が作成される --> UPDATE処理を数回スキップする?
0.0.39 解決済

# 音追加済のスプライトでボリューム・ピッチを設定しているときクローンに引き継がれない。
SpriteControlのなかで音の効果をクローンへ引き継ぐようにした。
0.0.40 解決済