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で処理をすれば、それでいける気もするんだが。。。