創建自己的ProgressBar組件_Flash教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
推薦:平滑播放FLV視頻文件一直覺得flash播放視頻文件不是很理想,除需要轉換常用的MPG、AVI為FLV的麻煩不說,單是播放FLV文件時那“馬賽克”(實時是縮放播放時沒有經過抗鋸齒處理)很不舒
今天在flash gamer群與一朋友討論組件的制作,今天在硬盤里翻了翻,找到了幾個用mx2004做的組件。這個是純as的ProgressBar
as文件
/**
* looding bar
*
* @作者 章精設(zjs35)
* @版本 v1
*/
import fc.graphics.draw2d.Rect;
import fc.graphics.draw2d.GDI;
import fc.graphics.*;
import fc.text.DrawString;
import fc.utils.Delegate;
import fc.events.EventDispatcher;
import mx.core.UIObject;
[Event("complete")]
[Event("progress")]
[TagName("ProgressBar")]
[IconFile("ProgressBar.png")]
class ProgressBar extends UIObject {
private var dispatchEvent:Function;
public var addEventListener:Function;
public var removeEventListener:Function;
private var _bar:GDI;
private var _str:DrawString;
private var _mc:MovieClip;
var _source:Object;
var _id:Number;
var bar:MovieClip;
public function ProgressBar() {
EventDispatcher.initialize(this);
}
function get source() {
return getSource();
}
[Inspectable(defaultvalue="")]
function set source(x) {
setSource(x);
}
function getSource(Void) {
return _source;
}
function setSource(val):Void {
if (typeof (val) == "string") {
val = eval(val);
}
if (val != null && val != undefined && val != "") {
_source = val;
//trace([_source, typeof (_source)]);
_id = setInterval(this, "setProgress", 80);
dispatchEvent({type:"progress", value:0, target:this});
}
}
function setProgress() {
if (!_visible) {
_visible = true;
}
var p1 = _source.getBytesLoaded();
var p2 = _source.getBytesTotal();
var p = fc.math.Num.point(p1/p2, 2)*100;
_mc._xscale = p;
var s = "加載 " p "%";
dispatchEvent({type:"progress", value:p, target:this});
_str.reset(s);
if (p>=100) {
dispatchEvent({type:"complete", value:_source, target:this});
clearInterval(_id);
complete();
}
}
function complete() {
_bar.target = _mc;
_bar.clear();
_bar.target = this;
_bar.clear();
_str.clear();
init();
}
public function init() {
super.init();
//width = bar._width;
//height = bar._height;
bar._visible = false;
}
function draw() {
//loading條的尺寸
var _w = __width;
var _h = __height;
//文本創建
_str = new DrawString();
_str.target = this;
_str.format(0x333333, "Tahoma", 11);
_str.draw("加載 0%");
_str.setXy(_w, (_h-_str.height)/2);
_bar = GDI.getInstance();
//背景
_bar.target = this;
_bar.fill(new SolidBrush(Color.fill, 100), new Rect(0, 0, _w, _h));
_bar.line(new Pen(1, 0x919999, 100), new Rect(0, 0, _w, _h));
_bar.line(new Pen(1, 0xd5dddd, 100), new Rect(2, 2, _w-2, _h-2));
//loading條
_mc = this.createEmptyMovieClip("back", this.getNextHighestDepth());
_bar.target = _mc;
_bar.fill(new SolidBrush(Color.line, 40), new Rect(2, 2, _w-2, _h-2));
_mc._xscale = 0;
//_visible = false;
}
function size() {
super.size();
}
} 圖示
圖片如下:
![按此在新窗口瀏覽圖片](http://p1.mb5u.com/jc/1037250.jpg)
圖片如下:
![按此在新窗口瀏覽圖片](http://p1.mb5u.com/jc/1037251.jpg)
分享:用MovieClipLoader連續加載外部圖片并進行控制也不記得在那個高手的blog上看到過。學習過,這里有人問起那就拿來用一用了,(整理出來)代碼如下:varselectedmc;varid=1;varNum=13;varmyML:MovieCli
相關Flash教程:
- 相關鏈接:
- 教程說明:
Flash教程-創建自己的ProgressBar組件
。