重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

現在AS3.0を勉強中です。
基本中の基本だと思いますがパスが上手く通っていないようなので
ご教授願いたく。

1.ステージ上にテキストボックス(ダイナミックテキスト)を配置しインスタンス名を「hako」としています。

2.rootに以下のスクリプトを記述
-------------------------------------------------
addEventListener(Event.ENTER_FRAME,syori);
function syori(eventObject:Event):void {
hako.text=String(stage.mouseX);
}
-------------------------------------------------

ここまでは問題なく動作しています。
2をrootでは無く任意のムービークリップから処理させるべく・・・

3.「abc」というインスタンス名のムービークリックを作成しステージに配置。この1フレーム目に以下のスクリプトを記述
-------------------------------------------------
addEventListener(Event.ENTER_FRAME,syori);
function syori(eventObject:Event):void {
parent.hako.text=String(stage.mouseX);
}
-------------------------------------------------
※この際、2でrootに記述したスクリプトは消しています。

これで動くと思ったのですがエラーがでます。(ToT;)
「parent.hako.text」の部分を「root.hako.text」としてもエラーがでます。「_parent」も「_root」も駄目です。(「_」付はAS2.0までですよね?)

今回はダイナミックテキストは使った例ですが、
単純にムービークリップをステージに配置して、その座標を指定するような処理でも、
他のムービークリップから別のムービークリップを参照する方法が解りません(汗)

どうすればよいでしょうか?
AS2.0までは上記のような形でパスが通ったと思うのですが・・・

A 回答 (2件)

まず最初に、AS3ではムービークリップごとにそれぞれのフレームに記述する方法はお勧めできません。

どうしても使用したい場合も、addEventListenerなどを使用して、parentなどの他のムービークリップにアクセスするような記述は極力避けるように書かなければAS3で書くメリットはあまりないです。

それを前提とした上で、parentへは以下のようにアクセスします。

-------------------------------------------------
function syori(eventObject:Event):void {
//parentを一旦変数に入れる。
var p = parent;
p.hako.text=String(stage.mouseX);
}
-------------------------------------------------

あるいは下記のようにしてもOKです。
-------------------------------------------------
function syori(eventObject:Event):void {
var m = this;
m.parent.hako.text=String(stage.mouseX);
}
-------------------------------------------------

とはいえ、AS3ではフレームごとに記述する方法はデメリットが多いので、卒業された方が良いと思います。本格的に勉強されるということでしたら、できればクラスを使った記述方法を身につけましょう。熟練した人はほとんど他のMCへ干渉する記述やparentなどの記述は書きません。それがAS3(というより一般的なオブジェクト指向のプログラム言語)の一般的な記述方式であり、身につけておかなければならない知識だと考えてください。
    • good
    • 0
この回答へのお礼

>csplさん
ご回答、そしてアドバイスありがとうございます。
おっしゃる通り、parentへのアクセスは
AS3によって記述方法がちょっと変わっただけで
今までAS2/1でやってた事と変わってないなと感じていました。


>AS3ではムービークリップごとにそれぞれのフレームに記述する方法はお勧めできません

これも薄々と感じていました。orz

とすれば、スクリプトを記述する場所というのは基本的にメインのタイムライン(フレーム)上のみという事になるのでしょうか?

また、それぞれのMCが独立して、それ単独で処理が完結するような場合も
ムービークリップごとにそれぞれのフレームに記述するのはよくないと考えるべきでしょうか?

例:MC1=アナログ時計、MC2=マウスポインタ座標表示
MC1,MC2共にそれぞれのムービークリップ内の第一フレームにスクリプトを記述しており単独で全て完結。
新規で作ったflaファイル等(例えばnew.fla)に
MC1,MC2を配置するだけでそれぞれの機能を果たす。

ここで言いたいのは、new.flaのメインのタイムライン上に
MC1とMC2の処理を記述した方が良いのか?という事です。

今までの自分なら、マウスポインタの座標がx=500になったら
アナログ時計を一旦12時にリセットする等といった処理を
MC2の中に書いていました。まさにparentを参照する書き方ですね。(涙)

お礼日時:2009/07/01 14:47

>とすれば、スクリプトを記述する場所というのは基本的にメインのタイム


>ライン(フレーム)上のみという事になるのでしょうか?

あくまでケースバイケースですが、申し上げたのはクラスを使用して書く場合によるルールです。できればメインタイムラインにひとまとめできれば好ましいですが、それでは冗長になる場合がありますよね。

>また、それぞれのMCが独立して、それ単独で処理が完結するような場合も
>ムービークリップごとにそれぞれのフレームに記述するのはよくないと考
>えるべきでしょうか?

一般的に言うのであれば、フレーム自体に書くことが好ましいと言えないです。
この「単独で処理が完結する」ムービークリップごとのフレーム上に書く、ということ自体はムービークリップにつきそれぞれクラスを用意して結びつけることと、考え方はほとんど変わりありません。
ですが、AS3を使用した実際の仕事ではほとんどの人はクラスを使用します。クラスを使用すればそれだけ享受できるメリットがあるからです。

具体的な記述方法についてはここでは言及しませんが、もしこの先も「自分一人で作るのだから動けばいい」というスタンスでやるのであれば、AS2でもAS3でもタイムラインに記述する方法でまったく構いません。が、もしも将来的なことを見据えて勉強されているのであれば、クラスを使用した記述やオブジェクト指向の書き方も覚えておかなければならないということです。

タイムラインに書くのに慣れた方にとっては覚えることが多くて大変ですが、そもそもAS3を勉強するというのは、他の人が書いたものを理解できるようになる、ということが前提ですので、がんばってみてください。
    • good
    • 0
この回答へのお礼

>csplさん

ご回答ありがとうございます。
AS3に対する考え方など非常に勉強になります。

Flash4末期の頃からコンテンツ制作に携わっており
業務でも、それなりの数作ってきましたが全て独学でなんとかやってきたので、常に「これでいいのか?」的な疑問がまとまわりついている状態です。

長年この業界にいるのですが自分の周りで自分よりFlash(あるいはAS)に詳しい人物に会った事が無いので、
解らないことや疑問点などが頻繁に出てくるのに対して
「これはこうだ!」と明確に答えてくれる人、あるいは
私はこういう考え方に基づいてこういうやり方をしている。
等、はっきりした回答をしてくれる人が周りにいなくていつもwebでの質問頼りで困り果てています。

でもcsplさんの回答を読んで、また少しやる気が出ました。
ありがとうございます。

お礼日時:2009/07/02 11:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!