Monday, December 6, 2010

AS3 : การใช้ function รับส่งค่าตัวแปร

Function คือการทำงานในระดับปฏิบัติงานอย่างใดอย่างหนึ่ง เปรียบได้กับ โรงแรม ที่ประกอบไปด้วยหลายแผนก แต่ละแผนกทำงานแตกต่างกันไป

ตัวอย่าง เช่น

แผนกห้องครัว
function kook(พารามิเตอร์):void{
//ทำงานส่วนของการทำอาหาร
}

แผนกพีอาร์
function PR(พารามิเตอร์):void{
//ทำงานส่วนของ PR
}

แต่การที่ฟังก์ชั่นจะทำงานได้ ต้องมีการส่งค่า หรือมีคำสั่งมาจากเหตุการใดๆ เช่นการกดปุ่มทำงานบน Stage หรือ Panel พื้นที่ขาวๆที่วาง Object ต่างๆนั่นแหละคับ

เช่น

// กำหนด Symbol ใ้ห้เป็น Button ตั้งชื่อ Instance Name ว่า btnWeb เราจะสั่งให้เมื่อคลิกปุ่มนี้ ให้พิมพ์คำว่า "Hello Thailand" สามารถทำได้ดังนี้
// เริ่มด้วยชื่อ Instance Name ที่เราตั้งไว้ทำปุ่ม ตามด้วยชุดคำสั่งจับเหตุการณ์ คลิก
btnWeb.addEventListener(MouseEvent.CLICK, whenClick)

// รับคำสั่งจากการคลิกปุ่มให้แสดงผล
function whenClick(e:MouseEvent):void{
trace("Hello Thailand");
}
สงสัยไหมว่าทำไม ต้องเขียนพารามิเตอร์เป็น e:MouseEvent จริงๆแล้วตัวแปร e ตั้งขึ้นมารับให้ทำงานในส่วนของอีเว้นที่เกิดจากเม้าส์ "MouseEvent" ดังนั้นจะตั้งชื่อตัวแปร e เป็นอย่างอื่นก็ได้ที่สื่อความหมาย ซึ่งตัวอย่างนี้ยังไม่ได้ใช้ตัวแปร e ทำงานอะไร แต่ถ้าคุณไม่อยากเป็น "พญาร้อย if หรือ กรมมะหมื่นฟังก์ชั่น" เราสามารถใช้ตัวแปร e จำแนกปุ่มไ้ด้ว่า ปุ่มไหนคลิกมา ด้วยคำสั่ง e.target

ยัง งงๆๆ ใช่มะ สมมติว่า มีปุ่มอยู่ 2 ปุ่ม A กับ B ถ้าหากกดปุ่ม A เราจะให้พิมพ์คำว่า "AAA" ถ้าหากว่ากดปุ่ม B เราจะให้พิมพ์ "BBB" แต่ทั้งสองปุ่ม จะส่งไปที่ฟังก์ชั่นเดียว แทนที่จะต้องเขียนเพิ่มอีก 1 ฟังก์ชั่น แล้วลองคิดดู ถ้าหากมี 100 ปุ่ม คุณจะเขียน 100 ฟังก์ชั่นรับค่าเรอะ (เอาสมองไว้ตั้งชื่ออย่างอื่นดีกว่ามะ :-))

วิธีการจะรู้ว่า กดมาจากปุ่มชื่ออะไร จะใช้ e.target นี่แหละคับเป็นตัวบอก

ตัวอย่าง
// กำหนด Instance Name ให้ปุ่มแรกชื่อ A ส่วนปุ่มสอง ชื่อ B
A.addEventListener(MouseEvent.CLICK, whenClick);
B.addEventListener(MouseEvent.CLICK, whenClick);

function whenClick(e:MouseEvent):void{
if (e.target=="A"){
trace("AAA");
} else if(e.target =="B"){
trace("BBB");
} else{
trace("Not Found");
}
}

การเรียกฟังก์ชั่นแบบอื่นๆ

การเรียกใช้งาน Function นอกจากจะสั่งให้ทำงานจากปุ่มได้แล้ว บางกรณี เราอาจจะเขียนชื่อฟังก์ชั่นในฟังก์ชั่นอื่นๆได้อีก

สมมติว่า เราสร้างเกมควบคุมการเก็บคะแนน เมื่อมีการยิงโดนเป้าเกิดขึ้น ภายในฟังก์ชั่น shoot เราอาจจะส่งค่าไปประมวลผลที่ฟังก์ชั่น bomb เพื่อสร้างภาพการระเบิด โดยส่งค่า ชื่อ MovieClip, การเคลื่อนไหว,การหมุน

ตัวอย่าง

function shoot(e:MouseEvent):void{
// คำสั่งต่างๆ จับค่าการยิงถูกเป้า bomb(อาร์กิวเม้นท์);
bomb(mc1,250,100);
}

function bomb(mc:MoiveClip, move:Number,rotate:Number):void{
//สร้างภาพ Effect การระเบิด และการเคลื่อนไหว
mc1.x -=move;
mc1.y +=move;
mc1.rotatation +=rotate;
}
(มีต่อ รวมคำสั่ง MouseEvent, Event และอื่นๆ ยังเขียนไม่เสร็จคับ -_-)

No comments: