スーパープロセッサ
〜 Tonyu System 改良プログラム 〜
オブジェクトの処理量を増やす方法3
← メインページ
← 点滅現象について
目次
- オブジェクトの処理量を増やす方法
- オブジェクトの処理量を増やす方法2
- オブジェクトの処理量を増やす方法3
- オブジェクトの処理量を増やす方法4
プロセスを使って分散処理
いよいよ、実際に分散処理をしてみましょう!
ここでは、1つのオブジェクトで大量の描画を行います。
分散処理によって、どのような効果がもたらされるのか?
それを理解するために、まずは下のプログラムを実行してこの
のスピードを覚えてください。
/* MainChar.tonyu */
extends SpriteChar;
while (1) {
x+=3; // 左へ移動
update();
}
次に、オブジェクトの処理量を超える処理をしてみます。
/* MainChar.tonyu */
extends SpriteChar;
while (1) {
for (i=0; i<4000; i++) {
drawSprite(i%100, trunc(i/100), 0); // 描画
}
x+=3; // 左へ移動
update();
}
4000個分の
を表示しています。
(2重 for文でもできますが、わかりやすくするために for文を1つにしています)
1フレームで処理しきれていないので、
のスピードも遅くなっています。
あと、点滅現象も起きています。

前ページで「プログラマ自作のオブジェクトの処理量までは、関与できていない」
という問題点があると述べましたが、上のプログラムがまさにその状態です。
つまり、このライブラリを導入したとしても、点滅現象が起きてしまいます。
そこで、分散処理の登場です!!
/* MainChar.tonyu */
extends SpriteChar;
// オブジェクトとプロセスを生成
proc = new classes.lang.Process(new SubChar(), "", 1);
while (1) {
$MainChar_i = 0; // カウントリセット
for (i=0; i<40; i++) {
proc.exec(); // 100回ずつ実行
}
x+=3; // 左へ移動
update();
}
/* SubChar.tonyu */
extends SpriteChar;
while (1) {
for (j=0; j<100; j++) {
drawSprite($MainChar_i%100, trunc($MainChar_i/100), 0); // 描画
$MainChar_i ++;
}
update();
}
今回は、SubChar自体の描画は必要ないので、drawメソッドは必要ありません。
x,y,p変数も必要ないので、オブジェクト生成の引数も「new SubChar()」と省略しています。
先程と同じく、4000個分の
を表示しています。
SubChar が1回実行されると
を100回表示します。
MainChar が SubChar を 40回実行させています。
100個×40セット=4000個 ということになります。
この処理量の配分は、上手く行ってください。
例えば、1個×4000セット=4000個 と配分しても、点滅現象が起きてしまいます。
グローバル変数の $MainChar_i で、どこまで処理したかを把握しています。
一応グローバル変数を使っていますが、多分オブジェクト変数でもできると思います。
分散処理によって、点滅現象が無くなりました。
のスピードもPCが重くない場合限り、通常どおりです

→ オブジェクトの処理量を増やす方法4
← オブジェクトの処理量を増やす方法2
← 点滅現象について
← メインページ