ActionScript 3 Flash:外部资产类别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActionScript 3 Flash:外部资产类别相关的知识,希望对你有一定的参考价值。
/* AS3
Copyright 2009 urbanINFLUENCE.
*/
package org.natemiller.types {
import fl.motion.easing.*;
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.utils.Timer;
import org.natemiller.events.AssetEvent;
/*
* Generic base class for a loadable asset
*
* @langversion ActionScript 3.0
* @playerversion Flash 9.0
*
* @author
* @since 13.02.2009
*/
public class Asset implements IEventDispatcher {
//--------------------------------------
// CLASS CONSTANTS
//--------------------------------------
//--------------------------------------
// CONSTRUCTOR
//--------------------------------------
public function Asset() {
}
//--------------------------------------
// VARIABLES
//--------------------------------------
public static var base_path:String = "";
protected static var _assets:Array = [];
protected static var _hshAssets:Object = {};
protected var dispatcher:EventDispatcher;
public var data:Object = {}; // public object for dynamic property setting
private var _assetLoader:Loader;
private var _path:String;
private var _hasLoadError:Boolean = false; // whether an error was triggered while loading
private var _isLoaded:Boolean = false; // if the image successfully loaded
private var _percentLoaded:int = 0; // the percentage loaded
private var _timerMonitorProcess:Timer; // a timer used to monitor load progress
//--------------------------------------
// GETTER/SETTERS
//--------------------------------------
public function get content() : Loader {
return _assetLoader;
}
public function get isLoaded() : Boolean {
return _isLoaded;
}
public function get percentLoaded() : int {
return _percentLoaded;
}
//--------------------------------------
// PUBLIC METHODS
//--------------------------------------
/**
* Initializes the asset instance
*/
public function initialize(path:String) : void {
_path = path;
_assetLoader = new Loader();
dispatcher = new EventDispatcher(this);
} // end initialize
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{
dispatcher.addEventListener(type, listener, useCapture, priority);
}
public function dispatchEvent(evt:Event):Boolean{
return dispatcher.dispatchEvent(evt);
}
public function hasEventListener(type:String):Boolean{
return dispatcher.hasEventListener(type);
}
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void{
dispatcher.removeEventListener(type, listener, useCapture);
}
public function willTrigger(type:String):Boolean {
return dispatcher.willTrigger(type);
}
/**
* public string method
*/
public function toString() : String {
return "[Asset path: " + _path + "]";
} // end toString
/**
* Loads the asset into mem
*/
public function load() : void {
if (_isLoaded || _hasLoadError) {
trace("[Asset.load]: Warning - you've already attempted to load this asset. Halting load execution.");
return;
}
_assetLoader.contentLoaderInfo.addEventListener(Event.INIT, onAssetLoaded, false, 0, true);
_assetLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onAssetLoadError, false, 0, true);
beginAssetLoadProgressMonitor();
_assetLoader.load( new URLRequest(_path));
} // end load
//--------------------------------------
// EVENT HANDLERS
//--------------------------------------
/**
* Called when the photo has completed loading
*/
protected function onAssetLoaded(e:Event) : void {
killAssetLoadProgressMonitor();
_percentLoaded = 100;
_isLoaded = true;
dispatchEvent(new AssetEvent(AssetEvent.LOADED, true, false, this));
disposeListeners();
} // end onAssetLoaded
/**
* Called when the photo has failed to load
*/
protected function onAssetLoadError(e:IOErrorEvent) : void {
trace(e);
_hasLoadError = true;
disposeListeners();
} // end onAssetLoadError
/**
* Called each time the load progress monitor ticks, updates the load percentage
*/
protected function onMonitorLoadTick(e:TimerEvent = null) : void {
var bLoaded:Number = _assetLoader.contentLoaderInfo.bytesLoaded;
var bTotal:Number = _assetLoader.contentLoaderInfo.bytesTotal;
if (bLoaded > 0 && bTotal > 0) {
_percentLoaded = Math.round(bLoaded / bTotal * 100);
} else _percentLoaded = 0;
} // end onMonitorLoadTick
//--------------------------------------
// PRIVATE & PROTECTED INSTANCE METHODS
//--------------------------------------
/**
* Trashes any listeners no longer needed. Triggered by either an error or load complete event
*/
protected function disposeListeners() : void {
_assetLoader.removeEventListener(Event.INIT, onAssetLoaded);
_assetLoader.removeEventListener(IOErrorEvent.IO_ERROR, onAssetLoadError);
} // end disposeListeners
/**
* Starts a monitor process to update the load amount for the photo
*/
protected function beginAssetLoadProgressMonitor() : void {
_timerMonitorProcess = new Timer(100); // execute check every 100 ms
_timerMonitorProcess.addEventListener(TimerEvent.TIMER, onMonitorLoadTick, false, 0, true);
onMonitorLoadTick(); // fires to make sure that this is called at least once
_timerMonitorProcess.start();
} // end beginPhotoLoadProgressMonitor
/**
* Destroys the photo progress monitor
*/
protected function killAssetLoadProgressMonitor() : void {
_timerMonitorProcess.stop();
_timerMonitorProcess.removeEventListener(TimerEvent.TIMER, onMonitorLoadTick);
} // end killPhotoLoadProgressMonitor
} // end Asset
} // end package
/* AS3
Copyright 2009 urbanINFLUENCE.
*/
package org.natemiller.events {
import flash.events.Event;
import org.natemiller.types.Asset;
/*
* Event sublcass used for assets
*
* @langversion ActionScript 3.0
* @playerversion Flash 9.0
*
* @author
* @since 13.02.2009
*/
public class AssetEvent extends Event {
//--------------------------------------
// CLASS CONSTANTS
//--------------------------------------
public static const LOADED : String = "assetLoaded";
//--------------------------------------
// CONSTRUCTOR
//--------------------------------------
public function AssetEvent( type:String, bubbles:Boolean=true, cancelable:Boolean=false, asset:Asset = null ){
super(type, bubbles, cancelable);
_asset = asset;
}
public function get asset() : Asset {
return _asset;
}
override public function clone() : Event {
return new AssetEvent(type, bubbles, cancelable, _asset);
}
private var _asset:Asset;
}
}
以上是关于ActionScript 3 Flash:外部资产类别的主要内容,如果未能解决你的问题,请参考以下文章
带 Loader 的外部游戏在 Flash、Action Script 3 中不起作用
《Flash ActionScript 3 殿堂之路》一,二章 语言基础
Actionscript 3,flexSDK,当它超过flash阶段时阻止鼠标滚轮滚动