メイン ActionScript 3.0 特設会議室
存在するのにnull? | 投稿するにはまず登録を |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | スレッド |
|---|---|
| Telkun | Åê¹ÆNo.41159 投稿日時: 2009-1-7 18:43 |
半人前 ![]() ![]() 居住地: 博多区 投稿: 37
使用環境:
WinXP-Pro,Flash CS4 Pro(Player10,AS3.0) AIR1.5 |
存在するのにnull? こんにちは。
同じ書式で書いても原因不明な警告が出るので質問します。 ステージ上のMC(stepForm)のクラスから見てRoot(ステージ)を var Root:MovieClip=root as MovieClip; で定義して、ステージ上にあるMCをstepFormのASファイル内で Root.mc0 Root.mc1 ・ ・ としました。つまり、子→親→子で兄弟MCのパス定義です。これらはクリック動作のため、 以下の書き方でaddEventListener しています。 Root.mc0.buttonMode=true; Root.mc0.addEventListener (MouseEvent.CLICK, mc0_click); //クリックして動作 この書式では3個目(mc2)までは問題無かったのですが、4個目(mc3)以降は #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 が出ます 全く同じ書式で、しかも「明らかに存在するMC」なのにnullになるのは何故でしょうか?何度確かめても、試しに他のインスタンス名にしても同じ警告が出ます。 よろしく願います。 |
| 野中文雄 | Åê¹ÆNo.41160 投稿日時: 2009-1-7 19:22 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 存在するのにnull? まず、「としました」というのが、どうされたのかわかりかねます。[プロパティ]パネルでインスタンス名を入力したということでしょうか?
つぎに、当面の課題はインスタンスの存在を確かめることですから、trace()関数で[出力]するだけで十分でしょう。 引用: Telkunさんは書きました: Flashのバグでないとするならば、つぎのふたつが高い確率で「推測」されます。 [1] 問題のMovieClipは、少なくともステートメントの実行時に存在しない。 [2] どこかに「全く同じ」でない部分がある。 しかし、もう1度落着いてご質問の文面をお読みいただければおわかりいただけるとおり、上記の原因を探るための情報はほとんど提供されていません(「4個目(mc3)以降」のスクリプトや設定内容が、具体的に何も書かれていません)。 いわば「間違い探し」をしようというのですから、ふたつの絵を、ただし問題を絞込んだうえで、詳しく示していただく必要があります。 引用: この書式では3個目(mc2)までは問題無かったのですが、4個目(mc3)以降は |
| Telkun | Åê¹ÆNo.41161 投稿日時: 2009-1-7 20:47 |
半人前 ![]() ![]() 居住地: 博多区 投稿: 37
使用環境:
WinXP-Pro,Flash CS4 Pro(Player10,AS3.0) AIR1.5 |
Re: 存在するのにnull? すいません、ご指摘の点を補足します。「?としました」の部分は
Root.mc0.buttonMode=true; Root.mc0.addEventListener (MouseEvent.CLICK, mc0_click); //クリックして動作 Root.mc1.buttonMode=true; Root.mc1.addEventListener (MouseEvent.CLICK, mc1_click); //クリックして動作 という書式の繰り返し(コピペ)です。全てのインスタンス名は、[プロパティ]パネルで指定しています。 しかし、デバッグモードでプレビューすると、必ず下の部分で止まります Root.mc3.buttonMode=true; // デバッグはこの行を指す Root.mc3.addEventListener (MouseEvent.CLICK, mc3_click); 奇妙なことに 全く同じ条件で設置した他のMCと検証するため、stepFormのASファイル内でtrace ("子MC: "+Root.mc3+", "+Root.mc2); とすると 子MC: null, [object MovieClip] になるのですが、Root(親)のAS内で trace ("Root: "+this.mc3+", "+this.mc2); とした時には正しく Root: [object MovieClip], [object MovieClip] が表示されます。 実際、親側に this.mc3.buttonMode=true; this.mc3.addEventListener (MouseEvent.CLICK, mc3_click); と書くと正しく認識されます。つまり、親→子はOKですが特定の兄弟の参照は不可の状態です。 |
| 野中文雄 | Åê¹ÆNo.41163 投稿日時: 2009-1-7 21:59 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 存在するのにnull? どうしてもイベントリスナーを登録して試さなければ確かめられないことがあるのでしたら、その内容と理由をご説明ください。
引用: Fumioは書きました: 引用: Telkunさんは書きました: |
| Telkun | Åê¹ÆNo.41164 投稿日時: 2009-1-8 0:20 |
半人前 ![]() ![]() 居住地: 博多区 投稿: 37
使用環境:
WinXP-Pro,Flash CS4 Pro(Player10,AS3.0) AIR1.5 |
Re: 存在するのにnull? 書いて頂いたTraceで有無を確認したところ、やはりインスタンスmc3は「存在していないことに
なっている」ようです。 また、別の方法として以下のようにChild一覧を作りました。 for (var id=0; id<Root.numChildren; id++) { trace ("Child: "+Root.getChildAt(id)); } for (id=0; id<Root.numChildren; id++) { trace ("- Child: "+Root.getChildAt(id).name); } Root内のChild総数はテキストフィールドを含めて7個なので、2つのFor文の行数は同じ 7個になる筈ですが、 ・上のFor文はObjectが5個とnullが2個 ・下のFor文はObjectが5個のみ でした。つまり、問題のMCの他にもう1つ「(ステートメントの実行時に)存在が認められていないもの がある」ということの様です。 これらの「存在が認められていないもの」に共通するのは、他の5個の動作確認に後から追加 したもので、mc3とテキストフィールドです。 FlashCS3-Proでは、設置の順番によって存在が認められないということがあるのでしょうか? |
| 野中文雄 | Åê¹ÆNo.41166 投稿日時: 2009-1-8 4:14 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 存在するのにnull? えーと、問題のインスタンスが「存在していないことになっている」というのは、すでに私の最初の回答で予測したはずです。そこから、まだほとんど進展がないということになります。
![]() すでに今は、インスタンスが存在しない理由を探る段階です。ですから、その手がかりになりそうな値を、trace()関数の引数に追加したつもりです。その[出力]結果は、お知らせいただけないのでしょうか。 ![]() 引用: Fumioは書きました: 引用:
その「別の方法」では、ステートメントにしてわずか3行の間に、Root.numChildrenの返す値が7から5に変わったというのですか? あと、「テキストフィールド」というのは、何か必要があるののでしょうか。問題を絞込むことも、最初にお願いしていたはずです。差上げたアドバイスを試し、その結果を正確に教えていただくというコミュニケーションがはかれなければ、無駄な時間ばかりが過ぎる結果になってしまいます。 引用: また、別の方法として以下のようにChild一覧を作りました。 |
| Telkun | Åê¹ÆNo.41168 投稿日時: 2009-1-8 13:31 |
半人前 ![]() ![]() 居住地: 博多区 投稿: 37
使用環境:
WinXP-Pro,Flash CS4 Pro(Player10,AS3.0) AIR1.5 |
Re: 存在するのにnull? 度々すいません
以下、Trace結果です。--------- 1) trace(parent, this, this.name, parent.getChildIndex(this)); trace(Root.mc0, Root.mc0.name, Root.getChildIndex(Root.mc0)); trace(Root.mc1, Root.mc1.name, Root.getChildIndex(Root.mc1)); の場合は、 TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at StepFormStage_04b() at flash.display::Sprite/constructChildren() at flash.display::Sprite() at flash.display::MovieClip() at AS_CalcMessenger_10b() --------- 2) trace(this.mc3, this.mc3.name, this.getChildIndex(this.mc3)); trace(this.mc2, this.mc2.name, this.getChildIndex(this.mc2)); の場合は、 [object MovieClip] mc3 4 [object MovieClip] mc2 2 となっています。なお、Root.numChildrenによる検証は、2個のテキストフィールドを削除した状態で Child: [object MovieClip] Child: [object MovieClip] Child: [object MovieClip] Child: [object StepFormStage_04b] Child: null - Child: mc0 - Child: mc1 - Child: mc2 - Child: stepForm となり、やはりmc3がnullかつ無名になっています。 |
| 野中文雄 | Åê¹ÆNo.41170 投稿日時: 2009-1-8 16:47 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 存在するのにnull? 前回のtrace()関数の[出力]では、mc0とmc1の値はエラーなく表示されたのですよね。
3つのステートメントをひとつずつ順に外して、どの行がエラーの原因なのかをご確認ください。引用: Telkunさんは書きました: 以下のスクリプトに、stepForm、mc0、mc1の値を確かめるステートメントを、同様に(コピー&ペーストで)加えて、結果をお知らせください。おそらく、stepFormインスタンスについて、getChildIndex()メソッドが3を返すと予測します。 引用: 2) なお、stepFormインスタンスのシンボルには、クラスを定義してあるのでしょうか?その場合には、プロパティやメソッドの属性指定、テスト用スクリプトの記述場所など、確認すべき要素が増えます。テスト用の最小限の構成にしたうえで、具体的なクラス定義をお示しください。 |
| Telkun | Åê¹ÆNo.41171 投稿日時: 2009-1-8 18:47 |
半人前 ![]() ![]() 居住地: 博多区 投稿: 37
使用環境:
WinXP-Pro,Flash CS4 Pro(Player10,AS3.0) AIR1.5 |
Re: 存在するのにnull? 引用:
3つのステートメントをひとつずつ順に外して、どの行がエラーの原因なのかをご確認ください。 順に外しましたが、相変わらずnullになります。そこで、2つのRoot.numChildrenのFor文の内、Root.getChildAt(id).nameを無効にしたところ、エラーは消えました。 引用: stepForm、mc0、mc1の値を確かめるステートメントを、同様に(コピー&ペーストで)加えて、結果をお知らせください。 この結果は以下の通りです。 [object MovieClip] mc3 4 [object MovieClip] mc2 2 [object MovieClip] mc1 1 [object MovieClip] mc0 0 TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at AS_CalcMessenger_10b() なおstepFormシンボルのクラス定義の内、(長文を避けるため)コンストラクタ以下の抜粋は次のようになっています。 ---- public function StepFormStage_04b () { Root.mc0.buttonMode=true; Root.mc0.addEventListener (MouseEvent.CLICK, mc0_click); Root.mc1.buttonMode=true; Root.mc1.addEventListener (MouseEvent.CLICK, mc1_click); Root.mc2.buttonMode=true; Root.mc2.addEventListener (MouseEvent.CLICK, mc2_click); Root.mc3.buttonMode=true; Root.mc3.addEventListener (MouseEvent.CLICK, mc3_click); for (var id=0; id<Root.numChildren; id++) { trace ("Child: "+Root.getChildAt(id)); } for (id=0; id<Root.numChildren; id++) { trace ("- Child: "+Root.getChildAt(id).name); } trace ("Child側"); trace (parent, this, this.name, parent.getChildIndex(this)); trace (Root.mc0, Root.mc0.name, Root.getChildIndex(Root.mc0)); trace (Root.mc1, Root.mc1.name, Root.getChildIndex(Root.mc1)); } function mc0_click (mouseEvt:MouseEvent) { } function mc1_click (mouseEvt:MouseEvent) { } function mc2_click (mouseEvt:MouseEvent) { } function mc3_click (mouseEvt:MouseEvent) { } |
| 野中文雄 | Åê¹ÆNo.41172 投稿日時: 2009-1-8 20:50 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 存在するのにnull? まず、…… 何度も引用したはずですが、「問題を絞込まない」をよくお読みください。そして、これまでの私の回答も、もう1度読み直してください。
さてつぎに、ご回答の意味がわかりません。 ![]() 「相変わらずnullに」なるというのは、上記「3つのステートメントをひとつずつ順に外して」もいずれも「null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません」というエラーが出るということですか? さらにわからないのは、「For文の内、Root.getChildAt(id).nameを無効にしたところ、エラーは消え」たのですよね。でしたら、上記3つのステートメントは「エラーの原因」ではなく、[出力]結果が表示されたのではないのですか?その結果は、お教えいただけないのでしょうか。 いずれにしても、「For文」は必要な情報を得る妨げとなっているようですから、すべて削除してください。引用: Telkunさんは書きました: 以下のエラーについても、テスト用のステートメントをひとつずつ順に外して、どれが原因なのかをお確かめください。この[出力]から見ると、stepFormインスタンス分が表示されていないということですか? 引用: この結果は以下の通りです。 クラス定義は「抜粋」せず、全文をご掲載ください。前回お願いしたとおり、「テスト用の最小限の構成にした」のであれば、「長文」にはならないはずだからです。すでに、以下のようにお尋ねしていました。 引用: Fumioは書きました: とくに「理由」がないのでしたら、何度も申し上げたとおりそれらの処理は不要です。除いてしまえば、コンストラクタ内にはテスト用のステートメント数行しか残りません。他のメソッドも呼出す必要がありませんので、すべて削除してください。そうすれば、クラス定義すべてを掲げても、せいぜい十数行で収まるのではありませんか。 引用: なおstepFormシンボルのクラス定義の内、(長文を避けるため)コンストラクタ以下の抜粋は次のようになっています。 |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
| 投稿するにはまず登録を | |



ログイン


全く同じ書式で、しかも「明らかに存在するMC」なのにnullになるのは何故でしょうか?

CS5.5
.6.8
Vista Home Premium (SP1)

全く同じ条件で設置した他のMCと検証するため、stepFormのASファイル内で
あと、「テキストフィールド」というのは、何か必要があるののでしょうか。
