Discuss Scratch
- scratch_kousai
-
4 posts
作品を軽量化する方法について議論しよう
僕は音楽がプロジェクトの一番重くなる原因だと思います。
音楽や効果音を減らせばプロジェクトが軽くなると思いますが、それじゃああまり面白いプロジェクトにならないと思うので、それをどうしたほうが良いのかわかりません。
《他のプロジェクト軽量方法》
・コスチュームをビットマップ化する
・スプライトを減らしてクローンで作る
set [ コスチュームv] to [1]
create clone of [自分自身 v]
when I start as a clone
if <(コスチューム) = [1]> then
end
- trainfan233
-
70 posts
作品を軽量化する方法について議論しよう
同じスプライトがあるのであればクローンでやってみる。そうしたら軽くなるかもです。
これを使う↑
戦闘ゲームの場合は倒されて、何かを送って↓
これを使うといいですね


create clone of [ なにか]
これを使う↑
戦闘ゲームの場合は倒されて、何かを送って↓
when I receive [なにか]
create clone of [ 自分自身]自分自身のクローンを消す
これを使うといいですね


Last edited by trainfan233 (Nov. 23, 2024 09:13:17)
- kadatumi
-
6 posts
作品を軽量化する方法について議論しよう
クローンを消すになるとたくさんクローンしても、全部消えてしまいます。 同じスプライトがあるのであればクローンでやってみる。そうしたら軽くなるかもです。create clone of [ なにか]
これを使う↑
戦闘ゲームの場合は倒されて、何かを送って↓when I receive [なにか]create clone of [ 自分自身]自分自身のクローンを消す
これを使うといいですね
- trainfan233
-
70 posts
作品を軽量化する方法について議論しよう
その場合は1スプライトにつき2つスプライト分にする→2分の1クローンを消すになるとたくさんクローンしても、全部消えてしまいます。 同じスプライトがあるのであればクローンでやってみる。そうしたら軽くなるかもです。create clone of [ なにか]
これを使う↑
戦闘ゲームの場合は倒されて、何かを送って↓when I receive [なにか]create clone of [ 自分自身]自分自身のクローンを消す
これを使うといいですね
- 9q9q9q
-
12 posts
作品を軽量化する方法について議論しよう
#132
動作が遅くなったのは中を見てコードエディターを開いて実行した場合です。中を見ない場合では、単純なブロックの量による動作の速さの違いは見られませんでした。これが軽いからです。その作品は「ブロックが多いほど遅い」という話ではなかったのですか? 一方、普通に見て実行している場合は、おそらくブロックの量に動作の速さはほとんど左右されません。理由は
であれば、「ブロックの量に動作の速さはほとんど左右されません」を否定する理由になります。
Last edited by 9q9q9q (Nov. 28, 2024 04:21:23)
- kouryou118103
-
1000+ posts
作品を軽量化する方法について議論しよう
その情報は古いようです。
最新の情報はこちら
最新の情報はこちら
Last edited by kouryou118103 (Dec. 23, 2024 09:06:07)
- unnot-leas
-
1 post
作品を軽量化する方法について議論しよう
ディスカッションフォーラム初めてです
PENで3Dやアニメーションを作るとき、私はたいていturbowarpに頼らないとプロジェクト実行できませんがスクラッチでサクサクと動かしているプロジェクトがあります どうやっているのか教えてください
PENで3Dやアニメーションを作るとき、私はたいていturbowarpに頼らないとプロジェクト実行できませんがスクラッチでサクサクと動かしているプロジェクトがあります どうやっているのか教えてください
- ioqj
-
500+ posts
作品を軽量化する方法について議論しよう
(#134)unnot-leasさん、ディスカッションフォーラムへようこそ!
PENで3Dやアニメーションを作るとき、私はたいていturbowarpに頼らないとプロジェクト実行できませんがスクラッチでサクサクと動かしているプロジェクトがあります どうやっているのか教えてください
一番大きな違いとしては、やはりデータ量とか、そういうのが大きいと思います。
あとはデータを基に情報を描きだすアルゴリズムとか、そこらへんが軽量化の要因なのでは、と思います。
プロジェクトによって方法は違うので、該当プロジェクトの中を見るのが手っ取り早い気はしますが。
- KimiruHamiru
-
500+ posts
作品を軽量化する方法について議論しよう
想定している「スクラッチでサクサクと動かしているプロジェクト」が具体的にどのプロジェクトであるかによって、答えは違ってくるかなと思います。私の想定でちょっと書きます。 PENで3Dやアニメーションを作るとき、私はたいていturbowarpに頼らないとプロジェクト実行できませんがスクラッチでサクサクと動かしているプロジェクトがあります どうやっているのか教えてください
Scratchのアニメーションの仕組みは
・「0.033秒(1/30秒)」ごとに
・「違う画像を生成する処理」を
・「つぎつぎに実行する」
というのが基本で、「サクサク動かない」のは
「違う画像を生成する処理」が「0.033秒以内に終わってない」という状態である、
と言ってよいと思います。
この「処理」は大雑把に
・「点の位置を計算する」
・「ペンで描画する」
の2つに分けられます。
(可能なら、自分の環境(あるいは想定する環境)でそれぞれどれくらい時間がかかるか調べとくとよいです。 https://scratch-mit-edu.ezproxyberklee.flo.org/projects/483250811/ は参考になるかもしれません)
「計算」の話題は後回しにする(どういう計算をするかによるので、人間が想像できる計算の種類の数だけ話が広がる)として、
「ペンで描画する」の方は割と単純な話です。
「たくさん描くと重い」、「たくさん描かなければ軽い」です。
「点を打つ」場合
「ペンを下ろす、ペンを上げる」という処理は、私の経験では
「0.033秒の間に繰り返せる回数」は「そこそこの性能のハード環境でも3000回ぐらいが限界」です。
(これはハードウェア環境によってかなり差があるはずで、もっと低い場合もあると思いますが、600ぐらいは行けると思います)
この部分は「(Scratchを使う限り)どうにもならない絶対的な壁」と思われるので、
「ペンを下ろす、ペンを上げる」の「回数自体をそれに合わせる」
必要があるはずです。
純粋に「表示するものの頂点数を減らす」のはとても有効です。
ほかに、
私がよくやるのは「頂点数を間引く(まびく)」です。
「点を全部描かなくても全体として見ればなんか案外それっぽい」というのが前提で、
応用として「1フレームの時間内に書ききれないぐらいたくさん頂点がある」なら、「次のフレームも使えば猶予は倍になる、それでも足りなければさらに次のフレームも使って、時間をかけて描けばいい」という考え方を使う場合もあります。「各フレームで処理を中断する」ようにすれば、「描画が早くなるわけではない」ですが「操作が重くなることを回避」できます。
間引き方は、
頂点のリストを「走査(そうさ)して、次のフレームでは前回の終わりから描画再開する」、みたいなことをやるのが丁寧です。が、
状況によっては
頂点のリストの「何番目の頂点を描画するかはランダム」というので充分(場合によってはむしろ有効)な場合もあります。
原理上、いわゆる「ちらつき(フレームごとに部分部分が描かれないので明滅する)」とか「ティアリング(画面上半分とした半分で時間が違う)」とかが発生しますが、必要なら、なにがしかの「ぼやけさせる仕組み」で緩和(=ごまかし)します。
細かい話は省きますが、たとえば
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/717010796/
では「半透明にした背景色」で「前フレームで描いたものを消さずに徐々に薄れさせる」ようなことをしています。
「線を引く」場合
描画の目的は、「描きたいもの」で「画面の面積の一部(できればぜんぶ)を埋める」ことです。
1フレーム0.033秒の間に指定できる「点」の数が少ないなら、「線」とか「面」を描いちゃう(その方が単位時間内に多くの画面の面積を稼げる)という選択も有効です。
大雑把には
「100ピクセル並んだ点を1つ1.つ描く」よりは「始点終点を指定して線を引く」方が高速
という話です。よくある「ワイヤフレーム」とか「ポリゴン」とかいうのはその延長の話で、イマドキのコンピュータはその考え方を前提として専用ハード(GPU。おざっぱに言えば「ピクセル一つ一つ描く」じゃなく「条件に合ったピクセルを並列処理で同時に描く」仕組み)が作られているし、(GPU機能を直接使っていないにしても)Scratchで線を引く場合もそれなりに有効なようです(終端が円形の線を引くScratchの仕組みは思いのほか複雑な実装になってるようですが)。
Scratchで「レイキャスター」と呼ばれている3D迷路系のプロジェクトが「描画面積」のわりに超絶軽いのはこの「線を引く」という方法を選んでいるおかげです。
- KimiruHamiru
-
500+ posts
作品を軽量化する方法について議論しよう
「計算」の方についてちょっとだけ書くと、
奥義は
「計算しない」
です。
具体的には、
・計算結果が固定になる物は、計算結果だけ記録して描画のタイミングでは計算しない。
・ループの外に出せる計算は、なるべく出す。計算が発生する回数を減らす。
・「どうしても必要」でなければ、メモリを確保しにいかない、リストを更新しない。
といった話になります。
何か小細工をした結果、かえって重くなる場合もあるかと思いますが、結局のところ
・「思いつくやり方全部実際動かしてみて、軽いものを選ぶ」
というのが私の目指すところです。
奥義は
「計算しない」
です。
具体的には、
・計算結果が固定になる物は、計算結果だけ記録して描画のタイミングでは計算しない。
・ループの外に出せる計算は、なるべく出す。計算が発生する回数を減らす。
・「どうしても必要」でなければ、メモリを確保しにいかない、リストを更新しない。
といった話になります。
何か小細工をした結果、かえって重くなる場合もあるかと思いますが、結局のところ
・「思いつくやり方全部実際動かしてみて、軽いものを選ぶ」
というのが私の目指すところです。
- ito-noizi
-
100+ posts
作品を軽量化する方法について議論しよう
PENの話が上がっていたので、狭い話ですが驚いたという話をあげておきます。(まあ、当たり前なのではという気もしていますが)
ライフゲームを高速化するときはPENを上げ下げしないほうが1フレームに動かすブロック数が少なく軽量になるのではないかと友達に言ったら実装してくれました。
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1109140099/
線の描画には点の描画よりも時間がかかるみたいでだめらしいです。上にあるようなレイキャスティングは線がながいから成り立つ話なんですね~
(色が今後Nこ分変わらないならまとめて線を引くみたいなのは有効かもしれない)
ライフゲームを高速化するときはPENを上げ下げしないほうが1フレームに動かすブロック数が少なく軽量になるのではないかと友達に言ったら実装してくれました。
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1109140099/
線の描画には点の描画よりも時間がかかるみたいでだめらしいです。上にあるようなレイキャスティングは線がながいから成り立つ話なんですね~
(色が今後Nこ分変わらないならまとめて線を引くみたいなのは有効かもしれない)
- KimiruHamiru
-
500+ posts
作品を軽量化する方法について議論しよう
「頂点を間引く」方向でunnot-leasさんのプロジェクトをリミックスしてみました。 PENで3Dやアニメーションを作るとき、私はたいていturbowarpに頼らないとプロジェクト実行できませんがスクラッチでサクサクと動かしているプロジェクトがあります どうやっているのか教えてください
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/1135955733/