ActionScript3.0エラーアーカイブスを少し読んだ。


エラーが出たときにここから探す本・・・というよりは「ふんふんこんなエラーがあるのか」と読むような本の気がする。

だいたいエラーを吐いて困る場合は、「こうすれば解決なのは分かってるけど、実際にその処理は何らかの理由で実装できない」という場合が多い気がするし、そもそもエラーは出ないが動きが変という場合が圧倒的に多い気がする。エラーを吐いてくれさえすればJavaScriptよりは親切な気がする。AS。

なので、これで安心のスクリプトが書ける、というよりはプログラマとして読んで楽しむもののような気がします。

先日

1084:シンタックスエラー:leftparenがcolonの前に必要です

というエラーを吐いたんですが、調べても解決しませんでした。

まあgetterに()をつけ忘れたという初歩的なミスなので数分で解決しましたが。

・・・というかエラー文をちゃんと読めばコロンの前に括弧が足りないと明確に書いてあるんですよね。ちゃんとエラー文を読めよ、と。(left parenで左括弧ですね)

エラー集もいいんですが、FlashDeveloperがハマった罠を集めたAS3罠集みたいなのがあったらすごくいいなぁと思ったりします。

カヤックさん辺りが新サービスとしてやったりするんじゃなかろうかと勝手に思ってるんですがどうなんでしょう。罠共有サイト。問題はどうやって検索させるか、ということでしょうね。どういう状況でどうなったのかという説明を文字だけでするのは至難の業で、絵を使うと検索し辛くなるので、どういう方法で検索させるかが問題になりそうな予感。でもあったらFlash作るのが少しでも楽になるかなぁと思います。

タイムラインに置いて、名前をつけたシンボルのインスタンス名を取得するうまい方法はないだろうか。


随分あけてしまいましたが、なかなか書くネタを搾り出すのも大変ですね。もうちょっと間隔を狭められるように書けたらいいなと思ってます。

今回はFlash使ってて変な現象に出くわしたのでその話。

まあタイトルの通りなんですが、タイムラインに配置して、同じシンボルを違う名前で配置する時というのはそれなりにあると思います。タイムラインに置いてしまったほうが位置の調整が楽ということもあり、たまにやります。

で、タイムラインに配置したオブジェクトを、『オブジェクトにつけた名前はそのままに、インスタンス名に応じて処理をする』という処理が必要になりました。まあASだけで配置していれば適当に名前をつけてグループ化すればよかったんですが、タイムラインに配置しているので、そうもいかない。

諦めてASで配置することも考えましたが結構な手間になってしまうので、何か方法はないか、ということで探ってみたら、擬似的に何とかできました。

方法 → 対象となるオブジェクトの1フレーム目にラベルを付ける

ラベルがついていればMC.currentLabelで取得できるので、そこから名前を情報を取得する、と。うーん、多用すべきでないテクニック臭がプンプンしますね。どう考えてもスマートじゃありません。しかしまあ、目的は達成できてるので、OKとしておきます。

調べていく過程で気づいたのは、「対象となるオブジェクト自身のタイムラインのフレームアクションに何かしらのスクリプトが記述されていればインスタンス名が取得できるようになる」ということです。スクリプト、と言ってはいますが、単なるコメントのみならず半角スペース1つ入れるだけでインスタンス名が取得できるようになります。

trace((対象オブジェクト).toString())

というような感じで。(toString()は無くても動作します。)

通常、何も書かれてなければ

[object MovieClip]

になるけれど、何かしら書かれていると、

[object インスタンス名_数字]

となるので、インスタンス名を切り出せば使えることになります。

ただこの方法だと、MovieClipでない新しいクラスが作られているようにも見えるので、あまり良くないような気もします。どちらがメモリを食うか等々は調べてないので不明です。その作り方が悪い、というのはもっともな話ですが、小細工をすればある程度のことは何とかなるようです。

↑以外でもスクリプト付けたし法ではうまく行かない条件が何かあった気がするんですが(MovieClipに変換されますのような警告がでた気が)、また同じ状況に出くわしたら書いてみます。