メイン コーダーズルーム【スクリプト系】 timer関数を使ってMCを生成したいのですがブラウザ上で処理が遅れます | 投稿するにはまず登録を |
フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
maki_an | Åê¹ÆNo.45289 投稿日時: 2010-7-6 3:02 |
半人前 居住地: 東京 投稿: 47
使用環境:
|
timer関数を使ってMCを生成したいのですがブラウザ上で処理が遅れます フレームレートは25。
var flameTimerで40ミリ秒に1回、 つまり1秒に25回タイマーイベントを発生させ、 MCを生成したり生成したMCを移動させたりしているのですが、 swfを書き出した時点では何の遅延も発生しないのに、 htmlに搭載してブラウザで見ると、遅延が発生するのです。 ビートマニアのようなリズムゲームなのでズレをなくしたいのですが、曲のペースに対してMCの生成がだんだんずれていってしまうのです。 曲とMC生成のタイミングをずらさない方法はないものでしょうか? こういうときはタイマー関数ではなくenterframeのほうがよいのでしょうか? どなたか、適した方法をご存知の方、お教えください。 よろしくお願いいたします。 import flash.media.Sound; import flash.media.SoundChannel; import flash.media.*; var sound_obj;// サウンドオブジェクト var channel;// サウンドチャンネル var url; url = new URLRequest("mure.mp3"); sound_obj = new Sound(url); //1ライン目オブジェクトの出現間隔を設定する(ミリ秒 dupTimeLine01=new Array(3510,4367,5224,6081,6938,7795,8652,9509,9937, 10366,11223,12080,12937,13794,15508,15936,16365 ,17222,18079,18936,19793,20650,22364,22792,23221, 24078,24935,25792,26649,27506,28363,29220,30077,30505); import flash.events.TimerEvent; // 40 ミリ秒の Timer を新規作成する(フレームレート25/s用 var flameTimer:Timer = new Timer(40,0); flameTimer.start(); var my_gameover = "game_over01"; var my_clear = "clear01"; function denryokuDown01(e:TimerEvent):void { denryoku = denryoku - gensyou01;//電力ゲージを減らす if (denryoku <= 0) { gotoAndStop(my_gameover);//ゲームオーバーの演出へ flameTimer.removeEventListener(TimerEvent.TIMER, denryokuDown01); //電力減少リスナーの削除; flameTimer.removeEventListener(TimerEvent.TIMER, stageEnd01); //クリア用リスナーの削除; flameTimer.reset(); } } flameTimer.addEventListener(TimerEvent.TIMER, denryokuDown01); //40ミリ秒ごとにdenryokuDownを実行; flameTimer.addEventListener(TimerEvent.TIMER, stageEnd01); //制限時間に達するとstageEnd01を実行; function stageEnd01(e:TimerEvent):void { if (flameTimer.currentCount * 40 / 1000 >= stageTime) { gotoAndStop(my_clear);//ステージ1クリアの演出へ trace() flameTimer.removeEventListener(TimerEvent.TIMER, denryokuDown01); //電力減少リスナーの削除; flameTimer.removeEventListener(TimerEvent.TIMER, stageEnd01); //クリア用リスナーの削除; flameTimer.reset(); } }//タイマーの停止リセット function makeMc(e:TimerEvent):void{ if(flameTimer.currentCount*40>=dupTimeLine01[0]){ dupTimeLine01.shift();//配列dupTimeLine01をシフト var _mc:Ghost = new Ghost();//_mcを生成 addChild(_mc); _mc.x=mcX01;//指定座標(mcX01,mcY01)に_mcを移動 _mc.y=mcY01; var myYpos:Number=mcY01;//ローカル変数"myYpos"に初期位置を記憶させる flameTimer.addEventListener(TimerEvent.TIMER,yShift);//40ミリ秒ごとにyShiftを実行 function yShift(e:TimerEvent):void{ _mc.y=myYpos+spd01//_mcのY座標にスピード制御変数"spd01"を加えて_mcを下方向へ移動 myYpos=myYpos+spd01//現在のY座標を修正 //_mcのY座標が"delPos"に到達した場合 if(_mc.y>=delPos||end_check==1){ removeChild(_mc);//_mcを削除 flameTimer.removeEventListener(TimerEvent.TIMER,yShift);//リスナーyShiftを削除 } //_mc._mc_hit_area01とステージ上のhantei01の当たり判定 if(hit_check_mc01.hantei01.hitTestObject(_mc._mc_hit_area)){ hit_ok01.gotoAndPlay("hit");//hit_ok01内のヒットエフェクトを呼び出し connect1.right.gotoAndPlay("hit");//hit_ok01内のヒットエフェクトを呼び出し denki.gotoAndPlay("hit");//hit_ok01内のヒットエフェクトを呼び出し denryoku_pre=denryoku+point01;//電力ゲージをpoint01の値だけプラス if(denryoku_pre>=denryoku_max){ denryoku=denryoku_max; }else{ denryoku=denryoku_pre; } removeChild(_mc);//_mcを削除 flameTimer.removeEventListener(TimerEvent.TIMER,yShift); } } } } flameTimer.addEventListener(TimerEvent.TIMER, makeMc);//40ミリ秒ごとにmakeMcを実行 |
フラット表示 | 前のトピック | 次のトピック |
題名 | 投稿者 | 日時 |
---|---|---|
» timer関数を使ってMCを生成したいのですがブラウザ上で処理が遅れます | maki_an | 2010-7-6 3:02 |
投稿するにはまず登録を | |