创建自己的ProgressBar组件_Flash教程

编辑Tag赚U币
教程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();
}
} 图示

图片如下:
按此在新窗口浏览图片

图片如下:
按此在新窗口浏览图片

分享:用MovieClipLoader连续加载外部图片并进行控制
也不记得在那个高手的blog上看到过。学习过,这里有人问起那就拿来用一用了,(整理出来)代码如下:varselectedmc;varid=1;varNum=13;varmyML:MovieCli

来源:zjs35blog//所属分类:Flash教程/更新时间:2008-03-05
相关Flash教程