Head

หลายคนที่เขียนเกมด้วยแฟลชมันจะมีปัญหาหนึ่งที่ต้องคำนึงถึงอยู่เสมอ นั่นก็คือ การระบุพิกัดของวัตถุ
การระบุพิกัดนั้น เนื่องมาจากว่า วัตถุ เช่น MovieClip มักจะมีวัตถุซ้อนอยู่ภายในอีกทีหนึ่ง

ซึ่งวัตถุที่อยู่ภายใน ก็จะระบุพิกัดแกน x และแกน y โดยอ้างอิงจากวัตถุที่บรรจุตัวมันอยู่

ตามภาพประกอบด้านล่าง

local

จากภาพ 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 ร่วมด้วย

global

โดยจากภาพ 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 กลับไปหาครับ