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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     Timerクラス/timer.currentCountプロパティについて
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
joyko
Åê¹ÆNo.43802
投稿日時: 2009-10-28 3:16
常連
居住地: 埼玉県
投稿: 167
使用環境:
WinXP(SP3)
Flash8 Basic
FlashCS3
Flash CS4
Timerクラス/timer.currentCountプロパティについて
皆さん、
いつも、お世話になってます。
今日の質問は、良くあるスライドショーですが、【自動で、外部JPGを同じloaderに、順番に読み込み、ループさせるのですが、別途設置したボタンクリックで、該当JPGを読み込み、ボタンをロールアウトすると、その次のJPGを自動で、読み込むタイプ】をTimerクラスで作るにはどうすればいいのでしょうかという質問です。

【ケース1:AS3.0では非推奨のsetInterval();を使えば、簡単にできます。】

var max:uint=5;//生成するボタンの数
var n:uint=0;//現在表示のJPG番号(1.jpg、2.jpg、3.jpg、・・・・のように番号付けしてる場合は、0.jpgの意味)

//loader設置領域
var loader:Loader=new Loader();
addChild(loader);

//ボタン設置領域→ここは、今回は、重要でないです
for (var i:uint=1; i<=max; i++) {
	var btn:MovieClip= new Btn();//ライブラリー内 MovieClip クラス名 Btnから生成
	addChild(btn);
	btn.buttonMode=true;
	btn.id=i;
	btn._txt.mouseEnabled=false;
	btn.x=-10+60*i;
	btn.y=350;
	btn._txt.text= String(i)+"番";
	btn.addEventListener(MouseEvent.ROLL_OVER,xRollover,false,0,true);
	btn.addEventListener(MouseEvent.ROLL_OUT,xRollout,false,0,true);
	btn.addEventListener(MouseEvent.CLICK,xClick,false,0,true);
}

function xRollover(e:MouseEvent):void {
	clearInterval(timer);
}
function xRollout(e:MouseEvent):void {
	timer=setInterval(Move,2000);
}
function xClick(e:MouseEvent):void {
	trace("btnの番号 = "+e.target.id);
	loader.load(new URLRequest("../fotos0/"+e.target.id+".jpg"));
	n=e.target.id//ここで、JPG番号変更可能
}

//timer設置領域
var timer:uint=setInterval(Move,2000);
trace("timerの連番:"+timer);
function Move() {
	clearInterval(timer);//都度、定番のcleariInterval();
	n++;
	if (n>max) {
		n=1;
	}
	trace("変数 nの番号 = "+n);
	loader.load(new URLRequest("../fotos0/"+n+".jpg"));
	timer=setInterval(Move,2000);//再設定
	trace("timerの連番: "+timer);
}

【ケース2:AS3.0推奨のTimerクラス使用時が質問対象です】

var max:uint=5;//生成するボタンの数
//loader設置領域
var loader:Loader=new Loader();
addChild(loader);
//timer設置領域
var timer:Timer=new Timer(2000,5);
timer.start();
timer.addEventListener(TimerEvent.TIMER,xTimer,false,0,true);
timer.addEventListener(TimerEvent.TIMER_COMPLETE,yTimer,false,0,true);

function xTimer(e:TimerEvent):void {
	trace(timer.currentCount);
	loader.load(new URLRequest("../fotos0/"+timer.currentCount+".jpg"));
}

function yTimer(e:TimerEvent):void {
	timer.reset();
	timer.start();
}

//ボタン設置領域→今回、ここは、重要でないです。
for (var i:uint=1; i<=max; i++) {
	var btn:MovieClip = new Btn();
	addChild(btn);
	btn.buttonMode=true;
	btn.id=i;
	btn._txt.mouseEnabled=false;
	btn.x=-10+60*i;
	btn.y=350;
	btn._txt.text= String(i)+"番";
	btn.addEventListener(MouseEvent.ROLL_OVER,xRollover,false,0,true);
	btn.addEventListener(MouseEvent.ROLL_OUT,xRollout,false,0,true);
	btn.addEventListener(MouseEvent.CLICK,xClick,false,0,true);
}

function xRollover(e:MouseEvent):void{
	timer.stop();
}
function xRollout(e:MouseEvent):void{
	timer.start();
}

function xClick(e:MouseEvent):void {
	trace(e.target.id);
	loader.load(new URLRequest("../fotos0/"+e.target.id+".jpg"));
	//timer.currentCount=e.target.id;//timer.currentCountは、読み取り専用プロパティなので、代入不可
	//ボタンクリック時の番号を、timerに引き渡す方法を、ご教授頂ければというのが、質問です
}

長くなりましたが、ご教授の程、よろしく、お願い致します。

野中さんのご回答を得て、解決済みです。
修正scriptは、最新投稿記事に、記載してます。
野中文雄
Åê¹ÆNo.43803
投稿日時: 2009-10-28 3:59
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: Timerクラス/timer.currentCountプロパティについて
「Timerクラスで作る」場合も、「setInterval()」と同じく、変数(n)を使えば処理できるのではありませんか?そうでなく、Timerインスタンスに変数を設定したいということですと、dynamicなクラスでないかぎりできません。どうしても実現したい場合には、サブクラスを定義します。
var n:uint = 0;
// var timer:Timer = new Timer(2000,5);
var timer:MyTimer = new MyTimer(2000, 5);
timer.start();
timer.addEventListener(TimerEvent.TIMER,xTimer,false,0,true);
// timer.addEventListener(TimerEvent.TIMER_COMPLETE,yTimer,false,0,true);
function xTimer(e:TimerEvent):void {
	// trace(timer.currentCount);
	trace(timer.currentCount, n, timer.id);
	// loader.load(new URLRequest("../fotos0/"+timer.currentCount+".jpg"));
}
btn.id = 100;
btn.addEventListener(MouseEvent.CLICK,xClick,false,0,true);
function xClick(e:MouseEvent):void {
	trace(e.target.id);
	// loader.load(new URLRequest("../fotos0/"+e.target.id+".jpg"));
	// timer.currentCount=e.target.id;
	timer.id = e.target.id;
	n = e.target.id;
}

package {
	import flash.utils.Timer;
	public class MyTimer extends Timer {
		public var id:Number = 0;
		public function MyTimer(delay:Number, repeatCount:int = 0) {
			super(delay, repeatCount);
		}
	}
}


----------------
 

joyko
Åê¹ÆNo.43804
投稿日時: 2009-10-28 8:51
常連
居住地: 埼玉県
投稿: 167
使用環境:
WinXP(SP3)
Flash8 Basic
FlashCS3
Flash CS4
Re: Timerクラス/timer.currentCountプロパティについて
野中さん、
ありがとうございます!
引用:
「Timerクラスで作る」場合も、「setInterval()」と同じく、変数(n)を使えば処理できるのではありませんか?そうでなく、Timerインスタンスに変数を設定したいということですと、dynamicなクラスでないかぎりできません。どうしても実現したい場合には、サブクラスを定義します。

そうですよね。
朝起きて、ふと、timer.currentCountに、固執し過ぎている自分に、気づきました。
こちらを、念のため、訪問してみると、すでに、野中さんがご指摘されている、回答を見させて頂きました!

一人でやっていると、発想の転換ができないですが、本当に、助かります。改めて、御礼申し上げます。

以下、変数 n を、timerでも、btnでも変化させ、btnで変更した最新値を、引き渡すようにしました。本記事をご覧の方々へ、ご参考までに。
//1.jpg、2.jpg?5.jpgを外部JPGとして準備
import fl.transitions.Tween;//Tweenクラスをimportする
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;

//初期値設定領域
var max:uint=5;//生成するボタンの数
var n:uint=0;//現在表示のJPGの番号
var aLpha:Tween;

//loader設置領域
var loader:Loader=new Loader();
addChild(loader);
loader.contentLoaderInfo.addEventListener(Event.INIT,xInit,false,0,true);

//ボタン設置領域
var btn_array:Array=new Array();//btnオブジェクトを格納する配列生成
for (var i:uint=1; i<=max; i++) {
	var btn:Btn = new Btn();//ライブラリ内にある、2フレームからなるMovieClip、クラス名 Btnからインスタンス生成
	addChild(btn);
	btn_array.push(btn);//btnを配列に格納し、
	btn.buttonMode=true;
	btn.id=i;
	btn._txt.mouseEnabled=false;
	btn.x=-10+60*i;
	btn.y=350;
	btn._txt.text= String(i)+"番";
	btn.addEventListener(MouseEvent.ROLL_OVER,xRollover,false,0,true);
	btn.addEventListener(MouseEvent.ROLL_OUT,xRollout,false,0,true);
	btn.addEventListener(MouseEvent.CLICK,xClick,false,0,true);
}

//timer設置領域
var timer:Timer=new Timer(3000);//3秒間隔で、無限に刻むタイマー設置
timer.start();
timer.addEventListener(TimerEvent.TIMER,xTimer,false,0,true);

//各function設置領域
function xInit(e:Event):void {
	aLpha=new Tween(e.target.content,"alpha",None.easeInOut,0,1,1,true);
}

function xTimer(e:TimerEvent):void {
	n++;
	if(n>max){
		n=1;
	}
	trace("現在表示のJPG番号 = "+n);
	for (var k:uint=0; k<max; k++) {//btnの第一フレームと第二フレームを往復させ、条件によって、色変更
		if (k!=(n-1)) {
			btn_array[k].prevFrame();
		} else {
			btn_array[n - 1].nextFrame();
		}
	}
	loader.load(new URLRequest("../fotos0/"+n+".jpg"));
}

function xRollover(e:MouseEvent):void {
	timer.stop();
	trace("timer停止");
}
function xRollout(e:MouseEvent):void {
	timer.start();
	trace("timerスタート");
}

function xClick(e:MouseEvent):void {
	for (var k:uint=0; k<max; k++) {//btnの第一フレームと第二フレームを往復させ、条件によって、色変更
		if (k!=(e.target.id-1)) {
			btn_array[k].prevFrame();
		} else {
			btn_array[e.target.id - 1].nextFrame();
		}
	}
	trace("クリックされたJPG番号= "+e.target.id);
	loader.load(new URLRequest("../fotos0/"+e.target.id+".jpg"));
	n=e.target.id;//nをRefreshさせる
}
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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