• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:as3 textfieldが残ってしまいます)

as3 textfieldが残ってしまいます

このQ&Aのポイント
  • as3 textfieldが残ってしまう問題について解決方法を教えてください。
  • ボタンを押すとtextfieldのインスタンスがない場合に動きが止まる問題について解決策を教えてください。
  • as3のtextfieldを削除する際に注意すべき点を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

元々 http://okwave.jp/qa/q8960833.html この↑ご質問で書かれていらっしゃった内容に関して以下の回答をします。 (今回では省略されている テキストフィールドを addChild する場所などが重要なので。) === === === === === === === === 元々書いていらした上記のご質問で, > としても全く違うものが削除されます。 > テキストフィールドが削除されません。 > ボタンなどが削除されます。 と書かれていらっしゃる「としても」の部分が 具体的に「どのようにしても」なのかわかりません (中身が空の関数 sakujyo2 がその上に書いてあっただけです)。 また,text_field1,text_field2,text_field3,… も どこまで存在する可能性があるのかがわかりません (text_field7 までの7個でしょうか?)。 その他も良くわからない部分がありますが, 仮に関数 go1 を修正するのであれば 次のようにすれば良いのではないかと思います。 backBtn.addEventListener(MouseEvent.CLICK, go1); function go1(event:MouseEvent):void { //変数 i に1から7まで1ずつ加算した値を代入しながらループ for(var i = 1; i <= 7; i++) { //変数 text_field○ が存在した上で なおかつ //その変数の参照インスタンスが stage の表示リストに存在すれば if(this["text_field" + i] != null && stage.contains(this["text_field" + i])) { //そのインスタンスを stage の表示リストから削除する stage.removeChild(this["text_field" + i]); //念のためその変数の参照を切っておく this["text_field" + i] = null; } } } === === === === ご質問では, var text_field1:TextField = new TextField(); のようにして 変数自体はそのタイムライン(root)階層に配置されていますが その変数が参照するテキストフィールドインスタンス本体は stage.addChild(text_field1); のようにして stage 階層に直接配置されています。 (変数が存在する階層とテキストフィールドが存在する階層とがズレています。) (stage 階層は メインタイムライン(root) 階層の親階層です。) したがって 少々ややこしい話になるわけですが, 変数へのパスは this (またはパス無し) になり, removeChild を実行させる対象オブジェクトは stage になるわけです。 stage.removeChild(this["text_field" + i]); ^^^^^^ ややこしいので 階層を別にする理由が特になければ, 配置する階層を揃えた方が良いと思います (「stage」ではなく「この階層」に)。 「F-site [AS3] MovieClipインスタンスとインスタンス名」 http://f-site.org/articles/2008/04/19014939.html それと上のスクリプト中の this["text_field" + i] で使っている [ ] を「配列アクセス演算子」と言います。 「FN1107002-ドット演算子と配列アクセス演算子-Flashテクニカルノート」 http://www.fumiononaka.com/TechNotes/Flash/FN1107002.html === === === === なお実際は, 「フレーム移動させる関数」と 「テキストフィールドを消す関数」とは別にしておいて 「フレーム移動させる関数」から「テキストフィールドを消す関数」を実行させるようにした方が汎用的なスクリプトになるように思います。 (これは使われ方によって変わるので何とも言えませんが。) また テキストフィールドの参照も タイムライン変数を用意してそこに代入するのではなく 配列の要素に代入した方が使い勝手が良くなる気がします。 (これも使われ方によって変わるので何とも言えませんが。)

abesouri
質問者

お礼

ありがとうございました。 階層の問題がややこしかったです。

関連するQ&A