package
{
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.GradientType;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.text.TextField;
import flash.utils.getQualifiedClassName; /**
* @author Frost.Yen
* @E-mail 871979853@qq.com
* @create 2015-10-12 下午4:28:13
*
*/
[SWF(width="800",height="600")]
public class DynamicRegistration extends Sprite
{
private var _obj:Sprite;
private var _pot:Shape;
private var _value:Number = 1;
private var _property:Array = ["width","height","scaleX","scaleY","rotation"];
private var _currPro:String = "width";
public function DynamicRegistration()
{
initViews();
initEventListeners();
}
private function initViews():void
{
var matr:Matrix = new Matrix();
matr.createGradientBox(480, 100, 0, 0, 0); _pot = new Shape();
_obj = new Sprite();
_obj.graphics.beginGradientFill(GradientType.LINEAR,[0xFF0000, 0xFF00FF],[1,1],[0,255],matr);
_obj.graphics.drawRect(0,0,200,150);
_obj.graphics.endFill();
_obj.x = (stage.stageWidth - _obj.width )*0.5;
_obj.y = (stage.stageHeight - _obj.height)*0.5;
_pot.graphics.beginFill(0,.5);
_pot.graphics.drawCircle(0,0,5);
_pot.graphics.endFill();
_pot.x = _obj.x;
_pot.y = _obj.y;
for(var i:int = 0;i<_property.length;i++){
var pro:TextField = getButton(" "+_property[i]+" ",this,stage.stageWidth-100,150+30*i,_property[i]);
pro.addEventListener(MouseEvent.CLICK,onSelectProperty);
}
setProState(_currPro);
this.addChild(_obj);
this.addChild(_pot);
}
private function initEventListeners():void
{
_obj.addEventListener(MouseEvent.CLICK,onClick);
} private function onClick(e:MouseEvent):void
{
_value = _obj[_currPro];
switch(_currPro){
case _property[0]:
case _property[1]:
_value+=10;
break;
case _property[2]:
case _property[3]:
_value+=0.2;
break;
case _property[4]:
_value+=20;
break;
}
dynamicRegistration1(_obj,new Point(_obj.mouseX,_obj.mouseY),_currPro,_value);
_pot.x = mouseX;
_pot.y = mouseY;
}
private function onSelectProperty(e:MouseEvent):void
{
_currPro = e.currentTarget.name;
setProState(_currPro);
}
private function setProState(pro:String):void
{
for(var i:int = 0;i<_property.length;i++){
if(_property[i] == pro){
(this.getChildByName(_property[i]) as TextField).borderColor = 0x00ffff;
}else{
(this.getChildByName(_property[i]) as TextField).borderColor = 0x222222;
}
}
}
private function getButton(text:String,parent:Sprite,x:Number=0,y:Number=0,name:String=null):TextField
{
var textButton:TextField = new TextField();
textButton.autoSize = "left";
textButton.width = 110;
textButton.height = 38;
textButton.selectable = false;
textButton.border = true;
textButton.borderColor = 0x222222;
textButton.background = true;
textButton.backgroundColor = 0xaaaaaa;
textButton.htmlText = "<a href='event:#'>"+text+"</a>";
textButton.x = x;
textButton.y = y;
if(name!=null){
textButton.name = name;
}
parent.addChild(textButton);
return textButton;
} /**
* 动态改变注册点
* target 改变注册点的对象
* point 新的注册点
* pro 需要改变的属性
* value 新的属性值
*/
private function dynamicRegistration1(target:DisplayObject,point:Point,pro:String,value:Number):void
{
//转换为全局坐标
var A:Point=target.parent.globalToLocal(target.localToGlobal(point));
if(pro == "x"||pro == "y"){
target[pro] = value-point[pro];
}else{
target[pro]=value;
var B:Point = target.parent.globalToLocal(target.localToGlobal(point));
//把注册点从B点移到A点
target.x+=A.x-B.x;
target.y+=A.y-B.y;
}
}
} }

[ActionScript 3.0] AS3动态改变注册点的更多相关文章

  1. [ActionScript 3.0] AS3.0 动态加载显示内容

    可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...

  2. [ActionScript 3.0] as3处理xml的功能和遍历节点

    as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式. XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据.将数据加载到 XML 对象 ...

  3. [ActionScript 3.0] AS3 深入理解Flash的 应用程序域Application Domains

    简介 网上有很多flash,通常都不需要显示的使用应用程序域,因为默认的应用程序域就够用了.其实复杂的情况下需要用到应用程序域,比如说有两个不同的swf,一个是旧版本的,一个是新版的,这两个文件里的类 ...

  4. [ActionScript 3.0] AS3 深入理解Flash的安全沙箱Security Domains

    简介 如果你还没有与复杂的的安全域(security domain)和应用程序域(application domain)问题打过交道,那么你真是个幸运的家伙.当你在加载外部内容(然后他们开始播放)的时 ...

  5. [ActionScript 3.0] AS3.0和AS2.0的相互通信

    AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) ...

  6. [ActionScript 3.0] AS3.0 对象在矩形范围随机运动

    package com.views { import flash.display.Bitmap; import flash.display.MovieClip; import flash.displa ...

  7. [ActionScript 3.0] AS3.0 本机鼠标指针

    Flash Player 10.2添加了内置的本机鼠标指针(native mouse cursor)支持,虽然在之前的版本里我们可以侦听MouseEvent事件来模拟鼠标指针,但是在有了原生的本机鼠标 ...

  8. [ActionScript 3.0] AS3调用百度天气预报查询API

    接口说明 根据经纬度/城市名查询天气的结果 接口示例 http://api.map.baidu.com/telematics/v3/weather?location=成都&output=jso ...

  9. [ActionScript 3.0] AS3.0 让一个视频无缝循环播放的一个偏方

    一个视频要循环播放,通常的办法都是播放完后再重新播放,但是不可避免的播放结束和重新开始播放这个时间点上会有停顿,如何解决这个问题,说个偏方吧! package com.views { import f ...

随机推荐

  1. OSI安全体系结构

    建立七层模型主要是为解决异种网络互连时所遇到的兼容性问题.它的最大优点是将服务.接口和协议这三个概念明确地区分开来;也使网络的不同功能模块分担起 不同的职责.也就是说初衷在于解决兼容性,但当网络发展到 ...

  2. linux概念之/proc与/sys

    http://blog.chinaunix.net/uid-1835494-id-3070465.html  proc/x:1/sched http://bbs.chinaunix.net/threa ...

  3. Swift中的HTTP请求

    iOS开发中大部分App的网络数据交换是基于HTTP协议的.本文将简单介绍在Swift中使用HTTP进行网络请求的几种方法. 注意:网络请求完成后会获得一个NSData类型的返回数据,如果数据格式为J ...

  4. Jfinal中定时器的初步探索(二)

    第一篇中增加的是程序代码的实现,本篇我们将通过配置文件进行定时器的配置,减少代码量,提高灵活性. 1.需要用到的文件:quartz.properties,据说这个文件如果没有的话,按默认的走,结果布署 ...

  5. Linux 用户和用户组操作

    [认识/etc/passwd和/etc/shadow] 这两个文件可以说是linux系统中最重要的文件之一.如果没有这两个文件或者这两个文件出问题,则你是无法正常登录linux系统的. /etc/pa ...

  6. struts checkbox选中

    <input type="checkbox" id="something" name="something" /> ↓ < ...

  7. UI-程序的运行顺序

    在AppDelegate.m里面的每个方法里都输入(包括main文件里也输入) NSLog(@"%s %d”,__func__,__LINE__); __func__ :代表使用的方法 __ ...

  8. 设计模式初学者笔记:Factory Method模式

    如果要选择一种最多人熟悉的Factory Method模式的具体应用,那么就应该是MFC的App/Doc架构了.Factory Method主要在类框架中使用,以解决以下问题:框架必须实例化类,但框架 ...

  9. Redis主从同步介绍

    Redis主从同步命令和配置项 启动主从复制:master无需任何操作,slave中使用以下任意一种开启复制功能 (1).通过配置文件启动主从复制: 在redis.conf中加入"slave ...

  10. Linux下Wi-Fi的实现:wireless_tools和wpa_supplicant

    平台为hi35XX,在Liunx下借助wireless_tools和wpa_supplicant(因为现在的无线WIFI网络大多是wpa加密.所以需要移植wpa_supplicant工具)等工具实现w ...