搜尋文章

2013年2月21日 星期四

as3-vector sort


在as3裡,vector可以透過sort()函數來進行排序
跟array比較不同的是,array的sort可以不帶參數或是用定義好的參數帶入
例如:
Array.CASEINSENSITIVE:這個選項會忽略大小寫限制加以排序。例如,小寫字母 b 會排在大寫字母 D 之前。

Array.DESCENDING:這會反轉預設的依遞增順序排序。例如,字母 B 會排在字母 A 之前。

Array.UNIQUESORT:這會在發現兩個相同的值時,中止排序作業。

Array.NUMERIC:這會進行數值排序,因此 3 會排在 10 之前。
在vector的sort裡一定要帶入一個自訂義用來執行排序的function,或是也可以使用上面的參數帶入
例如:vector.sort(Array.CASEINSENSITIVE);
如果今天有5個MovieClip要進行名字的排序的話,就可以用自定義的涵式來執行了。
import flash.display.MovieClip;
import flash.text.TextField;

//先建立5個MovieClip
var mc1:MovieClip = new MovieClip();
var mc2:MovieClip = new MovieClip();
var mc3:MovieClip = new MovieClip();
var mc4:MovieClip = new MovieClip();
var mc5:MovieClip = new MovieClip();
//命名
mc1.name = "mc_1";
mc2.name = "mc_2";
mc3.name = "mc_3";
mc4.name = "mc_4";
mc5.name = "mc_5";
//此時在mcVector裡的MovieClip已經不是按照mc_1、mc_2 ...的順序排列了
var mcVector:Vector.<MovieClip>  = new Vector.<MovieClip>();

mcVector[0] = mc3;
mcVector[1] = mc5;
mcVector[2] = mc1;
mcVector[3] = mc4;
mcVector[4] = mc2;
trace(showName(mcVector));
//output mc_3,mc_5,mc_1,mc_4,mc_2
mcVector.sort(vectorSortFunction);
trace(showName(mcVector));
//output mc_1,mc_2,mc_3,mc_4,mc_5

function vectorSortFunction(firstMc:MovieClip , secandMc:MovieClip)
{
  //先把名字後面的數字拆出來
  var number1:int = int(firstMc.name.split("_")[1]);
  var number2:int = int(secandMc.name.split("_")[1]);
  //之後在用數字去作排序
  if (number1 > number2)
  {
    //這邊返回1的意思是,如果前面的數字大於後面的數字,前面的對象就要往後排
    return 1;
  }
  else if (number1 < number2)
  {
    //返回-1的意思是,如果前面的數字小於後面的數字,前面的對象就要往前排
    return -1;
  }
  else
  {
    //返回0的意思是,一樣的話就不變動順序
    return 0;
  }
}

function showName(vector:Vector.<MovieClip>):String
{
  var _txt:TextField = new TextField();;
  for each (var mc:MovieClip in vector)
  {
    
    _txt.appendText(mc.name+",");
  }
  
  return _txt.text;
}



2012年10月5日 星期五

android-Too large bitmap to be uploaded into a texture

今天遇到了一個問題是開啟了硬體加速後在imageView裡面塞圖片後發現畫面一片黑,
看了log他寫 Too large bitmap to be uploaded into a texture
上網查了一下原因找到這一篇文章
 Too large bitmap to be uploaded into a texture
看來也有人遇到同樣的問題,裡面的回答是
When using hardware acceleration, there is a limit to the size of a texture.
When you render a bitmap, it has to be uploaded to an OpenGL texture first.
Your bitmap happens to be bigger than the maximum texture size on Xoom (2048x2048.)
You need to use a smaller bitmap or split it into several bitmaps.
所以解答就是把圖縮小到2048之內吧 ! !

2012年2月28日 星期二

Alternativa3D 8.17.0 環境設置

1.先到Alternativa的官網下載Alternativa3D 8.17.0的SWC。

2.下載FlashPlayer11 Standalone Debuggers找到Flash Player 11.2 Beta 32-bit Standalone Debuggers,
點選Download standalone for Windows (EXE, 9.0 MB),這個連結是windows的如果是其他作業系統的話請至adobe labs下載。

3.下載Flash Player 11.2 Beta Global SWC,一樣可在adobe labs下載。

4. 到此路徑Adobe Flash CS5.5\Common\Configuration\ActionScript 3.0底下新建一個資料夾名稱取為FP11,再將下載的 Flash Player 11.2 Beta Global SWC放到資料夾裡並且更改檔名為playerglobal.swc

5. 新增FlashPlayer11.xml
至此路徑下Adobe Flash CS5.5\Common\Configuration\Players先複製一份FlashPlayer10_2.xml,並且更名為FlashPlayer11.xml,之後打開文件修改,將第三行修改為
<player id="FlashPlayer11" version="13" asversion="3">,第四行修改為 <name>Flash Player 11</name>,第8行<playerDefinitionPath>標籤裡的as3屬性修改為"$(AppConfig)/ActionScript 3.0/FP11/playerglobal.swc" 這邊的路徑就是第四點新增資料夾的路徑。

6. 放置debugger,將第二點下載的FlashPlayer11 Standalone Debuggers修改檔名為
 FlashPlayerDebugger.exe放到此路徑下Adobe Flash CS5.5\Players\Debug

7.開啟flash,點選編輯/偏好設定/ actionScript/actionScript3.0設定,在元件庫路徑下新增第一點下載的Alternativa3D 8.17.0的SWC。

 8.打開A3D的DEMO檔案,記得A3D要發布的時候要按住ctrl+shift+enter用Debugger的player發布才會有stage3D,如果單點swf檔也要用flashPlayer11看的話來這下載吧連結,下載 Windows Flash Player 11.1 Projector content debugger (EXE, 8.91MB)這個檔案,然後指定swf永久用這個player開啟就可以了~