HTML5版(Canvas)のLWFで、あるフレームを実行するとrootMovieがdestroyされる。 そのフレーム以降のアニメーションも同様。 iOS6のUIWebView, Chromeで確認。その他は未確認。
以下を使ってmainを回してexec & renderしている。 https://github.com/yonekawa/lwf.enchant.js/blob/master/lwf.enchant.coffee
※ 実際の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