トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     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

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops