Discuss Scratch
- Discussion Forums
- » 日本語
- » 質問コーナー4
- rento1904
-
Scratcher
100+ posts
質問コーナー4
ちなみに100%penの(試)作品なので、クローンやコスチューム、など無いです。(ちなみに音楽も試作品なので無いです)プロジェクトで軽量化をする方法って具体的にはありますか?クローンを上手く使う、不要なコスチューム、音楽を削除する、定義にまとめる、、、
とかは私はよくやります
(被りそう)
- yuikunyeah
-
Scratcher
1000+ posts
質問コーナー4
([ln] \( (9) \))//9は適当ですこのブロックはどのような計算に使うのですか?
([log]\((9)\))//このブロックはsin cos tanなどが入っているブロックです
- kensin3050
-
Scratcher
100+ posts
質問コーナー4
ちょっと目を離してた隙にもう60ページもいったんか…そんなことよりも質問。
確か、スクラッチ上にある全てはCC BY-SA 2.0で公開されてましたよね?
だったら https://scratch.mit.edu/discuss/youtube/うんたらかんたら みたいにスクラッチ上のyoutubeプレイヤーで流す動画もCC BY-SA 2.0で公開されるんですかね?
確か、スクラッチ上にある全てはCC BY-SA 2.0で公開されてましたよね?
だったら https://scratch.mit.edu/discuss/youtube/うんたらかんたら みたいにスクラッチ上のyoutubeプレイヤーで流す動画もCC BY-SA 2.0で公開されるんですかね?
- apple502j
-
Scratcher
1000+ posts
質問コーナー4
利用規約の4.1にあるもの(「any projects, comments, forum posts, or links to third party websites that a user submits to Scratch」)が対象です。
- KimiruHamiru
-
New Scratcher
500+ posts
質問コーナー4
プロジェクトで軽量化をする方法って具体的にはありますか?「1秒間に30回描画してほしいのにフレーム落ちしている」みたいな話ですね。もしかしてこの作品ですか?すみません。上の作品で間違いないです。
こまかい動作は確認していないのですが、
・Scratchは1秒に約30フレーム描画できる。
という前提として、私の経験から言えば、一般論として、
・「1フレーム=0.033秒」に実行できる「ペンを下ろす」の回数は、どのように作っても「1500回程度が限界」。
ということが言えます。1500を超えるとフレーム落ちが始まり、「重く」なります。
最悪1秒に1フレームしか描かれないみたいなことになったり、場合によっては1フレーム描くのに3時間かかるプロジェクト(フルピクセルなレイトレーシング等)とかもあるかと思います。
1500がどこからくるのか理由は知りませんが、これまでそういうプログラムばかり大量に作ってきた観察からは、そうです。
(ちなみにpure WebGLの描画性能のみについて言えば、PCは100万頂点/frame程度は処理できると思います)
引用のプログラムの場合、
「画面クリアで1回+(1ピクセル幅で700回ペンを下ろす定義)x4回」
実行しているので、ループ1回あたり「2801回?(算数に弱いです)」ペンを下ろしているかと思います。
このため、2フレーム程度(ゆるい計算で言えば「2800わる1500=およそ2」)が必要となるはずです。
計測の仕方にもよると思いますが、「ずっとループ」の中に
[frames v]を(1)ずつ変えるみたいなことを書くと、たしかに
[FPS v]を((frames)/(タイマー))にする
1秒あたり15~16フレーム
となっているように見えます。
ということで、重さ対策としては「ペンを下ろすの回数を減らす。1フレーム当たり1500以下に抑える」のが必要と思われます。
やり方はいろんなプロジェクトの研究をしてほしいのですが「可能な場面ではペンの太さを太くする」あたりから手を付けるのがいいかなと思います。
- apple502j
-
Scratcher
1000+ posts
質問コーナー4
スクリプトの実行に関して、最近Scratch Wikiの記事を書きましたが、「ペンを下ろす」ブロックのコードを見てみると、再描画が要求されています。シーケンサーの動作は以下の通りなので
Scratchは、1秒間に30回描画する。(フレーム)そして、シーケンサーは、以下の条件をすべて満たす限り、1フレーム内で可能な限り多くのスレッドを実行する:ターボモードでない場合はスレッドは1回しか実行できません。スレッドが1回でどのくらいスタックを実行できるかは場合によるので、調査してみます。
(略)
ターボモードであるか、またはステージの再描画が要求されていない。
- sy12321
-
Scratcher
65 posts
質問コーナー4
#1191 おそらく、処理速度の問題です。700回繰り返すというところでかなり遅くなってしまっているのだと思います。そこを少くするしかないですね・・・
Last edited by sy12321 (Sept. 9, 2020 11:18:05)
- apple502j
-
Scratcher
1000+ posts
質問コーナー4
追記:
実験してみたところ、以下のコードでは変数は31となりました。(ペンを下ろす per frame≒1)
ただし、これは「ずっと」ブロックの制限だと思います。(ループはyieldする。)以下のようにすれば、「変数」は2倍になります。
このまま倍にしていくと、124、248、496、992、1984、3968までいきました。
結論としては、「ペンを下ろすブロックではなく、ループ処理が遅い」ということだと思います。
ループのyieldを止めるには「画面を再描画せずに実行」を定義ブロックで止めればいいのですが、この2つの相性が合わないのが残念なことです。
実験してみたところ、以下のコードでは変数は31となりました。(ペンを下ろす per frame≒1)
@greenFlag がクリックされたとき
[変数 v]を[0]にする
ずっと
[変数 v]を(1)ずつ変える
ペンを下ろす
end
[タイマー v] > (1) のとき
[すべて v]を止める
ただし、これは「ずっと」ブロックの制限だと思います。(ループはyieldする。)以下のようにすれば、「変数」は2倍になります。
@greenFlag がクリックされたとき
[変数 v]を[0]にする
ずっと
[変数 v]を(1)ずつ変える
ペンを下ろす
[変数 v]を(1)ずつ変える
ペンを下ろす
end
[タイマー v] > (1) のとき
[すべて v]を止める
このまま倍にしていくと、124、248、496、992、1984、3968までいきました。
結論としては、「ペンを下ろすブロックではなく、ループ処理が遅い」ということだと思います。
ループのyieldを止めるには「画面を再描画せずに実行」を定義ブロックで止めればいいのですが、この2つの相性が合わないのが残念なことです。
- apple502j
-
Scratcher
1000+ posts
質問コーナー4
追記の追記:
「画面を再描画せずに実行」を使うと、6000「ペンを下ろす per frame」行きました。
なお、試すことはおすすめしません。
「画面を再描画せずに実行」を使うと、6000「ペンを下ろす per frame」行きました。
なお、試すことはおすすめしません。