Progression Forum
9月 03, 2010, 02:39:59 午前 *
ようこそゲストさん。まずは、ログインするか、ユーザ登録してください。
アクティべーションメール送られて来ませんでしたか?

ユーザ名、パスワード、クッキー保持期間を入力してログインして下さい。
お知らせ:
 
   ホーム   ヘルプ 検索 ログイン 登録  
ページ: [1]
  印刷  
投稿者 スレッド: FlashPlayer10 + CastMovieClip で発生しやすいランタイムエラー  (参照数 4625 回)
naggg
初心者
*
投稿: 12



プロフィールを見る
« 投稿日:: 12月 17, 2008, 09:06:09 午後 »

どもです。 ニヤリ

FlashPlayer10はどうもFlashPlayer9といろいろ解釈が異なるようで、
現状のProgressionでも遭遇しやすいランタイムエラーがあります。
共有のためフォーラムにあげておきますね。


■ 問題となる現象

まず、問題となる現象ですが、

 ・CastMovieClipを使っている
 ・FlsahPlayer9では全くランタイムエラーは発生しない
 ・しかしFlashPlayer10で見ると以下のランタイムエラーが発生する
コード:
ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。
 at flash.display::DisplayObjectContainer/getChildIndex()
 at jp.nium.display::ChildIndexer/_added()
 ・なお、Progressionのバージョンは 3.0.7 (検証データ作成時の2008年12月初旬では最新バージョン)

というものです。

現在、niumさん側で対策をする予定だそうですが、
同様の問題で悩んでいる方もいるでしょうし、それまでは参考してくださればと思いますー。


■ その原因と解決策

さてさて、こちらでいくつか検証をした結果、
先に結論から言えば(検証データはもうちょい後)、

 ・CastMovieClip
 ・そのコンストラクタで
 ・違うフレームにジャンプ
 ・前後のフレームで numChildren が変化するとき

では必ず発生する現象のようです。

解決方法としては、

 ・前後のフレームで自身の numChildren プロパティが変化しないように CastMovieClip のシンボルを編集
 ・問題箇所では CastMovieClip は使用せず、普通の MovieClip にする

が挙げられます。


■ 検証データ

ちょっと字だけではわかりづらいでしょうし、
ここで検証データ。記事の下部にある添付データを見てください(※注)。
解凍して書き出したSWFを、FlashPlayer9および10のデバッガ版の両方で見てください。

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

・test1.zip
  こういったものが作りたいという完成形。
  (今回は容量制限のため割愛しています、test3を参照してください)

・test2.zip
  FlashPlayer10でランタイムエラーが発生する例。
  test2.flaのタイムラインをよく見てください。

・test3.zip
  その解決方法。
  test2.flaとtest3.flaのタイムラインの違いに注目です。

※注
 いづれのデータもアップロード容量制限により、Progression のライブラリは含まれていません。
 同階層に Progression のクラスライブラリを設置してからパブリッシュしてください。

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


ということで、タイムラインのフレーム挙動のところの
内部のエンジンがプレイヤーによって異なるようです。ひー。

また、numChildrenへの対策については、
Flash内の環境がどうASに置き換わるか、コンパイラの振る舞いについて詳しくないと色々と大変かもしれませんね。
(連続したシェイプレイヤーはパブリッシュすると1つのShapeになるとか、
 画像はShapeで書き出されるけど、リンケージ設定するとBitmapになるとか、
 最悪の場合、そういった知識が必要になるかもしれません・・・)


まぁ、Progressionのアップデートを気長に待ちましょう~ ニヤリ



« 最終編集: 12月 17, 2008, 09:08:04 午後 by naggg » IP記録
seyself
コミッター
初心者
*****
投稿: 4


プロフィールを見る
« 返信する #1 投稿日:: 12月 18, 2008, 02:10:10 午前 »

僕のほうでも少し調べてみました。

naggg さんの報告されている発生条件とは異なりますが、ASで操作した場合、
CastMovieClip だけでなく、 CastSprite でも発生するようです。
addChild() と removeChild() だけ使用していると問題は発生しないようですが、
addChildAt() removeChildAt() setChildIndex() 等を用いてインデックス値を操作すると不具合が発生します。

また、これは FlashPlayer 10 に限ったものではなく、FlashPlayer 9 でも同様にエラーが発生しています。

以下にテストソースをアップしています。

http://demo.seyself.com/20081218_prog/IndexerTest.zip

/bin ディレクトリの中に、以下の3つのファイルが入っています。

■test1.swf
正常に動作
addChild() removeChild() を使用


■test2.swf
removeChildAt() でエラーが発生する例
2 つ以上追加後、連続して 2 つ削除でエラー

コード:
# TypeError: Error #2007: パラメータ child は null 以外でなければなりません。

■test3.swf
addChild() setChildIndex() でエラーが発生する例
3 つ以上追加した後、 0 になるまで削除して、新たに追加するとエラー
addChildAt() を使った場合も同様にエラー

コード:
# RangeError: Error #2006: 指定したインデックスが境界外です。


追加・削除の処理は、いづれも /src/test/Tester.as に書いてます。
エラー内容は異なりますが、どちらも ChildIndexer の直後にエラーが発生しています。



IP記録
ページ: [1]
  印刷  
 
ジャンプ先:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!