yanagisawaActionScript3.0のオープンソースライブラリ「Box2DFlashAS3」の紹介をGIGAZINEさんでやっていたのでリンク。Directorでは以前から高度な物理シミュレーションが可能だったのだけれど商業的なコンテンツで活用された例を知りません。物理シミュレーションがどのように商業利用されていくのか、行かないのか興味津々です。yanagisawaマウスイベントの最終回はMOUSE_LEAVEのお話し。あと、説明し忘れていたボタンモードについても後半に。●MOUSE_LEAVE===================================タイトルにマウスイベントと書いたものの、マウスイベントではないかもしれません。下のようにMouseEventではなく、Eventのプロパティになっているから...。this.leaveFunc);そしてもう一つポイント、このMOUSE_LEAVEはstageオブジェクトにしか利用できません。AS2のことと異なり、stageのsは小文字な事に注意してください。this.leaveFunc);1つ前のエントリーのサンプルではこれを大文字にしていて、なんで機能しないんだろー、と考え込んでしまいました...。●buttonMode===================================AS2ではマウスイベントを設定すれば、カーするがムービークリップに重なったときに指カーソルに変わりますが、AS3では変わりません。buttonModeプロパティをtrueにすることで変わるようになります。これはマウスイベントを設定しなくてもtrueにすると指カーソルになります。あと、これをtrueにするとAS1の時からある_upや_overといったフレームラベルを利用できるようになりますが、これらは授業ではやりませんので、説明しません。true;さて、次回はAS2でいうところのアタッチの仕方について説明しようとおもいます。yanagisawaAS3で新しく追加されたMOUSE_LEAVEイベントのサンプル。AS2まででのコンテンツではカスタムカーソルを利用しようとしてもFlash外にカーソルが出たときにFlash内にカーソルが置き去りにされてしまうのだけれど、AS3のMOUSE_LEAVEを利用すればFlash外にカーソルが出たときにイベントがとれるので、そのタイミングでvisibleをfalseにしてしまえばカーソルが残ることがありません。これを利用すればインターフェイス講座のときに説明した、ハイドメニューやプルダウンメニューの問題解決にもつながります。yanagisawa結構前に試したまま放置していたファイルを見つけたのでアップ。sandyというFlash用の3Dライブラリ群?なオープンソースを使ってます。マウスの位置に合わせて、球体が回転するよ。●dragOver、dragOut===================================授業の時にも、これを設定しないとバグが発生することを確認しましたが前回のマウスイベントのリストには、これに該当するものがありません。するかというと、イベントが発生したときに実行するカスタムメソッドでは引数を受け取らなければなりませんでした、この引数はイベントオブジェクトと呼ばれるもので、いろいろなプロパティを持っているというのはenterFrameの回で説明しました。enterFrameの時は使えそうなものがないと書いたのですが、マウスイベントでは使えるプロパティがあります。それがbuttonDownプロパティです。その名の通り、イベントが発生したときにボタンが押されているか否かを教えてくれます。eo.buttonDowntrace(test);}これを利用すれば、dragOut、dragOverとrollOver、rollOutで動作を分けることができます。授業ではdragOut、dragOverを設定しましたが、これはボタンが押されているときはrollOver、rollOutのイベントが発生しないためでした。AS3ではボタンが押されていようが、いまいがROLL_OVER、ROLL_OUTのイベントが発生するので、この点に関しては楽になりました。●releaseOutside===================================releaseOutsideもAS3ではなくなってしまいました。これを実現するのは、ちょっとややこしいです。色々な方が、すでに対応策を公開していますので、そちらを参照してください。考え方はこちらのブログを参照fladdict.netそしてサンプルを公開している方のブログ52sec.org●MOUSE_MOVE===================================AS2のmouseMoveに相当するものですが、設定されたムービークリップの領域にあるときしかなので、これもreleaseOutsideの時と同様にstageにaddEventListenerする手法を用いないとAS2のようなことは出来なくなってしまいました...。●ダブルクリック===================================WEBコンテンツの作成においては、ほとんど使う機会はないと思います。WEBアプリの作成なんかになると使うのでしょうね、きっと。ダブルクリックのイベントは通常発生しないようになっています。ダブルクリックのイベントを利用する場合はAS日記(5)で紹介したdoubleClickEnabledをtrueにする必要があります。true;doubleClickEnabledをfalseにしたときにダブルクリックをするとクリックイベントが2回発生します。doubleClickEnabledをtrueにしたときにダブルクリックをするとダブルクリックイベントが1回発生し、あとクリックイベントも1回発生します。こんな感じで、かなりマウスイベントの扱いが変わってしまいました...。マウスイベントについて調べていたら、Stageオブジェクトにだけ利用できるMOUSE_LEAVEというイベントを見つけたので2回で終わる予定でしたが、次回もマウスイベントにしたいと思います。yanagisawaな、なんだかAS3のマウスイベントが大変なことになっています...AS3になって色々変わるのは覚悟していたのですが、ちょっと戸惑いを隠せません...。2回に分けてマウスイベントについてお話ししたいと思います。イベントリスナーの構文ですが、これはenterFrameのときと同じですしかしenterFrameの時はEventだった部分がMouseEventに変わる点に注意です。{trace(“click”);}そして上のActionScriptでお気付きかもしれませんがイベント名がCLICKになっています。AS3では扱えるイベントが下記のように変更されているのです。イベントの名前が異なるくらいなら、何でもないのですが僕がショックなのは、微妙にAS2の仕様と異なるのです。僕にとっては悪い方に変わった感じです...。マウスイベントを下に列挙します。CLICKとMOUSE_UPの違いCLICKはクリックで、授業で説明したとおり「ムービークリップを押して離したとき」に発生します。それに対しMOUSE_UPは「ムービークリップを押したかどうかに関わらずムービークリップ上でマウスが放されたとき」発生します。ムービークリップでない別のところで押してから、ムービークリップ上に移動して離すと、CLICKのイベントは発生しませんがMOUSE_UPイベントは発生します。これに関しては問題はないです。releaseの代わりにCLICKを使えばよいでしょう。ROLL_OUTとMOUSE_OUT(ROLL_OVERとMOUSE_OVER)これはムービークリップが入れ子にしないと違いが分かりません。ROLL_OUTはAS2のrollOutとだいたい同じです(違う点は下の方で解説)。MOUSE_OUTは入れ子にされた中のムービークリップに重なるときにも発生します。授業ではbuttonMCの中にtextMCのインスタンスを配置したりしましたが、MOUSE_OUTのイベントはこのtextMCにも反応してしまうのです。textMCにActionScriptを何も書いていなくてもです。上記のとおりなら、これまでのrollOverやrollOutの代わりにROLL_OUT、ROLL_OVERを利用すればよいのですが...●微妙に仕様が変わったROLL_OUT/ROLL_OVEROSも含めインターフェイスのボタンは、そのボタン以外の場所でpressされpressしたままの状態で、ボタンにロールオーバーしても反応しないのが本来の仕様(だと思います)そしてAS2のrollOverやrollOutも、そのような仕様になっています。!AS3ではボタンでないところからpressしたままロールオーバーしてもイベントが発生してしまうのです。普通に操作している分には全く違和感はないのですが。なんだか気になるので、ネットで調べたけれど、だれも気にしていないみたい。いうことで、現在公開されているAS3コンテンツのボタンで上記のようなROLL_OVERの仕様をどうしているのか調べてみた...。そのまんまAS3のROLL_OVERの仕様です。いうことで、僕もとりあえず気にしないことにします。yanagisawa今回はイベントについて。AS2ではイベントを扱う仕組みとして、イベントハンドラ、イベントハンドラメソッドイベントリスナーがありましたが、AS3ではイベントリスナーしか利用できません。手っ取り早く構文を確認しましょう。利用するActionScriptはaddEventListenerです。イベント発生時に実行するカスタムメソッド);AS2ではフリーサイズFlash講座のときにイベントリスナーを利用しましたが、こちらはaddListenerでした。これとは別物ですので気を付けてください。今回はenterFrameについてですから「利用したいイベント」はenterFrameになり、ActionScriptでは以下のように書きます。Event.ENTER_FRAME2番目の引数には、イベントが発生したときに実行するカスタムメソッドを書きます。総合すると以下のような構文になります。moveRoutine);そして、AS3ではイベントが発生したら実行するカスタムメソッドにも注意が必要です。実行したいカスタムメソッドには引数を1つ設定しなければなりません。object)としました。この引数を設定し忘れるとエラーになってしまいます。ちなみに、この引数の値の型はEventですので、型指定をして書くとeo:Eventになります。上の項目で、指定したenterFrameはイベントオブジェクトのプロパティだったりします。引数であるからには、どのような値が入っているのか気になるので調べると(ヘルプでENTER_FRAMEを調べると載っています)あまり使う必要がなさそうなのばかりです。結局、AS2ではイベントハンドラメソッドを利用していたものがAS3ではイベントリスナーに変わっただけです。構文を覚え、引数を書き忘れないようにすれば入門基礎講座を修了した方であれば問題なく利用できると思います。それでもって、次回はマウスイベントについてお話ししたいと思います。今回のActionScriptでオブジェクト指定を省略しないと以下のようになります。※今回のActionScriptではthisを省略しても問題ありません。yanagisawa今日は新しく追加されたプロパティの話Flashが登場する前、マクロメディアの稼ぎ頭はDirectorでした。このDirectorは確か、フレームラベルを取得できて便利だった気がします。AS3からはFlashにもフレームラベルを取得する「currentLabel」プロパティが追加されました。メッキリDirectorから離れているので、なんでフレームラベルが取得すると便利だったのか忘れてしまいました...currentLabel:今いるフレームラベルを取得する、今いるフレームにフレームラベルが無い場合は前のフレームにさかのぼって取得する。それでも無い場合はnullを返します。currentLabels:ムービークリップ内のフレームラベルの全てを配列で返してくれます。あとたぶん使わないdoubleClickEnabled。trueにするとダブルクリックのイベントを受け取れるようになるとのことですが、WEBコンテンツではダブルクリックという操作はしないとおもいます。doubleClickEnabled:trueに設定することでダブルクリックのマウスイベントを取得できるようになる。AS3の計算処理速度向上によって、FlashはWEBコンテンツだけでなくWEBアプリの作成も可能になったわけだから、ダブルクリックも必要になってくるのでしょうね。ほかにもマウスイベントに関するプロティなども追加されているようですがそれはマウスイベントのところでまとめて話したいと思います。今回はあまり有用なこと書いていません...でも次回はイベント(enterFrame編)でイベントの扱いがどの様に変わったか紹介する予定です。yanagisawa今回はプロパティ(ムービークリップ)のお話し。プロパティの扱いはAS2もAS3も同じですが、ビミョウに名称が変更されているので両方使っていると混乱します。対応表を書いてみます。基本的にAS2のプロパティから_(アンダースコア)を外したものがAS3のプロパティ名となります。height等すべて上記のルールで変更されればよいのにビミョウに変わっているのもあります。mouseYxやyで始まるものはx、yを後ろに移動し大文字に変更した名前になっています。名前だけでなく、設定できる値の範囲も変わりました。alphaの値は0〜1scaleXの値は0〜1scaleYの値は0〜1つまり%設定のプロパティは0〜1の範囲で設定するように変更されました。はて、今回はここまで次回は新しく追加されたプロパティを紹介したいと思います。試していないのだけれど、ヘルプには知らないプロパティがたくさん乗っていました。yanagisawa今回は前回の続き、型について少し補足します。型を指定すると、指定した以外の型を代入した場合エラーになります。これは不便そうですが型指定をしないと、エラーを出さずにFlashが気を利かせて適当(?)に処理してしまいます。Flashでは一人で作ることが多く、あまり複雑なことにならないので、大抵の場合とくに問題になることも少ないのですがもし、その処理が原因でバグが発生すると、とても探しにくいバグとなりがちです。型指定をしていれば、想定外の値が入ってきてもエラーになり、バグを早期発見できるのです。エラーの例を見ておきましょう。10;上記は文字列(String型)と指定したにもかかわらず数値(Number型)の10を代入しようとしているのでエラーになります。ちなみに以下のように、数値と文字列(型のちがう値)を足し算してもエラーにはなりません。結果としては自動的に文字列に変換されます。bbb);あっ、それと前回返値での型指定をしましたが、返値が無い(retrunを使わない)場合はvoid(型無し)を指定します。※voidは頭文字も小文字な事に注意してください。{trace(“testFunc!”);}返値にvoidを指定しているのに返値を返そうとするとエラーになります。型について(後編)でした。次回はイベントについてお話ししようと思ったのですがその前にプロパティの話をしておいた方が良いなぁ、ということで色々と変更された、ムービークリップのプロパティの話をしたいと思います。