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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     classからrootの変数へアクセスしたい
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
k-suzuki
Åê¹ÆNo.36578
投稿日時: 2007-11-30 23:19
新米
居住地: 東京
投稿: 7
使用環境:
windowsXP,CS3
classからrootの変数へアクセスしたい
FLASH CS3で開発を行っているのですが、
疑問に思った点がありまして、
書き込みをさせていただきます、


音のファイルを管理しているclassがありまして、
各フレームにはそれを配置して、
音がなるように制作しました。

その後、最終的な仕様変更で、rootにある変数を見て、
音をならすか、ならさないかに分岐しなければ
いけなくなったのですが、
簡単な方法として、class側からrootにある変数を見て、
分岐させようと思いました。
(as2で言う、_root.bSndFlag と参照するような形で)

ですが、class側に、
rootObj:Object = this.root;
等を書いても、
「未定義のプロパティrootへのアクセスです」
と出てしまい、アクセスすることが出来ませんでした。

classはrootの定義を持っていないと
言うことだと思うのと、そもそも、
classから上の階層へアクセスするのは、
何か順列的に変なような気はするのですが、
何か方法はあるものなのでしょうか?

もしご存じの方がいらっしゃいましたら、
教えていただければ嬉しいです。

まだ慣れないas3に苦戦中の毎日です・・・
野中文雄
Åê¹ÆNo.36579
投稿日時: 2007-12-1 0:52
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: classからrootの変数へアクセスしたい
rootは、DisplayObjectクラスのプロパティです。しかも、「そのオブジェクトがディスプレイリストに加わっていなければ、nullが設定されます」。
var _mc:MovieClip = new MovieClip();
trace(_mc.root);
addChild(_mc);
trace(_mc.root);

メインタイムラインにアクセスする必要がある場合には、クラスのコンストラクタ呼出し時にそのタイムラインを引数として渡すのがよいでしょう。
引用:
k-suzukiさんは書きました:
簡単な方法として、class側からrootにある変数を見て、
分岐させようと思いました。
(as2で言う、_root.bSndFlag と参照するような形で)

ですが、class側に、
rootObj:Object = this.root;
等を書いても、
「未定義のプロパティrootへのアクセスです」
と出てしまい、アクセスすることが出来ませんでした。


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

k-suzuki
Åê¹ÆNo.36581
投稿日時: 2007-12-1 12:00
新米
居住地: 東京
投稿: 7
使用環境:
windowsXP,CS3
Re: classからrootの変数へアクセスしたい
野中様、早速のご返信、どうもありがとうございます。
そうですよね、やはりそうするしか、
アクセスする方法は無いですよね・・。

何かglobal的な物で、とにかくどんな時でも、
as2のように、rootにアクセスできるような物が
あるかもしれない・・と考えていたのですが・・。


・・余談ではありますが、Directorを使っていた昔から、
野中様の著書は何度も拝見させていただいてました。
ご意見を頂け、とても嬉しく思います。
それでは、どうもありがとうございました。
STWKS
Åê¹ÆNo.37111
投稿日時: 2008-1-9 13:22
新米
居住地:
投稿: 2
使用環境:
Mac OSX 10.5.1, Flash CS3
Re: classからrootの変数へアクセスしたい
今更ではありますが、AS2の_globalのようなことをしたい場合に私は以下のようなクラスを作って必要な箇所でimportして使っています。どこからでも値を変更できて、どこからでもCHANGEイベントのリスナーを登録できます。

SWFAddressのソースを参考にして作ったものです。


package {

	import flash.events.Event;
	import flash.events.EventDispatcher;

	public class StaticValue {
		private static var _init:Boolean = false;
		private static var _value:Number;
		private static var _dispatcher:EventDispatcher = new EventDispatcher();

		private static function _initialize():Boolean {
			_value = 0;
			return true;
		}
		private static var _initializer:Boolean = _initialize();

		private static function _dispatchEvent(type:String):void {
			if (_dispatcher.hasEventListener(type)) {
				_dispatcher.dispatchEvent(new Event(type));
			}
		}

		public static function getValue():Number {
			return _value;
		}
		
		public static function setValue(value:Number):void {
			if (_value == value) return;
			_value = value;
			_dispatchEvent(Event.CHANGE);
		}
		
		//
		// Methods for EventDispatcher
		//
		public static function addEventListener(type:String, listener:Function):void {
			_dispatcher.addEventListener(type, listener, false, 0, false);
		}

		public static function removeEventListener(type:String, listener:Function):void {
			_dispatcher.removeEventListener(type, listener, false);
		}

		public static function dispatchEvent(event:Event):Boolean {
			return _dispatcher.dispatchEvent(event);
		}

		public static function hasEventListener(type:String):Boolean {
			return _dispatcher.hasEventListener(type);
		}

	}
}


このコードは適当に書いたのでちゃんと動くかためしてませんが、こんなやり方で実際に動かしたことはあります。
k-suzuki
Åê¹ÆNo.37333
投稿日時: 2008-1-25 13:06
新米
居住地: 東京
投稿: 7
使用環境:
windowsXP,CS3
Re: classからrootの変数へアクセスしたい
ご返信が遅くなってしまってすみません!
コードの方、どうもありがとうございます!
今週末にでも、自分の環境で実行してみたいと思います。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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