zoukankan      html  css  js  c++  java
  • AS改变“注册点”的方法

    AS在flash8以后的版本中可以改变显示元素的注册点。在Flash8环境下,显示元素特指MovieClip。这是因为API中提供了Transform和Matrix。利用这两个类可以几乎任意的操作显示元素的形状。

    以往的变形操作中,注册点的概念仅在旋转,缩放中有意义,平移不会影响注册点。这样,如果把注册点设定为左上角,则以旋转为例,不管怎么平移,设置_rotation都是围绕左上角的。

    使用transform.matrix情况则不同。transform.matrix按照这个仅按照matrix对象的属性设置显示元素的位置。为了描述方便,我在没有进行操作之前,使用的显示元素都是以左上角(0,0)为注册点。为了使用方便,请你也这样做。

    matrix是一个矩阵
    [a,b,tx
    c,d,ty]
    这个矩阵的工作是
    dstX = srcX*a + srcY*c + tx;
    dstY = srcX*b + srcY*d + ty;
    我们现在不考虑tx,ty,如果请你找到一个缩放,旋转都不会变化的点,这是哪一点?(0,0),这个就是注册点。自定义的注册点就是考虑tx,ty时的不变的点。

    但是,如果数学基础不好,比如我,要计算这样一个点是很不方便的。所以我尽量使用API来简化问题。

    前面说过直接设置x,y,Flash8是_x,_y的位移是和注册点无关的,而使用matrix.translate操作确是相关的,我要利用的就是这个特性,先做平移,然后旋转或者缩放再平移回去。

    //offset为0时的例子
    //!警告:x,y属性不能自己设置,要平移必须使用translate!
    //把注册点设置为中心
    var halfW:Number = obj.width/2;
    var halfH:Number  = obj.height/2;
    //offset是当前剪辑的位置,现在要假设他们是0
    var matrix:Matrix = obj.transform.matrix;
    matrix.translate(-(halfW+offsetX),-(halfH+offsetY));
    matrix.rotate(rad);
    matrix.scale(xs,ys);
    matrix.translate(halfW+offsetX,halfH+offsetY);
    obj.transform.matrix = matrix;

    现在解释为什么不能设置x,y属性。一上面的例子来说,请在每一次旋转和缩放的前后观察x,y属性,发现他们是变化了的。说明x,y属性被transform对象修改了,直接操作x,y相当于破坏transform的封装。不幸的是得到的结果也是不正确的。

    平移的时候,需要记录offset,因为已经看到代码,offset是设置注册点必须的量。

    这次没有源文件,Flash8和AS3除了使用_x,_y和x,y的区别外没有不同。
  • 相关阅读:
    javaScript 中的异步编程
    javaScript内存泄漏
    javaScript| 对象的拷贝
    javaScript 数组的拷贝
    javaScript 去除数组中的重复值
    解决js key中的时间间隔
    js未命题(杂记)
    js中斐波拉切数的三种写法;
    js闭包的七中形式
    Javascript学习日志(三):闭包
  • 原文地址:https://www.cnblogs.com/chocolate/p/1459078.html
Copyright © 2011-2022 走看看