npm.io
0.0.60 • Published 9h ago

@tscratch3/typescratcher

Licence
AGPL-3.0-only
Version
0.0.60
Deps
8
Size
4.5 MB
Vulns
0
Weekly
0

@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 解決済