
หลายคนที่เขียนเกมด้วยแฟลชมันจะมีปัญหาหนึ่งที่ต้องคำนึงถึงอยู่เสมอ นั่นก็คือ การระบุพิกัดของวัตถุ
การระบุพิกัดนั้น เนื่องมาจากว่า วัตถุ เช่น MovieClip มักจะมีวัตถุซ้อนอยู่ภายในอีกทีหนึ่ง
ซึ่งวัตถุที่อยู่ภายใน ก็จะระบุพิกัดแกน x และแกน y โดยอ้างอิงจากวัตถุที่บรรจุตัวมันอยู่
ตามภาพประกอบด้านล่าง
จากภาพ MovieClip B ซึ่งอยู่ภายใน MovieClip A อีกทีหนึ่ง
เมื่อเราเขียนโค้ดเพื่ออ่านค่าพิกัด x,y ของ MovieClip B จะพบว่า ค่าที่ได้จะเป็นค่าพิกัดที่อ้างอิงจากตัวแม่ของมันเสมอ
โดยอิงจากจุด Registration ของ MovieClip A
พิกัดในรูปแบบนี้ จะเรียกว่า Local Coordinates
เป็นรูปแบบปรกติของแฟลช พิกัดแบบนี้ง่ายต่อการอ้างอิงมาก ถ้าเรานึกถึงว่าในโลกจริงๆของเรา เราอ้างอิงว่า ตัวเราอยู่ที่ใด เราเองก็จะระบุตำแหน่งตัวเราเป็น Local Coordinates เช่นกัน เช่น “ผมอยู่บนห้องนอน ครับแม่ “ คงไม่มีใครบอกแม่ว่า ผมอยู่ที่ xxxลิปดา xxxx ฟิลิปดา ครับแม่
ข้อดีของมันก็คือ เราสามารถควบคุมตำแหน่งของ MovieClip B ได้โดยง่าย ตามภาพ หากต้องการให้ MovieClip B อยู่ในตำแหน่ง 50×50 พิกเซลภายใน MovieClip A จะสามารถสั่งงานได้โดยง่าย โดยไม่ต้องคำนึงว่า MovieClip A นั้นอยู่ตำแหน่งใดบน Stage
แต่สำหรับบางกรณีที่เราต้องการทราบว่า MovieClip B นั้นมีพิกัดเท่าไร โดยอ้างอิงจาก Stage เช่นการเช็คการชนกันของวัตถุในเกม หรือการคุมตำแหน่งต่างๆ เราอาจจะพบปัญหาว่าจะต้องคำนวนตำแหน่งของ MovieClip A ร่วมด้วย
โดยจากภาพ MovieClip A อยู่ที่พิกัด 500×150 pixel
ดังนั้น เราอาจจะต้องคำนวนด้วยสูตร
coordX = A.x+A.B.x ;
coordY = A.y+A.B.y;
เพื่อหาตำแหน่งของ MovieClip B ต่อ Stage
พิกัดแบบนี้ก็คือ Global Coordinates ถ้าจะเทียบกับโลกแห่งความเป้นจริง ก็คงเป็นการระบุพิกัดบนโลก ลิปดา ฟิลิปดา
แต่จะว่าไปแล้ว พิกัดบนโลก ก็อาจจะยังมองเป็น Local ได้ เพราะว่า เราอาจจะต้องอิงไปยังตำแหน่งบนจักรวาล ใช่ไหมครับ (อันนี้ก็อาจจะไกลไป)
สำหรับการแปลงพิกัด กลับไปกลับมา ก็คงอาจจะปวดหัวไม่น้อย แต่สำหรับ ActionScript 3.0 แล้วเรามีคำสั่งแปลง ง่ายๆครับ
import flash.geom.Point;
var bPoint:Point = new Point(A.B.x, A.B.y);
var coord:Point = A.localToGlobal(bPoint);
trace(coord);
โดยเราจะใช้ Point ชี้ไปที่พิกัดของ B ก่อน แล้วจึงใช้ Method localToGlobal
เพื่อแปลงพิกัดจาก Local ไปเป็น Global
และ
import flash.geom.Point;
var StagePoint:Point = new Point( 200 , 200);
var coord:Point = A.globalToLocal(StagePoint);
trace(coord);
เป็นการใช้งาน Methode globalToLocal แปลงพิกัดจาก Stage มาระบุว่า เป็นตำแหน่ง Local ใดบน MovieClip A
ถ้ามีคำถามโพสไว้นะครับ
ถ้าไม่ค่อยได้เข้ามาเช็ค comment แนะนำให้ Register แล้วผมได้มาตอบเมื่อไหร่จะส่ง Email กลับไปหาครับ


