移动RIA ASc3 的TouchEvent—提速手机开发
TouchEvent对象
在移动开发中 MouseEvent可用但不如TouchEvent更好用
在移动开发中我一直乐于用MouseEvent,后来发现一放到移动设备里就会偶尔卡住不动了。于是决定试一下TouchEvent。效果很明显,不会卡住了。
MouseEvent跟TouchEvent这两个类在App中运行起来是一样的。我不知道它们在底层是怎么运作的,我也不需要知道这些东
西,只要知道在移动设备中哪一个更好就可以了。
我们从建立TouchEvent的程序开始,虽然几乎跟MouseEvent一样,程序上还是有一些不同
的。
正确的触屏
创建TouchEvent要导入如下三个类:
import flash.events.TouchEvent;
import flash.ui.Multitouch;
import flash.ui.MultitouchInputMode;
相比之下鼠标事件只要导入一个MouseEvent就可以了。不过,在使用TouchEvent之前还要输入以下代码建立移动关联:
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
这句声明表明输入模式为触屏而非鼠标事件,没有这句声明是不能启动TouchEvent的,所以不要忘记在程序中加上。
最后还需要一个事件侦听,侦听都跟鼠标事件的格式一样,TouchEvent也是。不过不是用CLICK而是TOUCH_TAP,如下所示:
upBtn.addEventListener(TouchEvent.TOUCH_TAP,moveNow);
这样,你就做好准备可以创建一个使用TouchEvent的App了。
一个处理程序,多个接收器
在进程中会占用很大内存,特别在移动设备中会比较明显的就是事件侦听了,每个事件侦听器都会建立一系列操作来保持对事件的侦听。
只有一个事件是不够的,但 直接关联一个侦听器只要一个步骤(这就可以了)。下面的这个Client会创建一个使用TouchEvent的示例。
所有按钮都是 SimpleButton对象,而背景是一个大的Sprite。同样的,Sam3是一个Sprite,你可以轻敲移动设备来移开它。
package { import flash.display.Sprite; import flash.display.SimpleButton; import flash.events.TouchEvent; import flash.ui.Multitouch; import flash.ui.MultitouchInputMode; public final class Client extends Sprite { private static var leftBtn:SimpleButton=new Left(); private static var rightBtn:SimpleButton=new Right(); private static var upBtn:SimpleButton=new Up(); private static var downBtn:SimpleButton=new Down(); private static var bkground:Sprite=new Background(); private var sam3:Sprite=new Sam3(); public function Client() { addChildAt(bkground,0); setControls(); setSamurai(); } private final function setControls():void { Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; upBtn.x = 825,upBtn.y = 19; upBtn.addEventListener(TouchEvent.TOUCH_TAP,moveNow); addChild(upBtn); leftBtn.x = 740,leftBtn.y = 106; leftBtn.addEventListener(TouchEvent.TOUCH_TAP,moveNow); addChild(leftBtn); rightBtn.x = 873,rightBtn.y = 105; rightBtn.addEventListener(TouchEvent.TOUCH_TAP,moveNow); addChild(rightBtn); downBtn.x = 825,downBtn.y = 202; downBtn.addEventListener(TouchEvent.TOUCH_TAP,moveNow); addChild(downBtn); } private final function setSamurai():void { sam3.x=(960/2); sam3.y=(640/2)+100; addChild(sam3); } private final function moveNow(e:TouchEvent):void { switch(e.target.name) { case "instance11": sam3.y -=5; break; case "instance1": sam3.x -=5; break; case "instance6": sam3.x +=5; break; case "instance16": sam3.y +=5; break; } } } }

浙公网安备 33010602011771号