FICC安藤です。
連続で Box2DFlashAS3 関連のエントリーでしたが今回は実用的なエントリー、対応するところに開発者の良心のようなものが見える「AS3 Macでのマウススクロールイベント」です。
AS2のMacMouseWheelと同じくpixelbreakerの方がAS3バージョンを公開されています。
AS2バージョンよりシンプルになってまずはimport。
import com.pixelbreaker.ui.osx.MacMouseWheel;
前回はなかったsetup。
MacMouseWheel.setup(stage);
後はイベントを取得するだけ。
stage.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
これだけで後は全く意識せずにMac&Win両方対応できます、かなり便利です。
SafariとFirefoxでスクロール量(特に大きく動かしたとき)の違いはまだ残っていますがかなり差は小さくなった気がします。
たまにやってしまいますがMacではFlashのプレビューで動かそうとしても動かないのでhtmlから確認してください。
追記:
del.icio.us コメントで気づきましたがFirefoxだと完全にFlash Playerがスクロールを持っていってます。
逆にWin IE6 / 7だと完全にブラウザに持ってかれます。
全画面で使う分には良さそうですが、ブログパーツに使ったりするのは危ないかもしれません。
なので、サンプルは全画面で開くように変えました。
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import com.pixelbreaker.ui.osx.MacMouseWheel;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class Main extends Sprite{
private var txtFld:TextField;
//============================================================================================//
// Constructor
//============================================================================================//
public function Main(){
init();
}
//--------------------------------------------------------------------------------------------------------------------------------//
// init
//--------------------------------------------------------------------------------------------------------------------------------//
private function init():void{
MacMouseWheel.setup(stage);
txtFld = new TextField();
txtFld.selectable = false;
txtFld.autoSize = TextFieldAutoSize.LEFT;
txtFld.text = 'MacMouseWheel';
txtFld.textColor = 0xFFFFFF;
txtFld.x = Math.round(stage.stageWidth / 2 - txtFld.width / 2);
txtFld.y = Math.round(stage.stageHeight / 2 - txtFld.height / 2);
addChild(txtFld);
stage.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
stage.addEventListener(Event.RESIZE, resizeHandler);
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
// enterFrameHandler
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
private function enterFrameHandler(_evt:Event):void{
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
// mouseWheelHandler
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
private function mouseWheelHandler(_evt:MouseEvent):void{
txtFld.y -= _evt.delta;
if(txtFld.y > stage.stageHeight + txtFld.height){
txtFld.y = 0 - txtFld.height;
}else if(txtFld.y < 0 - txtFld.height){
txtFld.y = stage.stageHeight - txtFld.height;
}
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
// resizeHandler
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
private function resizeHandler(_evt:Event):void{
txtFld.x = Math.round(stage.stageWidth / 2 - txtFld.width / 2);
}
}
}
コメントする