Starling + Feathers で、FeathersのButtonクラス(のサブクラス)においてロールアウトを検知する。
starlingはスマホを前提として作られたフレームワークなので、マウス処理に関してやや難がある。その一つが、ロールアウトを拾えない、という点だろう。
いや、うまくやれば拾えるのかもしれない。というか、きっと拾えるに違いない。世の中の優れたプログラマやFlashデベロッパの人たちはそうしたことを軽々と実装しているに違いない!
ただ、自分は優秀でもなければ技術力もないので、ソースファイルをいじって強引に実装したw
package feathers.controls内の「Button」クラスのソースファイルを開くと、いちばん下にtouchHandlerという関数がある。
ここに処理を足す。
protected function touchHandler(event:TouchEvent):void
{
if(!this._isEnabled)
{
return;
}const touches:Vector.
= event.getTouches(this, null, HELPER_TOUCHES_VECTOR);
if(touches.length == 0)
{
//end of hover
this.currentState = STATE_UP;
this.dispatchEvent(new UIEvent(UIEvent.ROLL_OUT));
this._isHoverSupported = false;
return;
}
//以下略
このように、touches.length が 0、というのが、ロールアウトのケースらしい。確かに「STATE_UP」を代入している。
なので、ここで自作のカスタムイベントをdispatchするようにした。これで、ロールアウトを拾いたいボタンにのみaddEventListenerしておけば、ロールアウトを拾うことができる。
マウスオーバーもイベントを拾いたかったので、同じ関数の中で処理を見つけてやはりイベント配信の処理を書いて実装した。
ボタンに関しても、別途TouchEvent.TOUCHで処理をすれば、それでいける気もするんだが。。。
Event.TRIGGERED
Starlingにおいて、Event.TRIGGERDを拾えるのは、ButtonクラスおよびButtonクラスから派生したクラスのみっぽい。
SpriteやImageクラスは、addEventListenerしてもうんともすんとも言わない。
Error #1014: クラス flash.display::Stage3D が見つかりません。
ActionScriptでStarlingを使用していて
Error #1014: クラス flash.display::Stage3D が見つかりません。
と出たら、FlashPlayerのバージョンが11未満になっている可能性大。
このミスは恥ずかしくて、誰も見ていなくても一人で悶絶するレベル。
MacBookAirのトラックパッド上のジェスチャとActionScript
MacBookAirのトラックパッド上のジェスチャをActionScriptで拾えるのかどうか、小一時間調べてしまったのだが、結論は「AIRのみ対応」ってことなのね。
もうちょっとデカくどこかに書いていただけないでしょうか>Adobe様。