Skip to content

Instantly share code, notes, and snippets.

@yonekawa
Created February 25, 2013 06:49
Show Gist options
  • Save yonekawa/5028187 to your computer and use it in GitHub Desktop.
Save yonekawa/5028187 to your computer and use it in GitHub Desktop.

現象

HTML5版(Canvas)のLWFで、あるフレームを実行するとrootMovieがdestroyされる。 そのフレーム以降のアニメーションも同様。 iOS6のUIWebView, Chromeで確認。その他は未確認。

クライアントコード

以下を使ってmainを回してexec & renderしている。 https://github.com/yonekawa/lwf.enchant.js/blob/master/lwf.enchant.coffee

flaファイルの構成

※ 実際のflaファイルとは厳密には異なる。

rootMovie上fooというMovie Clipが配置されているフレームが1つだけあり、 foo MCの中は、いくつかのフレームラベル付きアニメーションフレームがある 各actionの最後でstopと、配置されている別のMovieClipのフレームを元に戻すtellTargetがある

rootMovie

  • foo(movie clip)
  • part_a(movie clip)
  • part_b(movie clip)
  • action_a(frame label) frame 1 - 10
  • action_b(frame label) frame 11 - 20
  • action_c(frame label) frame 21 - 30
  • action_d(frame label) frame 31 - 40

action_bが問題のアニメーションだとすると、20フレーム目を実行したところでdestroyされる。 action_cのフレーム(31-40)はどのフレームでもダメ。

回避策

以下のようにすると直った。

  • action_bのフレームを全てaction_cの後ろに移動。
  • action_bの最後のフレームを削除。

また、action_bの最初と最後のフレーム以外(12-19)を削除しても 現象は起きなくなった。しかしもちろんそれだとaction_bは機能しない。 1つずつ戻しても現象が発生したので、12-19のどれかに問題があるわけではない様子。

調査

destroyしているのはこの行。 https://github.com/gree/lwf/blob/master/coffee/core/lwf_movie.coffee#L564

Chromeでデバッグしてみると確かにobj.execCount isnt @movieExecCountがfalseで、 @movieExecCountが 1 多い。

また、このタイミングでrootMovie.foo.displayListの中を見ると、オブジェクトが1つ増えている。 内容は他のあるオブジェクトと同じ(同じインスタンス名の同じMovieオブジェクト)だが、 fla上では該当のフレームにそのようなゴミデータは見当たらない オブジェクトが増えるタイミングは以下で、該当のフレームを実行中に起きる。
https://github.com/gree/lwf/blob/master/coffee/core/lwf_movie.coffee#L536

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment