但是如果定義的值不夠用,或是值不是我們需要的怎麼辦?
當然可以自己另外定義一組Class專門給特殊的值或新增的值叫用。
不過這樣flash.ui.Keyboard及我們自己定義的Keyboard都會同時使用,
多少會感覺混亂。
雖然可以將需要的Key值全部都重新定義到自訂的Keyboard裡,
但一方面費時費工,一方面失去程式盡量重用的精神。
flash.ui.Keyboard不能被繼承更不能覆寫,
所以只能另覓途徑。
這裡提供一個可行的方法~
首先定義一個Class放我們需要新增或是覆寫的Key值
package { /** * CustomizeKeyboard * @author HT */ public class CustomizeKeyboard { public static const ENTER:uint = 9998; //flash.ui.Keyboard裡ENTER的值是13 public static const OTHER:uint = 9999; //另外定義的值 } }
再來定義一個Class用來管控該用那個Keyboard
package { import flash.ui.Keyboard; import flash.utils.Proxy; //在 Flash 11 和 AIR 3.0,Proxy 類別是最上層的類別。 import flash.utils.flash_proxy; /** * CustKeyboardControl * @author HT */ //一定要用動態類別(dynamic) public dynamic class CustKeyboardControl extends Proxy { public function CustKeyboardControl() { } override flash_proxy function getProperty(name:*):* { return CustomizeKeyboard[name] || Keyboard[name]; } } }CustKeyboardControl主要只是Proxy的一個簡單應用。
當要使用時,只要先實體化CustKeyboardControl,其餘用法就跟flash.ui.Keyboard一樣。
var custKeyboard:CustKeyboardControl = new CustKeyboardControl(); trace(custKeyboard.ENTER); //9998 trace(Keyboard.ENTER); //13 trace(custKeyboard.OTHER); //9999 trace(Keyboard.OTHER); //會報錯,Keyboard裡並沒有OTHER這個屬性 //如果custKeyboard去存取一個flash.ui.Keyboard及CustomizeKeyboard都未定義屬性,不會報錯,會傳回undefined trace(custKeyboard.OTHER_2); //undefined //如果custKeyboard去存取一個CustomizeKeyboard未定義屬性但存在於flash.ui.Keyboard,會回傳flash.ui.Keyboard的值 trace(custKeyboard.RIGHT); //39
沒有留言:
張貼留言