ここでは同期式のプログラムと非同期式のプログラムの違いを軽く説明します
同期とは簡単に言えば複数の事柄が同時に起こることです。
今回は正男でのプログラムなので、簡単に説明しますと、
非同期式はゲーム本体であるJavaAppletとJavaScriptのプログラムが別々に動作している状態です。
一方同期式はJavaAppletからJavaScriptのプログラムを呼び出して、同時に動作している状態です。
まさおコンストラクションFX Update11以降では一部のメソッドは非同期式プログラムでは使用できません。
まずは適当な関数を作り、それを「timerID = setInterval("関数名",実行間隔時間(ms))」命令で動作させるだけです。
これは、指定した関数を指定した時間間隔で実行させるものです。
この場合だとアプレットとは無関係に指定した時間で動いていることになります。
また、非同期式は表示がおかしくなったり、ゲーム開始時にエラーが起きて動かないこともあります。
setIntervalメソッドはタイマーIDを戻り値として返すので2つ以上つける時は変数を別のものにしてください。
エラーが起きている場合IEなら下に三角形で囲まれた「!」マークが出ています。
FireFoxならエラーコンソールにエラー内容が表示されています。
こうなっていた場合、一旦ブラウザの「戻る」をクリックし、ブラウザの「次へ」をクリックしてください。
プログラムのミスでない場合は正常に動作するようになります。
bodyタグに「onLoad="実行したい関数(ここではonLoadJS())"」を加え、onLoadJS()内にtimerIDを使って
非同期式のプログラムを実行すると、非同期式でも起動時のエラーが起きなくなります。(おそらく)
function onLoadJS() { Applet1 = document.getElementById("applet1_id"); timerID = setInterval("mainLoop()",100); } <body … onLoad="onLoadJS()">
クラスファイルは「MasaoXJSS2.class」か「MasaoJSS.class」を使用します。
appletタグは以下のように記述します。
<applet code="MasaoXJSS2.class" width="512" height="320" archive="mc_c.jar" id="Applet1" mayscript>「mayscript」をappletタグ内に必ず記述してください。そういう仕様です。
同期式の場合、ページ変更などによってエラーが発生する可能性があります。
そこでbodyタグに「onUnload="実行したい関数(ここではonUnloadJS())"」を加え、次のように記述します。
//グローバル変数 var unload_f = 0; var init_f = 0; function userJS(Offscreen_g.mode.view_x,view_y) { if(unload_f > 0) return; if(init_f == 0) { init_f = 1; userInitJS(); } if(mode == 1) { userTitleJS(Offscreen_g); } else if(mode >= 100 && mode < 200) { if(Applet1.getJSMes() >= 1) { Applet1.setJSMes(0); userGameStartJS(); } else { userGameJS(Offscreen_g,view_x,view_y); } } else if(mode == 200) { userGameoverJS(Offscreen_g); } else if(mode == 300) { userEndingJS(Offscreen_g); } else if(mode == 400) { userChizuJS(Offscreen_g); } } function onUnloadJS() { unload_f = 1; } <body … onUnload="onUnloadJS()">
自分は同期式をお勧めします。
非同期式では使えないメソッドがあるからです。