目前分類:ActionScript3 (5)

瀏覽方式: 標題列表 簡短摘要
工作上的案子要開發個AS小遊戲,除了要能計算自己的BMI,還要算出自己的BMI最近接近哪個明星的BMI。一開始的想法是找如何要二分法陣列,再進行遞迴比對,反正就是想很多…浪費了很多時間,腦子愈來愈不靈光了。(小P:你從來就沒靈光過)。不過經過google了一些文章,從這篇文章有了一些想法。原來要從陣列中搜尋最接近輸入值的元素方法其實比想像中的簡單許多,大概的作法就是。
  1. 把「輸入值」加至比對陣列中
  2. 將排序陣列(降幕或升幕都可)
  3. 找到此輸入值在陣列中的索引值
  4. 比對陣列中(索引值-1)和(索引值+1)值的絕對值,最小的就是答案了
下列是概念上的範例程式:

低溫烘培 發表在 痞客邦 留言(0) 人氣()

在PHP中,Round()函式可以傳入兩個參數,第一個通常是帶有小數的浮點數,而第二個是想取得小數位數。現在寫ActionScript,發現它的Math.Round()並沒有所謂的第二個參數,囧rz(這麼好的參數竟然就不見了),而且好像Javascript也是一樣,沒有第二參數。只好自己手刻函式來強化了,幸好追加這個參數也沒什麼難度可言,只要先將【數值x(欲求的小數位*10)】進行Math.Round()後,再除於(欲求的小數位*10)。嗯…還是直接看下列的函式吧。
/**
 * RoundX
 * 強化的四捨五入
 * 
 * @param float val 浮點數
 * @param int precision 小數位數
 */
function roundX(val, precision){
     //理論上版本
     var precision = precision || 0; //預設0位數
     var a = val * Math.pow(10, precision); //320007.5
     var b = Math.round(a); //320008
     var c = b / Math.pow(10, precision); //32.0008
     //return c;
     //理論版濃縮
     //return Math.round(val * Math.pow(10, (precision || 0))) / Math.pow(10, (precision || 0));

     //修正誤差版本。但因為浮點計算產生的誤差,會導致結果錯誤
     //例如32.00075*1000會是320007.49999999994,而不是預期的320007.5       
     var precision = precision || 0; //預設0位數
     var a = val * Math.pow(10, precision + 1); //3200074.9999999995 
     var b = Math.round(a) / 10; //320007.5
     var c = Math.round(b); //320008
     var d = c / Math.pow(10, precision); //32.0008
     //return d;
     //修正版縮濃
     return Math.round(Math.round(val * Math.pow(10, (precision || 0) + 1)) / 10) / Math.pow(10, (precision || 0));
}
/*
以下以PHP的範例再做一次AS版的測試
trace( roundX(3.4));         // 3
trace( roundX(3.5));         // 4
trace( roundX(3.6));         // 4
trace( roundX(3.6, 0));      // 4
trace( roundX(1.95583, 2));  // 1.96
trace( roundX(1241757, -3));//1242000
trace( roundX(5.045, 2));    // 5.05
trace( roundX(5.055, 2));    // 5.06
trace( roundX(0.7142857142857143, 2));    // 0.71
trace( roundX(32.00075, 4));    // 32.0008
*/
筆者發現因為浮點數的誤差關係,像是32.00075四捨五入到小數第四位,會發生錯誤,於2013/1/17進行了修正
文章標籤

低溫烘培 發表在 痞客邦 留言(1) 人氣()

使用FlashDevelop開發時,你可能會發現,當你打算import fl. 系列的組件時,FD並沒有自動幫你提詞,似乎不認這個類別庫。這是因為在FlashDevelop的元件庫裡,並沒有這些組件。在FlashDevelop專案的中《lib》資料夾,其實就有點像是Flash IDE(.fla)中的元件庫,在Flash IDE中,我們可以按【Ctrl + F7】,將組件拖到元件庫。在FlashDevelop中,我們要將Flash中的組件,匯出成SWC,然後丟到專案的lib中。下面筆者將大概提一下如何把Flash IDE中的組件匯出來。

低溫烘培 發表在 痞客邦 留言(0) 人氣()

前幾天文章[使用 Flash CS3 開發 AIR app]的回應中,我的好友小P提到了FlashDevelop(簡稱FD),所以就順手來寫篇FlashDevelop的安裝筆記囉。為什麼要選用FlashDevelop開發AIR呢?最簡單的一句話就是「有錢的小孩用FlashBuilder、沒錢的小孩用FlashDevelop、會google的小孩用FlashBuilder…」,回歸正題,我們先從[官方下載]最新的FlashDevelop,筆者下載的是 3.3.0 版,接下來的文章比較適用於 3.3.0 版以上,所以如果你下載的版本不同,請自行觀察其變化。

低溫烘培 發表在 痞客邦 留言(2) 人氣()

因為公司使用的是CS3,最近有需要開發AIR的程式,原本打算是直接以Flash的IDE來進行開發,但CS3預設版本並沒有支援AIR的開發(喔~該死),所以不得不去給它更新升級一下。 所以在這邊記錄一下打造可以開發AIR的Flash CS3的過程與大家分享。當然如果你是使用CS4以上版本的Flash,可以直覺無視以下的文章

低溫烘培 發表在 痞客邦 留言(2) 人氣()