![]() |
||||||||||||||||||
|
|
0. 基礎 update() - もっとも基礎とされながら忘れられがちな関数 Tonyuのチュートリアルを一通り作成して、独り立ちしようかとされている方に多く見られる現象があります。それはずばり1フレームに終了時にupdate()がないということです。 そもそも、update()とは何をしているのでしょうか?これを理解しないことにはupdate()をどこに置けばよいのかわからず仕舞いです。 update()とは、「描画」を行っております。update()が無ければ、画像が更新されず、処理だけが高速で行われます。結果的に処理が重くなってしまうわけです。また、処理が重くなるのは、update()がないという現象のほんの一端に過ぎません。その他、プログラムからは予想もできない現象が起ったりしてしまいます(APIレファレンス(命令リファレンス)「update」参照)。 では、どういった場合にupdate()に気を使わなければならないのでしょうか?
それでは、それ以外の場合にはどうでしょうか?それ以外の場所には置かなくても大丈夫です。
--------------------------------------------------------
teki.tonyu - チュートリアル「シューティング」より
--------------------------------------------------------
extends SpriteChar;
function onDie() {
appear(new Bomb(x , y ,$pat_Sample+4));
}
function atariHantei() {
for (t in $chars) {
if ( t is Tama && crashTo(t) ) {
die();
$score=$score+10;
}
}
if (crashTo($myChar)) $myChar.die();
}
nexty=rnd(50)+100;
while (y<nexty) {
y=y+2;
atariHantei();
update();
}
if (xx>$myChar.x) vx=2; else vx=-2;
while (y<$screenHeight) {
y=y+3;
x=x+vx;
atariHantei();
update();
}
--------------------------------------------------------
これから見てお分かり頂けるように、update()は1フレーム(while文などの一回り)の終了時に置いて下さい。下の例も参考にしてみてください。
--------------------------------------------------------
example - 命令リファレンス「waitInput 例」より
--------------------------------------------------------
extends SpriteChar;
while (1) {
r=waitInput("どっちへいきますか","\"L\":← \"R\":→ "); // rに入力結果をいれる
if ($InputBox.getStatus()==2) die(); // キャンセル押したら死亡
if (r=="Left") { // "Left" を入力したら 、左に移動
for (i=0 ; i<16 ; i++) {
x--;
update();
}
}
if (r=="Right") { // "Right" を入力したら 、左に移動
for (i=0 ; i<16 ; i++) {
x++;
update();
}
}
update();
}
--------------------------------------------------------
while()の中にupdate()が3つありますが、「for文の中の1フレーム終了時にupdate()が必ず着いている」ことを理解して頂けるものと思います。 |
|||||||||||||||||