ActionScript 3 AS3 | KCComponent |基本组件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActionScript 3 AS3 | KCComponent |基本组件相关的知识,希望对你有一定的参考价值。
package kc.core {
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.MovieClip;
import flash.events.Event;
import kc.events.KCComponentEvent;
import kc.utils.ClassUtil;
import kc.utils.UID;
[Event( name="disabled", type="kc.events.KCComponentEvent" )]
[Event( name="enabled", type="kc.events.KCComponentEvent" )]
[Event( name="dataChange", type="kc.events.KCComponentEvent" )]
public class KCComponent extends MovieClip {
// @protected
protected var _data:XML;
protected var _autorelease:Boolean;
// @private
private var _uid:String;
private var _owner:DisplayObjectContainer;
// @constructor
public function KCComponent( data:XML = null, autorelease:Boolean = true ) {
super();
// FlashCore
this.stop();
this.focusRect = false;
this.tabEnabled = false;
this.tabChildren = false;
// KCCompoenent
this.data = data;
this.autorelease = autorelease;
this.addEventListener(
Event.ADDED_TO_STAGE,
$config
);
}
// @override
override public function get enabled():Boolean {
return super.enabled;
}
override public function set enabled( value:Boolean ):void {
super.enabled = value;
this.dispatchEvent(
new KCComponentEvent(
( ! value )
? KCComponentEvent.DISABLED
: KCComponentEvent.ENABLED
)
);
}
// @methods
public function get data():XML {
return this._data;
}
public function set data( value:XML ):void {
if( this._data === value ) return;
this._data = value;
this.dispatchEvent(
new KCComponentEvent (
KCComponentEvent.DATA_CHANGE
)
);
}
public function get autorelease():Boolean {
return this._autorelease;
}
public function set autorelease( value:Boolean ):void {
if( this._autorelease == value ) {
return;
}
this._autorelease = value;
if( ! this._autorelease ){
this.removeEventListener(
Event.REMOVED_FROM_STAGE,
purge
);
}else{
this.addEventListener(
Event.REMOVED_FROM_STAGE,
purge
);
}
}
public function get owner():DisplayObjectContainer {
return this._owner || this.parent;
}
public function set owner( value:DisplayObjectContainer ):void {
this._owner = value;
}
public function get uid():String {
if( this._uid == null ){
this._uid = UID.create();
} return this._uid;
}
public function owns( value:DisplayObject ):Boolean {
if ( this.contains( value ) ) return true;
try{
while( value && value != this ){
if( value is IKCComponent ){
value = IKCComponent( value ).owner;
}else{
value = value.parent;
}
}
}catch( e:SecurityError ){
return false;
} return value == this;
}
public function applyToAllChildren( action:String, ...rest ):void {
var child:IKCComponent;
for ( var a:int = 0; a < this.numChildren; a++ ) {
if ( this.getChildAt(a) is IKCComponent ) {
child = this.getChildAt(a) as IKCComponent;
if( ClassUtil.isMethod( child, action ) ) {
child[action].apply( child, rest );
}else if ( ClassUtil.isPropertyWritable( child, action ) ) {
child[action] = rest[0];
}
}
}
}
public function position( x:Number, y:Number = NaN ):void {
this.x = x;
this.y = y || x;
}
public function scale( x:Number, y:Number = NaN ):void {
this.scaleX = x;
this.scaleY = y || x;
}
public function size( w:Number, h:Number = NaN ):void {
this.width = w;
this.height = h || w;
}
// @purge
public function purge(...rest):void {
this._data = null;
this._uid = null;
this._owner = null;
this._autorelease = undefined;
if ( this.hasEventListener( Event.REMOVED_FROM_STAGE ) ) {
this.removeEventListener(
Event.REMOVED_FROM_STAGE,
purge
);
}
if ( this.hasEventListener( Event.ADDED_TO_STAGE ) ) {
this.removeEventListener(
Event.ADDED_TO_STAGE,
$config
);
}
}
// @handlers
protected function $config(e:Event):void {
this.removeEventListener(
Event.ADDED_TO_STAGE,
$config
);
}
}
}
package kc.events {
import flash.events.Event;
public class KCComponentEvent extends Event {
// @const
public static const ENABLED:String = "enabled";
public static const DISABLED:String = "disabled";
public static const DATA_CHANGE:String = "dataChange";
// @constructor
public function KCComponentEvent( type:String, bubbles:Boolean=false, cancelable:Boolean=false ) {
super( type, bubbles, cancelable );
}
// @override
override public function clone():Event {
return new KCComponentEvent( this.type, this.bubbles, this.cancelable );
}
override public function toString():String {
return this.formatToString( "KCComponentEvent", "type", "bubbles", "cancelable", "eventPhase" );
}
}
}
package kc.utils {
import kc.core.KCStatic;
public class UID extends KCStatic {
// @const
private static const CHARS:Array = new Array( 48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70 );
private static const SEPARATOR:uint = 45;
// @constructor
public function UID() {
super();
}
// @methods
public static function create( value:Array = null ):String {
var uid:Array = new Array();
var template:Array = value || new Array( 8,4,4,4,12 );
var last:int = template.length - 1;
for ( var a:uint = 0; a < template.length; a++ ) {
for ( var b:uint = 0; b < template[a]; b++ ) {
uid.push( CHARS[ Math.floor( Math.random() * CHARS.length ) ] );
} if ( a < last ) {
uid.push( SEPARATOR );
}
}
var time:String = String(
"0000000" + new Date().getTime().toString(16).toUpperCase()
).substr(
Math.random() * template[last]
);
return String(
String.fromCharCode.apply(
null,
uid
)
).substr(
0,
-time.length
) + time;
}
}
}
以上是关于ActionScript 3 AS3 | KCComponent |基本组件的主要内容,如果未能解决你的问题,请参考以下文章
[ActionScript 3.0] AS3.0 水面波纹效果