zoukankan      html  css  js  c++  java
  • 从as3鼠标事件说起

    • 诡异的localX localY: 

    as3的鼠标事件MouseEvent有stageX,stageY属性以及localX,localY属性。之前以为localX和localY就是注册事件侦听器的对象左上角为原点的坐标值,其实不然。localX localY和侦听器放在哪里无关,只和鼠标放在哪个对象上有关,即是发生事件的时候鼠标所在对象的左上角为原点。

    • 在做照片裁剪上传的组件,需要获得控制块相对于父级的坐标:
      1. 直接使用stageX和stageY的话,在父级刚好在舞台(0,0)位置的情况凑巧可行,但是父级一旦移动就对不上了,使用localX,localY获得的坐标自然是错误的。之后找到办法是从父级的transform属性中获取concatenatedMatrix,即从父级sprite到舞台的变换矩阵。这个矩阵的(stageX,stageY)-(tx,ty)刚好得到正确的坐标。
      2. 这个方法对于一般情况是可以了,不过我想得更变态了一点,如果父级的变换矩阵中存在旋转呢?给父级加上一个rotation之后果然坐标又对不上了。于是终极的解决方案来了。获取父级的transform.concatenatedMatrix赋给m,m.invert()获得逆矩阵,即从舞台坐标系到父级坐标系的变换矩阵。从stageX,stageY构建一个Point p,p=m.transformPoint(p);此时p的x,y就是鼠标相对于父级的坐标了,可以直接赋值给控制块了。
    • MOVE,ROLL,OVER,OUT:

    MOUSE_MOVE则是鼠标在对象上移动就会触发,值得注意的是侦听stage的MOUSE_MOVE事件,即使鼠标出了舞台还是会触发。 

     MOUSE_OVER和ROLL_OVER,MOUSE_OUT,ROLL_OUT都是在鼠标进出对象的时候触发一次,顾名思义OVER是移入,OUT是移出。MOUSE和ROLL的区别在于,MOUSE_OVER MOUSE_OUT在进出对象的子对象时会触发,而ROLL把组件和它的子级看做一体的,在进出子级对象的时候不会触发。

    这个问题更具体的实验过程可以参见此贴:

    http://wgcode.iteye.com/blog/1205494 
  • 相关阅读:
    C#快速随机按行读取大型文本文件
    OpenReadWithHttps
    fiddler不能监听 localhost和 127.0.0.1的问题 .
    C#放缩、截取、合并图片并生成高质量新图的类
    JS判断只能是数字和小数点
    HTML5 Support In Visual Studio 2010
    GridView 获取列字段的几种途径
    微信朋友圈如何同时分享(图片+文字) Android版
    【Android】 PopupWindow使用小结
    Android 第三方应用接入微信平台(2)
  • 原文地址:https://www.cnblogs.com/fancybit/p/as3_localxy.html
Copyright © 2011-2022 走看看