FlEX FLASH对象注册点调整方法

flash 和flex中的所有可视对象的注册点全部都是默认在(0,0)点,也就是左上角.在flash内编辑状态下 可以调整注册点位置 但要是程序生成的就没有办法了 因为还没发现有注册点属性.只操作位置 x,y时注册点在什么位置并不重要 但要是操作旋转rotation 缩放scaleX,scaleY 注册点在上面总感觉别扭,习惯上的位置应该是几何中心.

调整方法(一):双层容器嵌套;

这中方法就是 用两层容器包裹起对象 内层容器的几何中心放在外层的注册点位置 也就是说内层的xy位width/2,height/2.这样一来就技巧的实现了对外层的操作转化成了内层几何中心的操作.

调整方法(二)动态调整坐标

其实注册点的不同,产生的效果就是操作或的位置不同.那么根据不同的操作和注册点的偏差,进行调整也能实现对注册点的改变,而且这种方式更直接和方便.自己看类的结构就明白了.

 package com.makyoo.geometry
{
 //www.makyoo.cn    QQ:84407979
 //动态改变注册点类
import flash.display.DisplayObject;
import flash.geom.Point;
//动态设置注册点
public class DynamicRegistration
{
  //需更改的注册点位置
  private var regpoint:Point
  //更改注册的显示对象
  private var target:DisplayObject
  private var Height:Number
  private var Width:Number
  //首先要确定初始状态
 public  function DynamicRegistration(target:DisplayObject,regpoint:Point,iWidth:Number=320,iHeight:Number=240)
  {
   Width=iWidth
   Height=iHeight
   this.target=target
   this.regpoint=regpoint
  }
  //设置显示对象的属性
  public function flush(prop:String,value:Number):void
  {
   var mc=this.target
   //转换为全局坐标
   var A:Point=mc.parent.globalToLocal(mc.localToGlobal(regpoint))  
   if(prop=="x"||prop=="y")
   {
    mc[prop]=value-regpoint[prop]   
   }else if(prop=="scaleX" || prop=="scaleY")
   {
    if(mc[prop]>value){
     //放大过程
    mc.x+=((Width*(value+0.1))-(Width*value))/4
    mc.y+=((Height*(value+0.1))-(Height*value))/4
    }else{
     //缩小过程
     mc.x-=((Width*value)-(Width*(value-0.1)))/4
     mc.y-=((Height*value)-(Height*(value-0.1)))/4
    }
     mc[prop]=value
   }
   else
   {
    mc[prop]=value
    //执行旋转等属性后,再重新计算全局坐标
    var B:Point=mc.parent.globalToLocal(mc.localToGlobal(regpoint))
    //把注册点从B点移到A点
    mc.x+=A.x-B.x
    mc.y+=A.y-B.y
   }
  }
}
}

 


转自: http://www.makyoo.cn/article/ActionScript3/16.htm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游鱼_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值