
現在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までは上記のような形でパスが通ったと思うのですが・・・
No.1ベストアンサー
- 回答日時:
まず最初に、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(というより一般的なオブジェクト指向のプログラム言語)の一般的な記述方式であり、身につけておかなければならない知識だと考えてください。
>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を参照する書き方ですね。(涙)
No.2
- 回答日時:
>とすれば、スクリプトを記述する場所というのは基本的にメインのタイム
>ライン(フレーム)上のみという事になるのでしょうか?
あくまでケースバイケースですが、申し上げたのはクラスを使用して書く場合によるルールです。できればメインタイムラインにひとまとめできれば好ましいですが、それでは冗長になる場合がありますよね。
>また、それぞれのMCが独立して、それ単独で処理が完結するような場合も
>ムービークリップごとにそれぞれのフレームに記述するのはよくないと考
>えるべきでしょうか?
一般的に言うのであれば、フレーム自体に書くことが好ましいと言えないです。
この「単独で処理が完結する」ムービークリップごとのフレーム上に書く、ということ自体はムービークリップにつきそれぞれクラスを用意して結びつけることと、考え方はほとんど変わりありません。
ですが、AS3を使用した実際の仕事ではほとんどの人はクラスを使用します。クラスを使用すればそれだけ享受できるメリットがあるからです。
具体的な記述方法についてはここでは言及しませんが、もしこの先も「自分一人で作るのだから動けばいい」というスタンスでやるのであれば、AS2でもAS3でもタイムラインに記述する方法でまったく構いません。が、もしも将来的なことを見据えて勉強されているのであれば、クラスを使用した記述やオブジェクト指向の書き方も覚えておかなければならないということです。
タイムラインに書くのに慣れた方にとっては覚えることが多くて大変ですが、そもそもAS3を勉強するというのは、他の人が書いたものを理解できるようになる、ということが前提ですので、がんばってみてください。
>csplさん
ご回答ありがとうございます。
AS3に対する考え方など非常に勉強になります。
Flash4末期の頃からコンテンツ制作に携わっており
業務でも、それなりの数作ってきましたが全て独学でなんとかやってきたので、常に「これでいいのか?」的な疑問がまとまわりついている状態です。
長年この業界にいるのですが自分の周りで自分よりFlash(あるいはAS)に詳しい人物に会った事が無いので、
解らないことや疑問点などが頻繁に出てくるのに対して
「これはこうだ!」と明確に答えてくれる人、あるいは
私はこういう考え方に基づいてこういうやり方をしている。
等、はっきりした回答をしてくれる人が周りにいなくていつもwebでの質問頼りで困り果てています。
でもcsplさんの回答を読んで、また少しやる気が出ました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ホームページの画面文字を濃く...
-
友達にドッキリをしたくて、ホ...
-
さくらサーバーに置いているホ...
-
ホームページを作ろうと思いま...
-
教えて!goo でいただいた回答を...
-
FC2ホームページの変更に仕方
-
ホームページビルダーを複数の...
-
ビルドとリビルドの違いを教え...
-
FFFTPでサーバに新規フォルダが...
-
ホームページ リダイレクト設定...
-
メールフォーム設置の文字化け...
-
ホームページビルダー19文字化け
-
古いウェブ作成ソフト使ってる...
-
XREA使用で作成したHTMLファイ...
-
ホームページを作りたいのです...
-
【ホームページ作製】HPのWebペ...
-
無料のホームページを作成でき...
-
マウスオーバーすると色が変わ...
-
hpの画像の公開
-
ホームページ作成に伴い、元デ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
3D表現の制御
-
Flash AS3.0 初歩的な質問
-
FLASH MX フェードイン
-
ボタンで動かしたい
-
いくつかのFlashを合体させるには
-
ムービークリップの制御?
-
FlashMXでのボタンアクション作...
-
Flash Lite 1.1で、複数のMCをA...
-
FLASH道場のカウントダウンにつ...
-
FLASHムービーのファイルをつな...
-
loadMovieで・・・
-
Flash ActionScript■移動するMC...
-
スライドの表示時間(8 profe...
-
プルダウンメニューを作ろうと...
-
◆◆クイズ・ゲームのスコアを集...
-
ムービークリップを一定時間ご...
-
Flash Lite1.1ではonClipEvent(...
-
Flash Lite1.1でActionScriptを...
-
パソコンのオープンフレームっ...
-
段ボールみたいな材質でできて...
おすすめ情報