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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   とにかくFLASH【FLASHに関して全般】
     MovieClipLoader リスナーからクラスメソッドの呼び出し
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
Åê¹ÆNo.6498
投稿日時: 2004-4-23 13:18
MovieClipLoader リスナーからクラスメソッドの呼び出し
エフェクト付きスライドショーを作っているのですが、MovieClipLoaderに関して質問です。

全体の流れは、コンストラクタから画像読込メソッド(preloadImage)を呼び出し、画像読込完了後マスク生成メソッド(creatMask)を呼び出す・・・という風に書いています。
が、どうもリスナー(onLoadComplete)から呼び出しているメソッド(createMask)が反応していないようです。
根本的にコードの記述方法が間違っているかもしれませんが、原因が分かる方がいましたらご教授お願いします。

以下、コードです。(実際のコードからだいぶ端折ってます)

ルートの1フレーム目に記述

var props:Object = {url:"images/01.jpg", size:20};
attachMovie("SlideShow", "slideShow", 1, props);


SlideShow.as

class SlideShow extends MovieClip {
	public var url:String, size:Number;
	public var buffer:MovieClip;
	public function SlideShow() {
		preloadImage();
	}
	public function preloadImage():Void {
		createEmptyMovieClip("buffer", 1);
		var clipLoader:MovieClipLoader = new MovieClipLoader();
		var clipListener:Object = new Object();
		clipLoader.addListener(clipListener);
		clipLoader.loadClip(url, buffer);
		clipListener.onLoadComplete = function() {
			trace("onLoadComplete"); //出力 onLoadComplete
			createMask();
			clipLoader.removeListener(this);
		};
	}
	public function createMask():Void {
		trace("createMask"); //出力なし
		var i:Number = 0;
		var y:Number = 0;
		while (i<3) {
			var props:Object = {url:url, size:size, xPos:0, yPos:y};
			attachMovie("SlideMask", "slideMask"+i, i, props);
			y += size;
			i++;
		}
	}
}
野中文雄
Åê¹ÆNo.6504
投稿日時: 2004-4-23 15:44
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: MovieClipLoader リスナーからクラスメソッドの呼び出し
ターゲットが正しくありません。
引用:
futchさんは書きました:
が、どうもリスナー(onLoadComplete)から呼び出しているメソッド(createMask)が反応していないようです。

class SlideShow extends MovieClip {
	public var url:String, size:Number;
	public var buffer:MovieClip;
	public function SlideShow() {
		preloadImage();
	}
	public function preloadImage():Void {
		createEmptyMovieClip("buffer", 1);
		var clipLoader:MovieClipLoader = new MovieClipLoader();
		var clipListener:Object = new Object();
		clipLoader.addListener(clipListener);
		clipLoader.loadClip(url, buffer);
		clipListener.owner = this;  //【追加】
		clipListener.onLoadComplete = function() {
			trace("onLoadComplete"); //出力 onLoadComplete
			// createMask();
			this.owner.createMask();  //【修正】
			clipLoader.removeListener(this);
		};
	}
	public function createMask():Void {
		trace("createMask"); //出力なし


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

ゲスト
Åê¹ÆNo.6536
投稿日時: 2004-4-24 9:49
Re: MovieClipLoader リスナーからクラスメソッドの呼び出し
パスを明示的に指定する必要があるんですね。
無事動きました。
ありがとうございました!
野中文雄
Åê¹ÆNo.6537
投稿日時: 2004-4-24 9:58
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: MovieClipLoader リスナーからクラスメソッドの呼び出し
念のため、補足しておきます。

リスナーオブジェクト(clipListener)にコールバック関数(onLoadComplete)を定義した場合、関数ブロック内のthisはリスナーオブジェクトを参照します。したがって、リスナーオブジェクトを生成したクラス(SlideShow)のインスタンスメソッド(createMask())を呼出したいときは、そのインスタンスの参照(パス)をリスナーオブジェクトに保持しておく必要があります。
引用:
futchさんは書きました:
パスを明示的に指定する必要があるんですね。


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

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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