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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     ActionScript付きのMovieClipをインスタンス化
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
two_line
Åê¹ÆNo.16349
投稿日時: 2005-3-29 0:37
新米
居住地: Yokohama, Japan
投稿: 16
使用環境:
FLASH CS3, Windows XP
ActionScript付きのMovieClipをインスタンス化
二回目の質問になります。
宜しくお願い致します。

以下の様な点を実現したいのですが、動いてくれません。

1)MovieClipに持たせる機能:
外部ファイルからテキストをnewboxという変数の
動的テキスト(インスタンス名はnews_txt)に読み込ませて表示
2)
そのMovieClipをライブラリに登録
3)
ライブラリから何の編集もされていないFLASHドキュメントに
作成したMovieClipをD&D(インスタンス化)

下記はMovieClipの1フレーム目に記述したActionScriptです。

// TextFieldオブジェクトの設定
_root.news_txt.html = true; // HTML表示の有無

// 外部テキストの読み込み
System.useCodepage = true; // Shift-Jisの読み込みを可能にする
this.loadVariables("news.txt"); // 外部テキストの読み込み

// 読み込み完了を待つ
_root.onData = function() : Void {
	// TextFormatオブジェクトの生成と適用
	var obj_fmt:TextFormat = new TextFormat();
	obj_fmt.color = 0x0000FF; // テキストカラー
	_root.news_txt.setNewTextFormat(obj_fmt); // 適用
}
stop();


動作しない原因は階層の問題だと思うのですが、
「_root」を「_parent」にしても「_parent._root」にしても動作してくれませんでした。
※動作とは、テキストnews.txtの内容が表示されないということ。

試してみて動作したのは、
何の編集もされていないFLASHドキュメントに
newboxという変数の動的テキスト(インスタンス名はnews_txt)フィールドを
直接置き、上記ActionScriptをフレーム1に記述した時です。


不明点が御座いましたら何なりとツッコミ宜しくお願い致します。
以上、ご回答宜しくお願い致します。
ひろゆき
Åê¹ÆNo.16350
投稿日時: 2005-3-29 0:44
ちょんまげら
居住地: 大阪密林
投稿: 3702
使用環境:
10.3.9/10.6.2

CS3/CS4 Pro
Flex 2/3 SDK
Pro8.0
Pro7.2

FlashPlayer
7.0r24/8.0r24/9.0r115/10.0r45
Safari 1.3.2/4.0.4
Firefox 2.0.0.20/3.5.7

MacOS 9.2.2
Flash 4/5
Re: ActionScript付きのMovieClipをインスタンス化
えっと、当てずっぽうですが。

this.loadVariables("news.txt"); // 外部テキストの読み込み
で、this に読み込んでいるわけですから、
onDataの確認をするのも、this ではないかと。
this.onData = function() : Void {


----------------
質問する際は、回答者に具体的な情報を与えてくださいなのニャ!

野中文雄
Åê¹ÆNo.16353
投稿日時: 2005-3-29 7:04
ちょんまげら
居住地: 東京
投稿: 4247
使用環境:
CS4 .4.11 Vista Home Premium (SP1)
Re: ActionScript付きのMovieClipをインスタンス化
「動的テキスト」というのは、おそらく「ダイナミックテキスト」のことですね。TextFieldに「変数名」は、設定されているのでしょうか(インスタンス名と変数名を同時に使われることはお勧めしません)?
引用:
two_lineさんは書きました:
外部ファイルからテキストをnewboxという変数の
動的テキスト(インスタンス名はnews_txt)に読み込ませて表示

「D&D」は、「Drag & Drop」のことだと想像します。しかし、一般に通用している略語とは思えません。ご質問では、略語によってわずかなタイピングの手間を減らすより、内容を正確に伝えることが大切です。
引用:
ライブラリから何の編集もされていないFLASHドキュメントに
作成したMovieClipをD&D(インスタンス化)

問題を解決するためには、絞込みを行いましょう。つまり、問題に直接関係のない要素は、できるかぎり省いて結果を確認すべきです。
// 問題に直接関係ないはずです
// _root.news_txt.html = true; // HTML表示の有無

// 外部テキストの読み込み
// テキストの内容を(一時的に)英数半角文字に変更すればつぎの設定も不要になります
// System.useCodepage = true; // Shift-Jisの読み込みを可能にする
this.loadVariables("news.txt"); // 外部テキストの読み込み

// 読み込み完了を待つ
_root.onData = function() : Void {
    // イベントは発生しているのか変数は認識されているのか確認します
    trace(this.newbox);
    // ...[後略]...

「表示されない」のですか?「変数名」を設定されていないのなら、ひろゆきさんのいわれるとおりMovieClip.onDataのターゲットが、MovieClip.loadVarisbles()メソッドのターゲットと一致していないためでしょう。
引用:
※動作とは、テキストnews.txtの内容が表示されないということ。

試してみて動作したのは、
何の編集もされていないFLASHドキュメントに
newboxという変数の動的テキスト(インスタンス名はnews_txt)フィールドを
直接置き、上記ActionScriptをフレーム1に記述した時です。

外部テキストファイルのロード待ちについては、「外部テキストファイルの読み込みができない」およびそこに引用したドキュメントを参照ください。

なお、TextFieldに対してTextFormatの設定をするには、ロード待ちの必要はなさそうに思えます。


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

two_line
Åê¹ÆNo.16383
投稿日時: 2005-3-30 0:23
新米
居住地: Yokohama, Japan
投稿: 16
使用環境:
FLASH CS3, Windows XP
Re: ActionScript付きのMovieClipをインスタンス化
ひろゆきさん、野中さん有難う御座いました。
お蔭様で希望の動作を確認できました。

引用:
野中文雄さんは書きました:
TextFieldに「変数名」は、設定されているのでしょうか

しておりました。

変数とインスタンス名は同時に使うのは薦められない、
MovieClip.onDataのターゲットが
MovieClip.loadVarisbles()メソッドのターゲットと一致していない、
というご指摘を受け、色々試して、最終的に下記のスクリプトになりました。
var myLV : LoadVars = new LoadVars();

// 読み込み完了を待つ
myLV.onLoad = function(loadSuccess) : Void {
	// textFieldScrollはダイナミックテキストを載せたMovieClipのインスタンス名
	if(loadSuccess){
		_root.textFieldScroll.news_txt.text = this.newsbox;
	}
	// TextFormatオブジェクトの生成と適用
	obj_fmt = new TextFormat();
	obj_fmt.color = 0x0000FF; // テキストカラー

	_root.textFieldScroll.news_txt.setNewTextFormat(obj_fmt); // 適用
}

// 外部テキストの読み込み
//this.loadVariables("news.txt"); // 外部テキストの読み込み
myLV.load("news.txt");

stop();


ここでまた一つ疑問点が御座います。
ダイナミックテキストへの表示が
_root.textFieldScroll.news_txt.text = this.newsbox;

のように、textFieldScrollを入れて、絶対パスでないと成功しなかったのですが、
相対パスで実現するとしたらどのようなコードにしたらよいのでしょうか。
望んでいるのは、今回作ったこのtextFieldScrollのMovieClipが二階層以上離れたメインMovieClipに
インスタンス化しても(絶対パスを使うことなく)動作するようにしたいのです。

言いたい事が伝わるかどうか不安ですが、以上ご回答宜しくお願い致します。
野中文雄
Åê¹ÆNo.16384
投稿日時: 2005-3-30 2:15
ちょんまげら
居住地: 東京
投稿: 4247
使用環境:
CS4 .4.11 Vista Home Premium (SP1)
Re: ActionScript付きのMovieClipをインスタンス化
スクリプトを記述したMovieClipの配置場所が「二階層以上離れた」という具合に「特定しない」のでしたら、絶対パスで指定しないかぎりつねに動作させることはできません。

位置が「特定する」場合には、ターゲットパスを正しく設定すれば、相対パスでも動作するはずです。

具体的に、MovieClipをどこに配置して、相対パスをどう記述したときに「成功しなかった」のでしょうか? ちなみに「メインMovieClip」の意味が、わかりかねます。「メインタイムライン」は、_root(_level0)を指します。
引用:
two_lineさんは書きました:
ダイナミックテキストへの表示が
_root.textFieldScroll.news_txt.text = this.newsbox;

のように、textFieldScrollを入れて、絶対パスでないと成功しなかったのですが、
相対パスで実現するとしたらどのようなコードにしたらよいのでしょうか。
望んでいるのは、今回作ったこのtextFieldScrollのMovieClipが二階層以上離れたメインMovieClipにインスタンス化しても(絶対パスを使うことなく)動作するようにしたいのです。


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

two_line
Åê¹ÆNo.16393
投稿日時: 2005-3-30 12:34
新米
居住地: Yokohama, Japan
投稿: 16
使用環境:
FLASH CS3, Windows XP
Re: ActionScript付きのMovieClipをインスタンス化
野中さん、早速の御回答有り難うございました。

例えば・・・。
過去に作ったMovieClip-A(ActionScript-A)をメインタイムライン(MovieClip-B)に載せて
動作するようにする。別の機会に、MovieClip-BをメインタイムラインMovieClip-Cに載せる時は、
その機会のメインタイムラインでもMovieClip-Aが動作するようにするには、ActionScript-Aを
修正しなければならない、という事でしょうか?
引用:
スクリプトを記述したMovieClipの配置場所が「二階層以上離れた」という具合に「特定しない」のでしたら、絶対パスで指定しないかぎりつねに動作させることはできません。
位置が「特定する」場合には、ターゲットパスを正しく設定すれば、相対パスでも動作するはずです。


myLV.onLoad = function(loadSuccess)この関数の中では
「this」というターゲットは「myLV」を指すのですよね?
そしてmyLVはtextFieldScrollの「子」になるのですよね?
ですから、myLVから見たnews_txtインスタンス
(news_txtもtextFieldScrollの子インスタンス)は
「自身(this)の親の(_parent)の子インスタンスであるので
this._parent.news_txt.text = this.newsbox;

と書いたわけです。
そしてnews_txtというダイナミックテキストを配置した
textFieldScrollを、メインタイムラインに配置致しましたが、「成功しなかった」
=ダイナミックテキスト内にテキストファイルの内容が表示されなかった、です。。
引用:
具体的に、MovieClipをどこに配置して、相対パスをどう記述したときに「成功しなかった」のでしょうか?


メインMovieClipとは「メインタイムライン」を持った、
大元のswfファイル=MovieClipという意味でした。
引用:
ちなみに「メインMovieClip」の意味が、わかりかねます。「メインタイムライン」は、_root(_level0)を指します。


日本語が怪しいですが、お許し下さい・・・。
以上、御回答宜しくお願い致します。
野中文雄
Åê¹ÆNo.16394
投稿日時: 2005-3-30 13:26
ちょんまげら
居住地: 東京
投稿: 4247
使用環境:
CS4 .4.11 Vista Home Premium (SP1)
Re: ActionScript付きのMovieClipをインスタンス化
「タイムライン」は各MovieClipに存在しますが、「メインタイムライン」は_level0(_root)を指します。意味がわからなくなりますので、一般的な用語法に従われた方がよいでしょう。

いずれにしても、相対パスが変わるなら、スクリプトは修正する必要が生じます。HTMLの<a>タグや<img>タグにおけるURLの指定と、考え方は同じです。
引用:
two_lineさんは書きました:
過去に作ったMovieClip-A(ActionScript-A)をメインタイムライン(MovieClip-B)に載せて
動作するようにする。別の機会に、MovieClip-BをメインタイムラインMovieClip-Cに載せる時は、
その機会のメインタイムラインでもMovieClip-Aが動作するようにするには、ActionScript-Aを
修正しなければならない、という事でしょうか?

パスの把握は、正しいと思われます。問題は、LoadVarsクラスに_parentというプロパティが存在しないことです。したがって、必要があれば、その値は独自に設定する必要があります。
引用:
myLV.onLoad = function(loadSuccess)この関数の中では
「this」というターゲットは「myLV」を指すのですよね?
そしてmyLVはtextFieldScrollの「子」になるのですよね?

var myLV:LoadVars = new LoadVars();
myLV.parent_mc = this;
// ...[中略]...
// LoadVars.onLoadのコールバック関数内て
    this.parent_mc.news_txt.text = this.newsbox;

引用:
ですから、myLVから見たnews_txtインスタンス
(news_txtもtextFieldScrollの子インスタンス)は
「自身(this)の親の(_parent)の子インスタンスであるので
trace(this._parent);  // 出力: undefined
this._parent.news_txt.text = this.newsbox;

と書いたわけです。
そしてnews_txtというダイナミックテキストを配置した
textFieldScrollを、メインタイムラインに配置致しましたが、「成功しなかった」
=ダイナミックテキスト内にテキストファイルの内容が表示されなかった、です。。


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

two_line
Åê¹ÆNo.16401
投稿日時: 2005-3-30 21:07
新米
居住地: Yokohama, Japan
投稿: 16
使用環境:
FLASH CS3, Windows XP
Re: ActionScript付きのMovieClipをインスタンス化
野中さん、早めの回答有難う御座いました。

なるほど。修正はやむなしなのですね。
その点が知れて(ちょっと)すっきりです。
引用:
いずれにしても、相対パスが変わるなら、スクリプトは修正する必要が生じます。HTMLの<a>タグや<img>タグにおけるURLの指定と、考え方は同じです。


dynamicクラスのLoadVarsクラスに親クラス役プロパティを作り、そこへthisを設定しましたところ、
希望の動作を確認できました。
引用:
パスの把握は、正しいと思われます。問題は、LoadVarsクラスに_parentというプロパティが存在しないことです。
したがって、必要があれば、その値は独自に設定する必要があります。
var myLV:LoadVars = new LoadVars();
myLV.parent_mc = this;
// ...[中略]...
// LoadVars.onLoadのコールバック関数内て
    this.parent_mc.news_txt.text = this.newsbox;


今回の質問をしてターゲットに対する理解を深めることができました。
大変有難う御座いました。またよろしくお願い致します。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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