每个人都有自己的想法,哪怕仅仅一瞬间~!
| 订阅 XIntend |
| 访问此论坛 |
由于之前的
源码:
- package com.xintend.util {
- import flash.display.DisplayObject;
- import flash.display.Sprite;
- import flash.geom.Point;
- import flash.utils.Proxy;
- import flash.utils.flash_proxy;
- /**
- * [AS3]DynamicRegistrationProxy
- * 动态注册点代理 引用请保留此处信息及参考信息
- * @author telds[kingfo] www.xintend.com
- *
- *
- * 一级参考:
- * 作者: Darronschall [ActionScript 2]
- * 站点: http://www.darronschall.com/weblog/archives/000054.cfm
- *
- * 二级参考:
- * 作者: Robert Penner [ActionScript 1]
- * 站点: www.robertpenner.com
- *
- */
- public dynamic class DynamicRegistrationProxy extends Proxy {
- public function DynamicRegistrationProxy(source:DisplayObject=null):void {
- _displayObject = source || new Sprite();
- }
- override flash_proxy function callProperty(methodName:*, ... args):* {
- var res:*;
- var a:Point;
- var b:Point;
- var method:String = methodName.toString();
- var property:String;
- switch (method) {
- case 'setRegistrationByStage':
- a = _displayObject.globalToLocal(new Point(args[0], args[1]));
- _stageRegX = args[0];
- _stageRegY = args[1];
- _regX = a.x;
- _regY = a.y;
- break;
- case 'setRegistrationBySelf':
- a = _displayObject.localToGlobal(new Point(args[0], args[1]));
- _regX = args[0];
- _regY = args[1];
- _stageRegX = a.x;
- _stageRegY = a.y;
- break;
- case 'setPropRel':
- a = _displayObject.parent.globalToLocal(_displayObject.localToGlobal(new Point(_regX, _regY)));
- property = args[0].toString();
- _displayObject[property] = args[1];
- b = _displayObject.parent.globalToLocal(_displayObject.localToGlobal(new Point(_regX, _regY)));
- _displayObject.x -= b.x - a.x;
- _displayObject.y -= b.y - a.y;
- break;
- default:
- res = _displayObject[method].apply(_displayObject, args);
- break;
- }
- return res;
- }
- override flash_proxy function getProperty(name:*):* {
- var res:*;
- var property:String = name.toString();
- switch (property) {
- case 'regX':
- res = _regX;
- break;
- case 'regY':
- res = _regY;
- break;
- case 'stageRegX':
- res = _stageRegX;
- break;
- case 'stageRegY':
- res = _stageRegY;
- break;
- case 'x2':
- res = _x2;
- break;
- case 'y2':
- res = _y2;
- break;
- case 'scaleX2':
- res = _displayObject.scaleX;
- break;
- case 'scaleY2':
- res = _displayObject.scaleY;
- break;
- case 'rotation2':
- res = _displayObject.rotation
- break;
- case 'source':
- res = _displayObject;
- break;
- default:
- res = _displayObject[property];
- break;
- }
- return res;
- }
- override flash_proxy function setProperty(name:*, value:*):void {
- var property:String = name.toString();
- switch (property) {
- case 'regX':
- _regX = value;
- break;
- case 'regY':
- _regY = value;
- break;
- case 'stageRegX':
- _stageRegX = value;
- break;
- case 'stageRegY':
- _stageRegY = value;
- break;
- case 'x2':
- _x2 += value - _displayObject.x;
- break;
- case 'y2':
- _y2 += value - _displayObject.y;
- break;
- case 'scaleX2':
- flash_proxy::callProperty('setPropRel',"scaleX", value);
- break;
- case 'scaleY2':
- flash_proxy::callProperty('setPropRel',"scaleY", value);
- break;
- case 'rotation2':
- flash_proxy::callProperty('setPropRel',"rotation", value);
- break;
- default:
- _displayObject[property] = value;
- break;
- }
- }
- private var _displayObject:DisplayObject;
- private var _regX:Number = 0;
- private var _regY:Number = 0;
- private var _stageRegX:Number = 0;
- private var _stageRegY:Number = 0;
- private var _x2:Number = 0;
- private var _y2:Number = 0;
- }
- }
示例源码:
- package {
- import com.xintend.util.DynamicRegistrationProxy;
- import flash.display.Bitmap;
- import flash.display.Sprite;
- import flash.events.MouseEvent;
- import flash.geom.Point;
- public class Main extends Sprite {
- private var a:DynamicRegistrationProxy;
- private var t:Sprite = new Sprite();
- private var c:CrossHairs = new CrossHairs();
- [Embed(source = '../bin/123.jpg')]private var imge:Class;
- private var b:Bitmap
- public function Main():void {
- b=new imge() as Bitmap
- //t.graphics.beginFill(0xFF0000);
- //t.graphics.drawRect(0, 0, 80, 40);
- //t.graphics.endFill();
- //t.buttonMode = true;
- //t.useHandCursor = true;
- t.addChild(b);
- c.x = t.x = stage.stageWidth / 2- t.width/2;
- c.y = t.y = stage.stageHeight / 2 - t.height/2;
- t.addEventListener(MouseEvent.MOUSE_DOWN, handleMOUSE);
- t.addEventListener(MouseEvent.MOUSE_OUT, handleMOUSE);
- t.addEventListener(MouseEvent.MOUSE_WHEEL, handleMOUSE);
- a = new DynamicRegistrationProxy(t);
- addChild(t);
- addChild(c);
- }
- private function handleMOUSE(event:MouseEvent):void {
- switch(event.type) {
- case MouseEvent.MOUSE_DOWN:
- a.setRegistrationByStage(mouseX, mouseY);
- //trace(t.globalToLocal(new Point(mouseX,0)).x,t.globalToLocal(new Point(0,mouseY)).y);
- c.x = mouseX;
- c.y = mouseY;
- removeEventListener(MouseEvent.MOUSE_DOWN, handleMOUSE);
- addEventListener(MouseEvent.MOUSE_MOVE, handleMOUSE);
- addEventListener(MouseEvent.MOUSE_UP, handleMOUSE);
- break;
- case MouseEvent.MOUSE_MOVE:
- //trace(t.mouseX - a.regX, t.mouseY - a.regY);
- a.rotation2 += 5;
- //a.scaleXByRefer += 5;
- break;
- case MouseEvent.MOUSE_UP:
- addEventListener(MouseEvent.MOUSE_DOWN, handleMOUSE);
- removeEventListener(MouseEvent.MOUSE_MOVE, handleMOUSE);
- break;
- case MouseEvent.MOUSE_WHEEL:
- removeEventListener(MouseEvent.MOUSE_MOVE, handleMOUSE);
- c.x = mouseX;
- c.y = mouseY
- a.setRegistrationByStage(mouseX, mouseY);
- a.scaleX2 += event.delta * 0.1;
- a.scaleY2 += event.delta * 0.1;
- break;
- default:
- addEventListener(MouseEvent.MOUSE_DOWN, handleMOUSE);
- removeEventListener(MouseEvent.MOUSE_MOVE, handleMOUSE);
- }
- }
- }
- }
- import flash.display.Shape;
- class CrossHairs extends Shape {
- public function CrossHairs() {
- graphics.lineStyle(2,0xFF0000);
- graphics.moveTo( -10, 0);
- graphics.lineTo( 10, 0);
- graphics.moveTo( 0, -10);
- graphics.lineTo( 0, 10);
- }
- }
Theme by Yofox, Powered by Roclog v3.2.0
Copyright © 2007 X-Intend[超级打算]. All rights reserved.