|
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()が必ず着いている」ことを理解して頂けるものと思います。 |