- 2010年05月18日 (火)
- Tweet
ActionScript 3.0でAS2のような_global変数を使う方法
ちょっとした子ネタの紹介。ActionScript 1.0/2.0の頃にFlashのどこからでも参照できる「_root」や「_global」という変数がありました。それをActionScript 3.0でも使う方法です。
手順1.ファイルを用意
flaからパスの通った階層(とりあえずflaファイルと同じ階層でOK)に「_global.as」というASファイルを作成します。
手順2. スクリプトを記述
ASファイル「_global.as」に次の三行を記述します。
package { public const _global:Object = {}; }
はい、以上です。
試しにスクリプトを記述
フレームアクションでもクラスでもどちらでもいいので、次のスクリプトを記述してみましょう。
_global.my_num = 1000; _global.my_str = "moja"; trace(_global.my_num); trace(_global.my_str);
出力パネルに結果が表示されるはずです。
一応、説明
ActionScriptファイルはクラスファイルのみを記述できると思われがちですが、packageの括弧内(かつclassの括弧の外側)に記述することでこのように任意の変数やメソッドを定義することもできます。変数_globalはObject型として型指定したため、何でも挿入できます。
packageパスは特に記述しないことでデフォルトの名前空間になるため、どこからでもimport文を通さずに参照できるというわけです。
少しバッドノウハウの紹介でしたが、応急処置的にグローバル変数を利用したいときや、AS2からの移行を考えている方には役立つかもしれませんね。
ソースのダウンロード
ソースファイルはこちらからダウンロードできます。(Flash CS4形式)
2010年05月18日(火) 16:52
varじゃなくて、constのほうがいいかもです。
2010年05月19日(水) 18:49
こんにちは。
僕はASをやり始めてまだ1年経っていなくて、作ったクラス殆どにdispatchEventでイベントを配置してデータを持ってきて・・・・なんていうことをやっていたりしたのですが。
なるほど、こんなこともできるのですね、次のステップに進めそうです。
ちなみにこの頃static変数とかでも同じようなことができると知ったのですが、それよりも簡単ですね。
2010年05月20日(木) 13:37
>通りすがり
あー、確かにそうですね。
直しておきました。
>mashooさん
バッドノウハウとはいえ、AS2の頃はこれがデフォルトだったので、割りきってしまえばいいのかなと思いました。
Flashはもともと自由度の高い開発環境なので、使える機能は自由に使って、自分にあった使用方法を見出していければ良いのかなと思っています。
2010年07月24日(土) 12:43
[…] ActionScript 3.0でAS2のような_global変数を使う方法 […]
2011年03月18日(金) 17:56
强!
2011年04月09日(土) 19:26
[…] ClockMaker Blog […]
2011年04月09日(土) 19:33
[…] ClockMaker Blog […]
2011年07月01日(金) 22:52
[…] ClockMarker.jp:ActionScript 3.0でAS2のような_global変数を使う方法 […]
2013年06月30日(日) 18:47
初心者でよく分からないのですが、_globalで配列を使いたい時はどのようにするのでしょうか?
2013年07月04日(木) 13:29
>ビギナーさん
_globalで配列を扱いたいときは任意のプロパティを作成するのはいかがでしょう?
例:
_global.arr = [“hoge”, “fuga”, “piyo”];