因為這個東西寫了很久
一邊寫程式一邊進步
一進步就改變程式風格
又沒有良好維護 code 的時候
程式碼就會有風格不統一的情形
然後程式的命名就亂了
我在想要怎樣命名才是最佳解
我採用的事件流程是CJSignal
我的signal命名規則 :
signal的命名應該是 時間+名詞+動詞 的形式
比方說
onMouseClick
beforeMouseClick
afterMouseClick
onViewChange
函數本身則是避免使用這樣的形式
函數應該使用 動詞 or 動詞+名詞 的形式
比方說
mouseClick.add(onMouseClick); //這樣不好
onMouseClick.add(mouseClick); //這樣不好
onMouseClick.add(handleMouseClick); //這樣比較好
函數名稱盡量要跟函數內容有關 而不是跟函數執行的時間點有關
onMouseClick.add(goToHappyEnding); //這樣更好
2012/4/23
AS3 try catch on EventDispatcher.dispatchEvent()
當 try catch 遇到 EventDispatcher
請問上面的程式會 ?
1. 觸發 trace
2 .進入執行階段錯誤
以下內容要按讚才顯示 [讚]
答案是2. 會進入執行階段錯誤
我另外測了callback
結果是 callback 會觸發 trace
於是自己做了一個簡單版的EventDispatcher
結果也是觸發 trace
內建的 eventDispatcher 到底是.../]\?
public function TestClass() { try { eventDispatch().dispatchEvent(new Event("TEST")); } catch (err:Error) { trace(err); } } public function eventDispatch():EventDispatcher{ var ed:EventDispatcher = new EventDispatcher(); ed.addEventListener("TEST",crashFunction); return ed; } public function crashFunction(e:Event = null):void { var a:Array ; a.concat(); }
請問上面的程式會 ?
1. 觸發 trace
2 .進入執行階段錯誤
以下內容要按讚才顯示 [讚]
答案是2. 會進入執行階段錯誤
我另外測了callback
public function TestClass() { try { crashCallback(crashFunction); } catch (err:Error) { trace(err); } } public function crashCallback(f:Function):void { f(); } public function crashFunction(e:Event = null):void { var a:Array ; a.concat(); }
結果是 callback 會觸發 trace
於是自己做了一個簡單版的EventDispatcher
public class MyEventDispatcher { public var functionArray:Array = []; public function addEventListener(f:Function):void { functionArray.push(f); } public function dispatchEvent():void { for each(var f:Function in functionArray) f(); } } public class TestClass extends Sprite { public function TestClass() { try { eventDispatch().dispatchEvent(); } catch (err:Error) { trace(err); } } public function eventDispatch():MyEventDispatcher{ var ed:MyEventDispatcher = new MyEventDispatcher(); ed.addEventListener(crashFunction); return ed; } public function crashFunction(e:Event = null):void { var a:Array ; a.concat(); } }
結果也是觸發 trace
內建的 eventDispatcher 到底是.../]\?
2012/4/18
在虛擬世界展示實體商品 - online game 和家具業者的異業結盟
我在2008年提過這個概念
但那時候沒想過異業結盟的事情
如果說我玩魔獸世界 (或其他的3D線上遊戲)
在遊戲中看到的任何家具都是有實體商品的
在遊戲裡面可以看到產品的詳細資訊(尺寸、材質、價格等)
然後可以直接在遊戲裡面買下那個家具
接下來就會有物流把家具送到你家了
有兩種可能性
1. 家具業者出 3D model 給遊戲業者,讓遊戲業者布置遊戲場景
2. 家具業者去生產遊戲中的家具(考慮遊戲畫風 這是比較可行的方案)
然後除了家具 還有其他商品的異業結盟
例如服飾業者生產遊戲中的某些經典裝備
cosplay 的進入障礙就變低了
遊戲業者要做的事就是在遊戲中增加購物流程
整個遊戲 就是虛擬賣場
2012/4/13
actionscript 修改 package 造成 svn 差異比對失效
svn 是版本控制軟體
他能幫你做程式碼的差異備份 但是前提是檔案名稱要相同
當我修改 Class1.as 的 package 路徑時
我被迫要移動 Class1.as 到正確的資料夾路徑 (對應 package)
因為移動檔案會被分解為刪除檔案和新增檔案這兩個動作
而刪除的檔案與新增的檔案無關
結果造成 svn 無法與先前版本的 Class1.as 作差異比對了
完全不曉得要怎麼解決這個問題
上次龍哥的意見是說把修改 package 的事情記錄在 svn 的版本說明裡
至少這樣還找得到先前的位置
不曉得有沒有其他更好的解法
他能幫你做程式碼的差異備份 但是前提是檔案名稱要相同
當我修改 Class1.as 的 package 路徑時
我被迫要移動 Class1.as 到正確的資料夾路徑 (對應 package)
因為移動檔案會被分解為刪除檔案和新增檔案這兩個動作
而刪除的檔案與新增的檔案無關
結果造成 svn 無法與先前版本的 Class1.as 作差異比對了
完全不曉得要怎麼解決這個問題
上次龍哥的意見是說把修改 package 的事情記錄在 svn 的版本說明裡
至少這樣還找得到先前的位置
不曉得有沒有其他更好的解法
2012/4/10
BitmapData.setPixel32 bug
var color1:uint = 0x01010101; var bitmapData:BitmapData = new BitmapData(1,1,true, color1); var color2:uint = bitmapData.getPixel32(0,0); trace(color1 == color2);
以上的程式輸出 :
false
var color1:uint = 0x01010101; var bitmapData:BitmapData = new BitmapData(1,1,true, color1); bitmapData.setPixel32(0,0,color1); var color2:uint = bitmapData.getPixel32(0,0); trace(color1 == color2); trace(color1.toString(16)); trace(color2.toString(16));
以上的程式輸出 :
false
1010101
1000000
從這兩個 case 我們知道在 setPixel32 設定顏色跟 BitmapData 建構式傳入顏色是一樣的結果
var color1:uint = 0x010179ff; var bitmapData:BitmapData = new BitmapData(1,1,true, color1); var color2:uint = bitmapData.getPixel32(0,0); trace("color1 = " + color1.toString(16)); trace("color2 = " + color2.toString(16));
以上的程式輸出 :
color1 = 10179ff
color2 = 10000ff
var color1:uint = 0x010180ff; var bitmapData:BitmapData = new BitmapData(1,1,true, color1); var color2:uint = bitmapData.getPixel32(0,0); trace("color1 = " + color1.toString(16)); trace("color2 = " + color2.toString(16));
以上的程式輸出 :
color1 = 10180ff
color2 = 100ffff
從這兩個 case 我們知道他是根據 A 的值對RGB分別作某個四捨五入的行為
我猜是為了繪圖加速之類的事情作的吧
不過這個真的會害死人 = =
2012/4/3
BlurFilter.blurX 255 limit
在 BlurFilter 的說明文件裡面提到
blurX 屬性
blurX:Number
語言版本: ActionScript 3.0
執行階段版本: AIR 1.0, Flash Player 9
水平模糊化量。
有效值為 0 到 255 (浮點)。
預設值為 4。
2 的冪次方數值 (如 2、4、8、16 和 32) 是經過最佳化的,
以便在顯示時會比其它值更為快速。
有效值最大為 255
但我需要值域不限制在 255 以內的模糊濾鏡
所以我準備自己實作一個 Filter
於是我去看了 BitmapFilter 這個 Class
BitmapFilter 類別是所有影像濾鏡特效的基底類別。
BevelFilter、BlurFilter、ColorMatrixFilter、ConvolutionFilter、
DisplacementMapFilter、DropShadowFilter、GlowFilter、GradientBevelFilter 和
GradientGlowFilter 類別都可以擴充 BitmapFilter 類別。 您可以將這些濾鏡特效套
用至任何顯示物件。
您無法直接實體化或擴充 BitmapFilter。
所以我無法自己實作Filter
請問我如果要對一個 Shape 物件使用值域超過255的 BlurFilter 要怎麼作?
我想到一個很蠢的方法
那就是
1. 取得 Shape 的 BitmapData
2. 實作一個模糊濾鏡函數
輸入 BitmapData
輸出模糊後的 BitmapData
3. 改用 Bitmap 類別作物件顯示
請問這個問題除了這個方法還有別的解法嗎?
訂閱:
文章 (Atom)