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. 二十四种设计模式:享元模式(Flyweight Pattern)

    享元模式(Flyweight Pattern) 介绍运用共享技术有效地支持大量细粒度的对象. 示例有一个Message实体类,某些对象对它的操作有Insert()和Get()方法,现在要运用共享技术支 ...

  2. SQL存储过程相关信息查看转

    原文地址:http://www.cnblogs.com/minideas/archive/2009/10/29/1591891.html   --1.查看所有存储过程与函数      exec sp_ ...

  3. 虚拟化之vmx配置文件

    https://www.haiku-os.org/get-haikuhttp://sanbarrow.com/vmx.html contradictionn. 矛盾:否认:反驳homegrownadj ...

  4. 【转】WinForm不同版本覆盖安装

    vs2005为winform程序做的安装包.在以有程序旧版本的机子上用新版本的安装包安装软件时提示 “以经安装该产品的另一个版本.无法继续安装此版本........” 在安装部署项目中设“Remove ...

  5. Dom之标签属性

    一.标签默认属性的查找与修改 查找 <!DOCTYPE html><html lang="en"><head> <meta charset ...

  6. comet4j文档

    Comet4J配置参数表 <!--Comet4J配置 --> <listener> <description>Comet4J容器侦听</description ...

  7. SQL Server 的SQL基础知识

    1.N'关闭'N是指nvarchar,是将其内容关闭作为 Unicode字符常量(双字节).而没有N的 '关闭', 是将关闭作为字符常量(单字节). 平常没有加N,结果里面直接出现?. 具体如下图: ...

  8. 修改mysql root 密码

    C:\Program Files\MySQL\MySQL Server 5.6\bin mysqld --skip-grant-tables 开启一新窗口:然后输入mysql -uroot -p up ...

  9. oracle group by中cube和rollup字句的使用方法及区别

    oracle group by中rollup和cube的区别:  Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句. 如果是ROLLUP(A, B, C)的话,先 ...

  10. Javascript中函数的四种调用方式

    一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属 ...