请选择 进入手机版 | 继续访问电脑版

触摸屏与OLED论坛

 找回密码
 注册论坛
查看: 34180|回复: 231

使用flash CS5来实现多点触摸(Multi-touch)的功能,多点触摸教程

    [复制链接]
发表于 2010-10-22 13:41:55 | 显示全部楼层 |阅读模式
iPhone刚出来的时候最让我惊喜的莫过于多点触摸(Multi-touch)和手势,酷的一塌糊涂。超多游戏好应用使用了多点触摸技术,废话不多,来看看在Flash cs5中如何实现多点触摸。
- b- o1 N8 I6 c( g1 p+ a% q" @
  c! N6 v7 p4 f; N! I7 O. X* L这些在Flash cs5中都可以轻松实现。
  1. AS新增加类包  flash.events.TouchEvent; 多点触摸事件# Z  ~( d! T2 k; u, M
  2. Property:) s  U0 Y( r. g, y+ r; {
  3. altKey : Boolean //设置Alt键激活与否" a5 j9 ]3 b8 N! z! T/ A
  4. commandKey : Boolean //设置Command键激活与否6 J! G, ?5 J4 n+ {( O3 k
  5. controlKey : Boolean //设置Control键激活与否
    & U# Q% @( S  h
  6. ctrlKey : Boolean //设置Ctrl键激活与否. w9 N/ [, q& w' O; z6 }7 t
  7. isPrimaryTouchPoint : Boolean //接触的第一个点是否被看成鼠标事件: C! @9 X* Y- ?' {
  8. isRelatedObjectInaccessible : Boolean //安全设置, K/ X, X8 L2 \) _( B7 S& w$ f
  9. localX : Number  //相对x坐标
    # F( k( n: B! P1 y1 I) X3 o
  10. localY : Number  //相对y坐标4 D0 e5 B  `, E# j5 d- H; @7 |! Z+ z4 f
  11. pressure : Number //于设备接触的压力
    : s$ g8 z0 ~* E
  12. relatedObject : InteractiveObject// 显示相关的Object+ \/ U% o- P. o$ y5 S7 ^( O
  13. shiftKey : Boolean// 设置ShiftKey键激活与否7 H. X, a8 `1 t! u* K2 S- y
  14. sizeX : Number// 触摸时的宽度
    6 M5 g2 ?* C1 _2 D9 _. D
  15. sizeY : Number //触摸时高度
    % l5 K5 w' O( k) _6 X2 r
  16. stageX : Number //全局X坐标
    5 u" Q( o) M& a5 v: i3 Q5 z% W
  17. stageY : Number //全局Y坐标
    2 t. y( ?! i+ S
  18. touchPointID : int //接触点的ID识别码$ h" m9 c0 |# a7 Q0 y/ W
  19. ; n1 |# T9 f& J: }+ k
  20. Methods:
    # J+ ]% P/ x. v9 i* r3 D
  21. TouchEvent
    1 z; p/ M* y# ~; e& n& r
  22. . q2 d5 k6 [: w. Y8 B" K5 W' C. n& B
  23. AS新增加类包 flash.ui.Multitouch; 多点触摸管理类
    ) m+ R3 w0 U' d2 C& ~
  24. inputMode : String  //触摸事件的处理模式(多点或是手势)7 s) c% v2 m& Q3 c
  25. maxTouchPoints : int  //当前环境所支持同时进行的接触点的最大数量
    * O  t5 o3 \) d- i5 t
  26. supportedGestures : Vector. //当前环境所支持多接触的类型- i; G1 Z. a2 c& _, c
  27. supportsGestureEvents : Boolean //当前环境是否支持手势
    / y( v- I$ m: |
  28. supportsTouchEvents : Boolean //当前环境是否支持基本的触摸
复制代码
 楼主| 发表于 2010-10-22 13:44:46 | 显示全部楼层
1.png
  Z% J+ o" f$ ]5 f+ D
Flash多点程序截图
- k, s( Q" q5 @5 ]* _, C  K6 G
& ^( i! ^8 {& S" J0 |
/ M3 m2 W! A8 D- _, G$ [
源代码
  1. /* @author jimmy
    6 _. O& T3 Z1 S8 p  S( @0 j
  2. * www.jimmy.sh; B+ J+ p4 j! w
  3. */' q" J, _6 q  V, h. Q
  4. package" q, G! z7 u1 K" S+ f  I
  5. {6 h5 S* ?- c& m# a! G+ |4 e
  6. / E! S) G- f' `$ j) Z
  7.         import flash.display.DisplayObject;
    0 \  Y  m+ L0 L' a# t
  8.         import flash.display.Sprite;& f* Q  ^, o5 m& W+ k* w* t
  9.         import flash.events.TouchEvent;/ r9 N' g# }2 T* d; o5 \
  10.         import flash.ui.Multitouch;
    6 @" u# w, ^+ a1 I
  11.         import flash.ui.MultitouchInputMode;
    9 ^+ h( N7 Y1 ~2 d' D) u  p
  12. : ?- \# F$ \: Z$ a+ I7 }8 E
  13.         public class main extends Sprite- S& k- B5 V8 ?+ X2 ~) G
  14.         {        ; ?" p) E, v1 p& F% x- h) W" n$ T
  15. # N# w9 H4 @' W  N% {7 p
  16.                 public var s1:Sprite;
    ! A" p; [1 u; h% Q6 k
  17.                 public var s2:Sprite;' W3 w' `( o% {8 C
  18.                 public var s3:Sprite;* C7 r: R; @8 E( o
  19.                 public var s4:Sprite;# w, Y5 E% ^& F
  20.                 public var s5:Sprite;2 J, S( v0 E/ \) l& x6 u$ V' I
  21.                 public var s6:Sprite;( F2 i; R8 ^8 l9 L2 {( X
  22.                 protected var touchMap:Array= [];
    ( t* c2 x2 ^2 I5 p0 i# H  f- I
  23.                 protected var touchMc:Array;8 M7 m/ [, n4 S- v# Z
  24.                 public function main()+ ?4 v# B" n# h
  25.                 {
    & C' }9 B/ E4 @( @- N' Z
  26.                         touchMc=[s1,s2,s3,s4,s5,s6];
    9 |; z/ q4 \9 x9 M- m5 B
  27.                         //多点触摸类型5 O! s+ w) k" z3 A- R# ?
  28.                         Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT;
    4 h7 E% c* }  g/ D4 y5 J/ A8 g
  29.                         //添加3个多点触摸事件
    ) e5 U' u: k* L
  30.                         this.addEventListener(TouchEvent.TOUCH_BEGIN,touchBeginHandler);
    5 I- O8 E+ G8 T, |1 ?8 _) R
  31.                         this.addEventListener(TouchEvent.TOUCH_END,touchEndHandler);
    " M6 d4 t, s0 J9 B2 o3 c+ F
  32.                         this.addEventListener(TouchEvent.TOUCH_MOVE,touchMoveHandler);
    - O+ u3 \$ z$ q+ h/ M
  33.                 }& l; q. y' Y! d2 l9 G$ H
  34.                 //触摸开始事件
    4 Z) v5 V. l) D) i2 y
  35.                 protected function touchBeginHandler(event:TouchEvent):void" O6 e  S- l% @% `1 S% E% c& ?
  36.                 {  ^0 Y3 H  _6 U  |
  37.                         addChild(DisplayObject(event.target));
    ) m% n4 F3 D' C+ x% ^  |5 b
  38.                         touchMc.sort(depthFunction);
    ( y7 G" C) V& t) O# s
  39.                         var touchPoint:Object={};. }% R+ Q4 {* _8 \" m
  40.                         touchMap[event.touchPointID] =touchPoint;1 x8 W9 J. j* d
  41.                 }0 k0 p, |0 F1 R
  42.                 //根据深度排序,为了让判断的时候先判断前面的物体7 Z# B  P2 p' T/ ?. [. X& R9 ?2 _" {
  43.                 protected function depthFunction(a:Sprite,b:Sprite):int& F, F% @7 e+ |! E, M1 i- m
  44.                 {, Z  K3 u9 w+ l
  45.                         if(getChildIndex(a)>getChildIndex(b))
    ! N' ]) h. H* b6 E0 J
  46.                                 {+ \- n5 ~; K; F! W" O- d% S* r
  47.                                         return -1;8 D* Q0 d$ V5 B5 R
  48.                                 }else {
    9 p: q% @/ x/ @/ V
  49.                                         return 1;! T* Q- n7 E* X2 K; ~* n
  50.                                 }+ Z% ^1 B  }+ |; P8 x
  51.                 }9 a# k. K7 N$ ^, x9 J* F$ s+ U- A$ x8 y
  52.                 //触摸事件结束事件
    1 Y; h$ X  A& X- c( E
  53.                 protected function touchEndHandler(event:TouchEvent):void
    # p/ J& [+ Y9 a$ z) y
  54.                 {
    $ k5 N% [( M6 _" I
  55.                         delete touchMap[event.touchPointID];
    ) r2 P! l" d/ K
  56.                 }" [* L, M# G* c* _6 S
  57.                 //触摸点移动事件7 L0 J# Z! p- V0 c# E9 X
  58.                 protected function touchMoveHandler(event:TouchEvent):void
    1 Q9 l2 {( }8 A# _1 J' J& C
  59.                 {
    8 T8 _4 I2 |+ g# D1 D0 ~+ [' j
  60.                         var key :int =event.touchPointID;
    7 O! S$ T6 h7 l- s/ L
  61.                         //判断触摸到那个mc,并让mc跟着手指移动
    0 F3 j0 t; j; l' D2 a, J3 _
  62.                         if(touchMap[key])
    * n) V4 c* g  f6 u% L' A: ]
  63.                         {
    $ e1 u! {2 E- @/ M
  64.                                 for(var i:int=0;i<6;i++); T, U. U8 w" j8 _
  65.                                 {" c6 h6 |0 c( u- R
  66.                                         var _mc:Sprite=touchMc[i];
    * ~3 C0 R, j  L/ k' v
  67.                                         if(_mc.hitTestPoint( event.stageX,event.stageY))
    5 V8 G, z& m, a# q+ C# H3 v
  68.                                                 {
    5 R$ }) X- Z* _3 ^: c# i* t
  69.                                                         _mc.x=event.stageX;' h6 j2 N/ |2 {2 D: j( q
  70.                                                         _mc.y=event.stageY;
    0 _; ~* G* B. G* ~+ u; `# l1 p# o
  71.                                                         break;# D: Q/ j  L* R! \6 ~2 Y
  72.                                                 };' _5 ?( }! ~# |! [! Z, X
  73.                                 }
    : a. b, O9 X, W
  74.                         }
    ! b3 P+ q8 g) d  l
  75.                 }
    8 @! [% }9 ^/ P9 I( h& e
  76.         }  i+ K* [8 T. c* U
  77. }
复制代码
这里下载Flash源文件
  n3 p# ^6 t7 T7 d3 u* |: F: N3 k( k6 H+ q' @1 [8 j1 p2 W/ d
Multi-touch.zip (231.45 KB, 下载次数: 606)
发表于 2010-10-25 11:22:43 | 显示全部楼层
路过,顶一下!
发表于 2010-10-25 12:34:32 | 显示全部楼层
顶了 好东西
发表于 2010-10-29 17:51:48 | 显示全部楼层
不太清楚,帮顶一下。
发表于 2010-11-4 17:18:01 | 显示全部楼层
可以给我发一份源文件吗?新来的还没金币感谢啊!! cy09051422@163.com
 楼主| 发表于 2010-11-4 17:44:36 | 显示全部楼层
回两个帖子就有金币了
% t" u" ~6 |; K1 F% T6 \; X7 @' V
然后就可以下载了
发表于 2010-11-4 20:33:46 | 显示全部楼层
顶一下,看起来不错哦
发表于 2010-11-16 11:57:23 | 显示全部楼层
DDDDDDDDDDDDDDDDDDDDDDDDDDD
发表于 2010-11-19 10:36:38 | 显示全部楼层
不错,学习一下
您需要登录后才可以回帖 登录 | 注册论坛

本版积分规则

地址:成都市高升桥东路2号高盛中心1109室 电话:028-85108892 13183843395
版权所有 Copyright(C) 51Touch.Com All rights reserved Archiver 触摸屏与OLED网 电子邮件:51touch@126.com
在线咨询QQ:触控面板,触摸屏原理,触摸屏一体机咨询 190798948    在线咨询微信: 13183843395(扫描下方二维码)

蜀ICP备05002005号
快速回复 返回顶部 返回列表