FLASH8(Win-XP)使用者です。
Flashで使う「this」がよくわかりません。
相対パスで記述することを前提としておたずねしたいのですが、
たとえば、
this.txtField1.text = 'abc';
my_lv = new LoadVars();
my_lv.onLoad = function(success){
this.txtField2.text = 'xyz';
}
my_lv.load("data.txt");
とすると「abc」は表示されても「xyz」は表示されません。
this.txtField2.textのthisを削除すればいいのですがtxtField2にパス(らしきもの)がなくなってしまい気に入りません。
あとで置換するとき不便ですし…
単に「txtField2.text」と書くしかないのでしょうか?
お詳しい方、よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
しっかしまあ,
ikataro さんは次から次へと追究されて難題をよく発見されますね,スゴイ。
いつもながら感心しております。
この回答は長いですが,本題は最後だけです。
その本題とは ☆★☆★… より下です。
☆★☆★… より上は,
そうなる理由や私の単なる悪足掻きやが書いてあるだけなので適当に無視&スルーしてください。
まずできない理由ですが,
ご質問で書かれていらっしゃる,
その this の指す物は,my_lv ですから,
this.txtField2.text = 'xyz';
では,
my_lv.txtField2.text = 'xyz';
ということになってしまします。
my_lv の中には txtField2 は存在しないので,
当然 _root の txtField2 には何も表示されません。
ここまでが,
this.txtField2.text = 'xyz';
ができない理由です。
理由は簡単ですね。
this はいつもムービークリップの階層を示すわけではないので,
LoadVarsインスタンス以外でもそういうことは起こります。
例として同様のことはボタンインスタンスでも起こります。
_root に my_btn というボタンを手動で作成して,
_root のフレームに次のように書くと失敗します。
---失敗例------------------
this.txtField1.text = 'abc';
my_btn.onRelease = function() {
this.txtField2.text = 'xyz';
};
--------------------------
しかし,
次のように書くと成功します。
---成功例-------------------
this.txtField1.text = 'abc';
my_btn.onRelease = function() {
this._parent.txtField2.text = 'xyz';
};
----------------------------
というような感じで,
ボタンインスタンス については解決済みだったので,
LoadVarsインスタンス についても同様だろうと勝手に思っていました。
そして今まで思っていただけで深く追究していませんでした。
しかし!!!!!
LoadVarsインスタンス はボタンインスタンスともまた違うようです。
次のようにすると,みごと失敗しました。
---失敗例------------------
this.txtField1.text = 'abc';
my_lv = new LoadVars();
my_lv.onLoad = function(success) {
this._parent.txtField2.text = 'xyz';
};
my_lv.load("data.txt");
----------------------------
こんな↓ことをしてみても失敗します。
---失敗例------------------
// 「data.txt」 には 「atai=123」 というデータを用意済
this.txtField1.text = 'abc';
this.createEmptyMovieClip("my_mc", 0);
my_mc.my_lv = new LoadVars();
my_mc.my_lv.onLoad = function(success) {
this._parent.txtField2.text = 'xyz';
trace("ロード自体は成功します");
trace(this.atai);
};
my_mc.my_lv.load("data.txt");
---------------------------
ムムムム難しい...。
その他
つまり,試行錯誤しても,
LoadVarsインスタンス については良い解決策が考えつきませんでした。
解決策が見つからない場合は「検索」です。
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
ここからが本題です。
ikataro さんの探究心もスゴイと思いますが,
他にも同様のことを追究している方がいらっしゃいました。
スゴイ方はいらっしゃるのですね↓。
「*ここのthisは何を指しているのか?LoadVars()の攻略」
http://hima.chu.jp/flash/tips/whatisthis.htm
~引用~
> では、どうやって、a_txt(TextField)へ、
> ロードしたテキストの結果を表示すればよいのでしょうか?
> _root からの絶対パス指定?
> これは、確実ですが、面倒ですし、
> MovieClipの使いまわし(再利用)ができなくなります。
> そこで、以下のように、
> 独自の変数を付け加えることで対処できました。
> オブジェクトに独自変数を付け加える
>
> function loadData() {
> var recv_lv:LoadVars = new LoadVars();
> recv_lv.a_txt = this.a_txt;
> recv_lv.onData = function (src) {
> trace(this.a_txt);
> this.a_txt.text = src;
> }
> recv_lv.load("setting.txt");
> }
つまり,
ご質問の場合はこうすれば成功します↓。
---☆成功例☆----------------
this.txtField1.text = 'abc';
my_lv = new LoadVars();
// ★ココがポイント↓
my_lv.txtField2 = this.txtField2;
my_lv.onLoad = function(success) {
this.txtField2.text = 'xyz';
};
my_lv.load("data.txt");
-----------------------------
言われてみればなるほどという感じですね。
パスの変数化の一種です。
簡単な例として,
_root に a_mc を用意して,a_mc の中にさらに b_mc を用意したとします。
_root
└a_mc
└b_mc
そして,_root のフレームに次のように書くと,
b_mc が動きます。
--------------------------------
myvar = this.a_mc.b_mc;
this.onEnterFrame = function() {
myvar._x += 10;
};
--------------------------------
これと同じようなことだと思います。
ちなみに上のページは次の様に検索して,
2番目あたりにスパッと出てきたページです。
Google 検索 「"this" LoadVars」
http://www.google.co.jp/search?hl=ja&q=%22this%2 …
答えもシンプル,検索語彙も意外とシンプルで良かったのでした。
☆★☆★… より上の私の悪足掻きは何だったんだろう?
という感想です。
毎度お世話になって感謝です m(_ _)m
裏技まで調査していただきありがとうございます。
想像よりはるかに深い問題だったのですね…これは…
実は「this」が嫌いでひたすら絶対パスで書いていましたが最近そうもいかなくなりました。
あらためて「this」の難しさを思い知らされた気がします。
「thisはパスと思うな」
そういうことでしょうか。
今回の問題についてはどの方法がベストかは別として、割り切って「this」をつけないのが一般的なのでしょうかね。
なんせ常識がわかっていないもので…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
flash (.swf) を編集したい
-
potplayerについて質問です
-
uwscでExcelに自動記入
-
自分でチラシを作りたいです!...
-
アメブロで音声ファイルを貼る方法
-
AS3 MC内ボタンクリックでシー...
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XMLの&が&に変換されない
-
スクロールバーの自作の仕方
-
flashのおみくじのような(4桁...
-
UIScrollBarを利用したスクロー...
-
AS3 時計のコロンの点滅を0.5s...
-
FlashとJSPの連携
-
今日の残り時間を表示する時計...
-
文字を一文字づつ表示し、スク...
-
ランダムに4桁の数字を表示する...
-
【ActionScript】onLoad後の「t...
-
ダイナミックテキストの表示値...
-
flashで1秒間に任意の数字を加...
-
ムービー上で入力した値の送信...
-
外部テキストの文字化けが直ら...
-
LoadVars
-
ActionScriptをつかってテキス...
-
HTMLレンダリングについて
-
txtをloadしているswfをloadMovie
-
複数の入力テキストに同じ入力...
-
Googleの検索窓をFlashオブジェ...
おすすめ情報