移动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;
 
                        }
                }
        }
}

 

posted @ 2013-12-09 10:47  无名盗闪  阅读(188)  评论(0)    收藏  举报