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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     タイムラインの途中から出現するムービークリップへのアクセス
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kakuni
Åê¹ÆNo.44339
投稿日時: 2010-1-29 12:20
新米
居住地:
投稿: 3
使用環境:
タイムラインの途中から出現するムービークリップへのアクセス
はじめまして。初歩的な質問ですが、よろしくお願いします。


ボタンを押したらウィンドウが出現して、その中に任意のテキストが
書かれているといったものを作っています。
環境は、Adobe Flash CS3, ActionScript 3.0 です。

ステージ内には、
button : ボタンインスタンス
window_mc : ウィンドウのムービークリップ
が配置されています。

window_mc のムービークリップ内には、
text_dt : ダイナミックテキスト
ウィンドウの下地(描画オブジェクト)
が配置されています。


メインのタイムラインは、フレーム1?3まで使っています。

最初はボタンだけ表示されて、ウィンドウは表示したくないので、
フレーム1と2では、window_mcが配置されているレイヤの
フレームを空白のフレームとし、フレーム3だけ通常のフレームに
しています。
そして、フレーム2のフレームアクションに stop(); を記述し、
メインのタイムラインの再生をフレーム2で停止させてます。

ボタンは、フレーム1?3までずっと表示しています。


ボタンを押したら、ウィンドウが表示されて、その中のダイナミック
テキストを任意の文字列にするため、フレーム1に、以下のような
フレームアクションを記述しました。


button.addEventListener(MouseEvent.CLICK, onButtonClick);

function onButtonClick(e:MouseEvent):void {
	gotoAndStop(3);
	
	trace(window_mc);
	window_mc.text_dt.text = "Hellow !";
}


しかし、これを実行して、ボタンをクリックしてみると、
ランタイムエラーが起き、出力ウィンドウには、以下のように
なりました。


null
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
	at click_new_fla::MainTimeline/onButtonClick()



ウィンドウを最初から出現しているように改造してみると、エラーに
ならず、ウィンドウ内のテキストも書き変わります。

gotoAndStopを呼んでフレーム3に移動したのに、window_mcがnullの
ままなのが原因だという事はわかるのですが、このように、途中から
出現するムービークリップにはアクセスできないのでしょうか?


ボタンを押したら、ウィンドウ等が出現して、しかもその中の情報は
ボタンを押したときに変更するといった動作を作るには、どうしたら
良いでしょうか?

アドバイスよろしくお願いします。
vader
Åê¹ÆNo.44340
投稿日時: 2010-1-29 18:08
常連
居住地: 東京
投稿: 76
使用環境:
MacOS10.8,FlashCS6
Re: タイムラインの途中から出現するムービークリップへのアクセス
kakuniさん、こんにちわ。

window_mcを動的に生成されては如何ですか?

まず、ライブラリにてwindow_mcのシンボルを右クリック > 
リンケージ > ActionScriptに書き出しをチェック > 
クラスにWindow_mcと入力しておきます。

次にwindow_mcのレイヤーを右クリック > ガイドで
書き出されないようにした上で下記をお試し下さい。


var window_mc:MovieClip;

button.addEventListener(MouseEvent.CLICK, onButtonClick);

function onButtonClick(e:MouseEvent):void {
	gotoAndStop(3);
	window_mc = new Window_mc();
	window_mc.text_dt.text = "Hello !";
	addChild(window_mc);
}


他にも方法はありますが、動的に生成するのが一番実用的と
思いました。

以上、頑張って下さい。
kakuni
Åê¹ÆNo.44343
投稿日時: 2010-1-29 22:24
新米
居住地:
投稿: 3
使用環境:
Re: タイムラインの途中から出現するムービークリップへのアクセス
こんばんは、vaderさん。

window_mcを動的に作る事で、目的の動作を実現できました。
アドバイス有難うございます。


やはりこの方法が一般的なんですかね。
ウィンドウの位置とか見栄えをこだわると、シーンに配置
しておくほうが作りやすいのかなとか思ったりもします。


他にも方法はありますが、動的に生成するのが一番実用的と 思いました。


もし良かったら、他の方法も教えて頂けると、
色々勉強になって助かります。
よろしくお願いします。
vader
Åê¹ÆNo.44344
投稿日時: 2010-1-30 0:58
常連
居住地: 東京
投稿: 76
使用環境:
MacOS10.8,FlashCS6
Re: タイムラインの途中から出現するムービークリップへのアクセス
kakuniさん、こんばんわ。

お役に立てたようで良かったです。

>もし良かったら、他の方法も教えて頂けると、
>色々勉強になって助かります。

まず、ガイドにしたレイヤーとリンケージをもとに
戻します。

そしてwindow_mcは、タイムラインで2フレーム目に
配置しておきます。
その上で2フレーム目に下記のように記述します。


removeChild(window_mc);
trace("window_mc = ", window_mc);

button.addEventListener(MouseEvent.CLICK, onButtonClick);

function onButtonClick(e:MouseEvent):void {
	gotoAndStop(3);
	window_mc.text_dt.text = "Hello !";
	addChild(window_mc);
}


まず、2フレーム目に配置したwindow_mcをいきなり
removeChild()で表示リストから消します。

しかしnullを代入していないので、メモリは解放されず、
次のtrace()でアクセスできることが確認できます。
後は、表示したいタイミングでaddChild()に引数で渡します。

ただ、この手法は第3者が編集する際に解りづらくなるので、
あまりオススメできません。。。

以上、お役に立ちましたら幸いです。
kakuni
Åê¹ÆNo.44348
投稿日時: 2010-2-1 11:49
新米
居住地:
投稿: 3
使用環境:
Re: タイムラインの途中から出現するムービークリップへのアクセス
vaderさん、こんにちは。

なるほど。
ステージに配置したのを、不要な時は表示リストから
取り除いておくのですね。

参考になりました。
色々な方法を教えて頂き、ありがとうございます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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