搜尋部落格文章

2011年12月29日 星期四

TextField 判斷不同字元 套用不一樣的 TextFormat

//正規表達式判斷字串中包含數字
GlobalData.numberRegExp=/\d/g;

override public function set text(value:String):void {
   if (value != null) {
    this.visible = false;
    //super.text = value;
    var numTf:TextFormat;
    var indexArr:Array = [];
    trace("override set text :" + value);
    
    switch (Main.languageType) {
     
     case LanguageType.en_US:
      super.text = value;
      break;
     
     case LanguageType.zh_TW:
      
      if (GlobalData.numberRegExp.test(String(value))&&value.length>0) { //若字串內包含數字(1~more)
       
       numTf = this.getTextFormat(); //copy default format
       numTf.font = GlobalData.font2.fontName;
       indexArr = searchCharCode(value).concat();
       super.text = value;
       for (var j:int = 0; j < indexArr.length; j++) {
        
        this.setTextFormat(numTf, indexArr[j], (indexArr[j] + 1));
       }
       
      }else {
       super.text = value;
      }
      break;
    }
    
   } else {
    trace("value == null");
   }
   this.visible = true;
   return;
  }
  
  //搜尋字元
  private static function searchCharCode(str:String):Array {
   var tempArr = [];
   
   for (var i:int = 0; i < str.length; i++) {
    if (str.charCodeAt(i) >= 46 && str.charCodeAt(i) <= 57) {
     tempArr.push(i);
    }
   }
   return tempArr;
  }

2011年12月20日 星期二

Loader,URLLoader,URLStream 比較

(1)Loader
Loader,用於加載外部的圖片和SWF文件。
如果加載圖片文件(jpg,gif,png等)時,Loader.content得到數據類型是Bitmap對象;
如果加載SWF文件(flash 9版本)時,Loader.content得到數據類型是MovieClip對象;
如果加載SWF文件(flash 9以前版本)時, Loader.content得到數據類型是AVM1Movie對象;

(2)URLLoader
以文本、二進制數據或URL編碼變量的形式從URL下載數據。在下載文本文件、XML或其它用於動態數據驅動應用程序的信息時,它很有用。 URLLoader對象會先從URL中下載所有數據,然後才將數據用於ActionScript。它會發出有關下載進度的通知,通過bytesLoaded和bytesTotal屬性以及已調度的事件,可以監視下載進度。 在加載非常大的視頻文件(如FLV的視頻文件)時,可能會出現內存不足錯誤。

(3)URLStream
提供對下載URL的低級訪問。數據一下載,便可隨即為應用程序使用,這和使用URLLoader時需要等到整個文件下載完不同。並且URLStream類還允許在完成下載前關閉流。已下載文件的內容將作為原始二進制數據提供。在URLStream中的讀取操作是非阻塞模式的。這意味著您在讀取數據之前必須使用bytesAvailable屬性來確定是否能夠獲得足夠的數據。如果不能獲得足夠的數據,將引發EOFError異常。 在默認情況下,所有二進制數據都是以Big-endian格式編碼的,並且最高位字節於第一位。

下面一個實例將被加載的配置文件以二進制數據讀取,這可以解決很多問題,比如對不同格式配置文件進行的處理


package {
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.net.URLRequest;
 import flash.net.URLStream;
 import flash.net.URLLoader;
 import flash.utils.ByteArray;
 import flash.net.URLLoaderDataFormat;
 
 public class Test extends Sprite {
  public function Test(){
   //testURLLoader();   
   testURLStream();
  }
  
  private function testURLLoader():void {
   var urlLoader:URLLoader = new URLLoader();
   urlLoader.dataFormat = URLLoaderDataFormat.BINARY; //原始二进制数据   
   urlLoader.addEventListener(Event.COMPLETE, completeHandler);
   urlLoader.load(new URLRequest("02.xml:"));
  }
  
  private function completeHandler(event:Event):void {
   trace("配置文件是ANSI :" + event.target.data); // 如果配置文件是ANSI等,会出现中文字乱码   
   //URLLoader如果遇到乱码,则可以转换(利用标准的xml格式Excle可以解决乱码问题就是基于这里):   
   var _byteArray:ByteArray = new ByteArray;
   _byteArray.writeBytes(event.target.data);
   _byteArray.position = 0;
   //如果是xml文档   
   var xml:XML = XML(_byteArray.readMultiByte(_byteArray.length, "chinese")); //简体中文 (GB2312)   
   trace(xml);
  }
  
  private function testURLStream():void {
   var stream:URLStream = new URLStream();
   stream.addEventListener(Event.COMPLETE, complete);
   stream.load(new URLRequest("02.xml"));
  }
  
  private function complete(event:Event):void {
   var stream:URLStream = event.target as URLStream;
   var xml:XML = XML(stream.readMultiByte(stream.bytesAvailable, "chinese")); //简体中文 (GB2312)   
   trace(xml);
  }
 }
}

偵測瀏覽器FlashPlayer版本

檢查FlashPlayer版本及是否為debug版

http://flashbuilder.eu/flash-player-version.html
http://www.flashplayerversion.com/

2011年12月19日 星期一

Loader類別的 IO_ERROR 事件中,如何取得url?

因專案需求要對載入物件做加載備用路徑的功能
本來想說用讓Loader.contentLoaderInfo監聽IO_ERROR事件
假設觸發IO_ERROR事件,從事件裡去獲得原始路徑,然後利用string拆解

然後呢!

誰知道
IO_ERROR事件中,居然沒辦法獲取這樣子的屬性
唯一可以取得原始路徑的就在Event.COMPLETE
但在IO_ERROR的錯誤訊息中卻又有原始路徑 囧
這一點實在是很怪異

理論上在初始載入時,應該就會知道載入路徑才是
猜想...可能是Loader內部結構的關係

幾種解決方法

(1) 拆解錯誤訊息
優: 不用自己另寫變數存取
缺: 假設往後錯誤訊息拆解的規則變了,也就失效了
private function ioError(e:IOErrorEvent):void {
  trace(e.text.split(":")[3]);
}
(2) 以url替loader取名字
優: 簡單快速的寫法
缺: 若loader.name另有用途,就不太適用

(3) 寫一個類別繼承Loader
優: 靈活性高
缺: 還沒想到(類別概念要有一定基礎)
複寫Loader.load()

2011年12月14日 星期三

Maxthon 3 update lastest Flash Player

@ 到Adobe官網下載並安裝最新版本的 Adobe Flash Player

一般版: http://get.adobe.com/flashplayer/
Debug版: http://www.adobe.com/support/flashplayer/downloads.html

@ 删除Maxthon3安裝目錄下 \Core\Webkit\Npplugins下的NPSWF32.dll

或者

複製 Windows 7的 C:\WINDOWS\Syswow64\Macromed\FLASH 下的 NPSWF32.dll
或者 Windows XP的 C:\WINDOWS\system32\Macromed\Flash

取代 Maxthon3 安裝目錄下 \ Core \ Webkit的 \ Npplugins 下的 NPSWF32.dll 文件 。