創建自己的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教程