AS3 経過時間を表示する(テキスト版)
- 時間:2009年12月 8日 13:01
-
delicious に登録
-
はてブに登録
- トラックバック:(0)
- コメント:(0)
必要な時は下記の時など。
- ゲームの作成時に経過時間表示が必要な時
- mp3プレーヤー・FLVプレーヤー作成時、経過時間表示が必要な時
作成手順
- なんらかの方法で経過時間を取得(今回は単純にgetTimer()で取得しています。)FLVの時は確かstream(NetStream).timeが経過時間やったような・・
- _convertTime関数を用意して経過時間をミリ秒・秒・分・時(そこまではいらん?)に分解する
- 秒・分なら60 ミリ秒なら1000を超えないように処理を施す。この作業を省くと65秒などがありえてしまいます。
- 次に10以下の時は左に0を足すといった処理を施す
- 最後にTextFieldにtext!!
上記だけ理解しておけば経過時間表記など楽勝!!
今回は簡単にテキストだけだがよく使うので見た目をよくするために要画像化。
【サンプルswf】
【Sample20091208.as】
package {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.utils.getTimer;
public class Sample20091208 extends Sprite {
private var _startBtn:TextBtn;
private var _timeText:TextField;
private var _hackTime:Number;
public function Sample20091208():void {
_init();
}
private function _init():void {
_timeText= new TextField();
_timeText.width = 200;
_timeText.y = 2;
_timeText.autoSize = TextFieldAutoSize.CENTER;
_timeText.selectable=false;
addChild(_timeText);
_timeText.x = stage.stageWidth / 2 - _timeText.width / 2;
_timeText.y = stage.stageHeight / 2 - _timeText.height / 2;
_startBtn = new TextBtn("スタート");
addChild(_startBtn);
_startBtn.x = stage.stageWidth / 2 - _startBtn.width / 2;
_startBtn.y = stage.stageHeight -40;
_convertTime(0);
_startBtn.addEventListener(MouseEvent.MOUSE_DOWN, _startHandler);
}
private function _startHandler(e:MouseEvent):void {
_hackTime = getTimer();
addEventListener(Event.ENTER_FRAME, _onEnterFrameHandler);
}
private function _onEnterFrameHandler(e:Event):void {
/*
* ムービーが動作している時間をミリ秒で返してくれる _hackTimeでどれ位時間が経過したかを取得して現在の時間から引く
*/
var progressTime:uint = getTimer() - _hackTime;
_convertTime(progressTime);
}
private function _convertTime(_time:Number):void {
/* ミリ秒を取得 */
var _mil:Number= _time;
/* 秒を取得 */
var _sec:Number = Math.floor(_mil / 1000);
/* 分を取得 */
var _min:Number = Math.floor(_sec / 60);
/* 時を取得 */
var _hou:Number = Math.floor(_min / 60);
/* 秒・分なら60 ミリ秒なら1000を超えないように処理を施す。この作業を省くと65秒などがありえてしまいます。 */
_mil %= 1000;
_sec %= 60;
_min %= 60;
/* 三桁は必要ないので10で割る */
_mil = uint(_mil / 10);
/* 表示に関する制御(二桁以下なら0を表記する) */
var _milStr:String = String(_mil);
_milStr = ((_milStr.length < 2) ? "0" : "") + _milStr;
var _secStr:String = String(_sec);
_secStr = ((_secStr.length < 2) ? "0" : "") + _secStr;
var _minStr:String = String(_min);
_minStr = ((_minStr.length < 2) ? "0" : "") + _minStr;
var _houStr:String = String(_hou);
_houStr = ((_houStr.length < 2) ? "0" : "") + _houStr;
_timeText.text = _houStr + ":" + _minStr + ":" + _secStr + ":" + _milStr;
}
}
}
import flash.display.Sprite;
import flash.text.*;
dynamic class TextBtn extends Sprite {
public function TextBtn(str:String):void {
this.graphics.beginFill(0x666666);
this.graphics.drawRect(0,0, 100, 22);
this.graphics.endFill();
this.buttonMode = true;
this.mouseChildren = false;
var tf= new TextField();
tf.width = 100;
tf.y = 2;
tf.autoSize = TextFieldAutoSize.CENTER; //autoSizeを指定しないと高さが100pxになる
tf.selectable=false;
this.addChild(tf);
var format:TextFormat=new TextFormat();
format.color=0xFFFFFF;
format.size = 12;
tf.defaultTextFormat = format;
tf.text = str;
}
}
AS3 経過時間を表示する(テキスト版)に対してコメントをする