Key : เช็คการกดปุ่มบนคีย์บอรด และ
Listener Event แบบมั่วสุดๆ
KEY บอกตามตรงว่าไม่ค่อยได้ใช้ครับ
เพราะงานส่วนมากไม่ค่อยมี ...ไม่เคยได้งานน่ะแหล่ะ
เลยเอาตัวอย่างจาก Help ครับ และจะเอามาเพิ่มเติมประยุกต์นิดๆหน่อยๆ
โดยหลักๆ มีแค่ สอง event คือ
กด และ
ปล่อย ... ฮะๆ ง่าย
และโดยพิมพ์นิยม เราจะใช้
Listener event มาตรวจจับ
ใครก็ได้ มาอธิบาย Listener ทีครับ ผมยังให้คำจำกัดความของคำสั่งนี้ไม่ได้เลย ( คือไม่รู้น่ะแหล่ะ)
รู้แต่ว่า เป็นการตรวจเช็ค เท่าที่เดาๆได้ คือ มันจะทำงานต่อเมื่อมีำ event นั้นเกิดขึ้น
ผมไม่อายเลยที่จะบอกว่า งานนี้ผมเดา 100% ออกจะมั่วด้วยเพราะไม่ค่อยเข้าใจเท่าไรจะอธิบายแบบมวยวัดและเท่าที่ผมรู้นะครับ หากผิดพลาดช่วยออกมาชี้แจงกันหน่อยนะครับ จักเป็นพระคุณยิ่ง
Using event listeners
Event listeners let an object, called a listener object, receive events broadcast by another object, called a broadcaster object.
The broadcaster object registers the listener object to receive events generated by the broadcaster. For example, you can
register a movie clip object to receive onResize notifications from the Stage, or a button instance could receive onChanged
notifications from a text field object. You can register multiple listener objects to receive events from a single broadcaster,
and you can register a single listener object to receive events from multiple broadcasters.
The listener-broadcaster model for events, unlike event handler methods, lets you have multiple pieces of code listen to the
same event without conflict. Event models that do not use the listener/broadcaster model, such as XML.onLoad(), can be
problematic when various pieces of code are listening to the same event; the different pieces of code have conflicts over
control of that single XML.onLoad callback function reference. With the listener/broadcaster model, you can easily
add listeners to the same event without worrying about code bottlenecks.
ในแฟลชหากเราจะตรวจจับอะไรสักอย่างแบบ
ตลอดเวลา เรามักใช้ EnterFrame กันใช่ไหมครับ นั่นคือการทำงานทุกๆเฟรม
แต่ Listener จะเป็นการทำงานต่อเมื่อ event เกิดขึ้น จะแบบว่า
เมื่อ Object ใดๆที่เราสร้าง Listener ตรวจจับไว้ มีการทำงานตาม Event ที่เราตรวจจับไว้
ไม่ว่าที่ไหน เมื่อไร หาก Object นั้นๆยังอยู่ และยังไม่ลบ Listener event นั้นๆออก
มันก็จะเรียก ฟังชั่นที่เราแหมะไว้กับ Listener Event นั้นๆให้ทำงาน
โอ๊ยยย งง ไหม งงสิ ผมยังงงเลย ดูตัวอย่างละกัน
var keyListener:Object = new Object(); //สร้าง Listener Object มารองรับ
keyListener.onKeyDown = function() { //ใส่ Function เข้าไปใน Event อันนี้คือ กดปุ่มใดๆปั๊ปฟังชั่นนี้ทำงาน และเอามันใส่ไปใน Object "keyListener"
txt1 = Key.getCode(); // จะให้ทำอะไรก็ว่าไป
txt2 = Key.getAscii(); // จะให้ทำอะไรก็ว่าไป
}; //จบฟังชั่น
Key.addListener(keyListener); // ยัดมันเข้าไปใน Key คือสั่งตรวจจับการกดปุ่มไว้ใน Key นั้นๆ
ฮะๆ ไม่รู้เรื่องเลย
อธิบายไม่ถูกแฮะ
จากตัวอย่างสคริปข้างบน พล่ามออกมาได้ว่า ...สมมุตินะ
- keyListener เป็น ยาชนิดหนึ่งที่มีความสามารถ onKeyDown ติดตัวอยู่ และยังลอยอยู่ในอากาศ
และพร้อมจะฉีดให้ใครก็ใด้่ ใครโดนฉีดก็จะมีความสามารถแบบนี้ได้เลย
- กรณีนี้ เราจะเอาความสามารถของ function มันมาให้ปุ่มบนคีย์บอรด
- เราก็เลยจับ keyListener ยัดใส่เข็มฉีดยา ฉีดใส่ KEY ต่างๆบนคีย์บอรด (KEY ครอบคลุมหมดทุกปุ่ม)
- ทีนี้ ปุ่มบนคีย์บอรดก็ใด้ยาชนิดนี้มาเป็นพลังพิเศษ คือมีการตรวจ onKeyDown ได้เลย
คล้ายๆสร้างการตรวจจับไว้ทุกๆปุ่ม แต่
่จะมีการตรวจจับจริงๆเมื่อมี Event onKeyDown เกิดขึ้น (อันนี้ล่ะครับผมเดามั่วสุดๆ)
โอ๊ยยย ยิ่งอธิบาย ยิ่งบ้า
สคริปตัวอย่างข้างบน เป็นสคริปที่เช็ด code กับ ascii บนปุ่มแบง่ายๆ
โดย (รวบรัดล่ะนะ)
เมื่อ Key ใดๆบนคีย์บอรด มีการกดปุ่ม
ให้ดึง key code ของปุ่มนั้นๆแสดงผลที่ txt1 โดยคำสั่ง getCode()
และให้ดึงรหัส ASCII code ของปุ่มนั้นๆแสดงผลที่ txt2 โดยคำสั่ง getAscii()
getCode (Key.getCode method)
public static getCode() : Number
Returns the key code value of the last key pressed.
Note: The Flash Lite implementation of this method returns a string or a number, depending on the key code passed in by the platform. The only valid key codes are the standard key codes accepted by this class and the special key codes listed as properties of the ExtendedKey class.
A Flash application can only monitor keyboard events that occur within its focus. A Flash application cannot detect keyboard events in another application.
getAscii (Key.getAscii method)
public static getAscii() : Number
Returns the ASCII code of the last key pressed or released. The ASCII values returned are English keyboard values. For example, if you press Shift+2, Key.getAscii() returns @ on a Japanese keyboard, which is the same as it does on an English keyboard.
A Flash application can only monitor keyboard events that occur within its focus. A Flash application cannot detect keyboard events in another application.
ตัวอย่างจ๊ะ หากปุ่มใดๆมี shortcut ต่างๆ หรือเป็นคีย์เฉพาะ มันก็ไม่ขึ้นโค้ดนะครับ
เพราะคำสั่งหลักมาก่อนแฟลช(รึเปล่า) เช่นกด PrtSc วินโด่ ก็จะสั่ง printscreen ก่อนครับ (ประมาณนั้น ... วุ๊ย ไม่รู้เรื่องไรสักอย่างเลยตู)
แต่หากเรารู้โค้ดปุ่มนั้นๆ ในส่วนแฟลชเองก็เช็คใด้ครับ มันทำงานครับ ( เดานะคร้าบบบบ )
http://img2.f0nt.com/flash/5157263579bf043a8950a596257b2c8b.swfงานนี้มั่วกันเช็ดเม็ดเลย
ผิดพลาดประการใด น้อมรับผิดอย่างแรงๆครับ
ถ้าไม่เข้าใจอย่างไรก็ลองๆอ่านใน Help และลองจากตัวอย่างนะครับ
เดี๋ยวงานหน้ามา กดๆ ปล่อยๆ กันครับ วันนี้แค่นี้ก่อนนะครับ ไอ้นี้ใช้พลังงานในความเข้าใจเยอะมากเลย