ผมทำมาให้แล้วครับตั้งชื่อ Event นี้ว่า Event ผีรังควาญ จากโจทย์ที่ได้รับมาของคุณโชกุนคือ ทิ้งระยะห่างเดินไม่มากไปไม่น้อยไป ดังนั้นผมจะให้มันคำนวนระยะห่าง สัก4ช่อง ถ้าห่างเกินให้กำหนดEventเดินตามHero ถ้าใกล้เกินให้เดินหนีจากHero
รูปที่1 ขั้นตอนแรกคือ ให้มีEventเปล่าๆอันนึง ตั้งไว้ในmap แล้วติ๊กช่องล่าง ทำงานพร้อมเนื้อเรื่อง ให้มันบันทึกพิกัดHeroตลอดเวลา
รูปที่2 ขั้นตอนต่อมา สร้างผีสักตัวนึงครับ ให้มันซอยเท้าถี่ๆดูน่ากลัว วิ่งไวหรือช้าก็ได้ ติ๊กช่องล่างให้ทำงานพร้อเนื้อเรื่อง
และให้มันมีการบันทึกพิกัดตัวมันเอง ผมใช้เป็นEnemy2X กับEnemy2Y ผมจะเขียนในรุปแยกห่างกันเพื่อไม่ให้งงมากครับ
ในรูป2นี้จะเริ่มคำนวนระหว่าแกนX ของฮีโร่กับแกนX ของตัวeEventว่าห่างกันเท่าไหร่ ก็คือต้องเอามาลบกันครับจะได้รู้ระยะห่าง
แต่ทีนี้จะรู้ได้ไงว่าเอาอะไรลบอะไร ตามรูปครับ มีการเช็คเงื่อนไข ถ้าHero อยู่ทางขวาของEvent ผมจะเรียกว่าผี นะครับ
Heroอยู่ขวา แปลว่ามากกว่า เราต้องเอาHero positionX ไปลบ Enemy2X แต่ในความจริงไปลบกันตรงๆไม่ได้ เพราะค่าแกนXของทั้งสองตัวแปรถูกตั้งไว้ว่า ให้ทำงานพร้อมเนื้อเรื่องตลอดเวลา จะลบไปยังไงก็กลับมาค่าเดิม ผมเลยเอาตัวแปรตัวฝากค่า มาใช้ลบ กลายเป็น ย้ายค่าHero positionX ไปฝากที่ ตัวแปร CarryX
จากนั้นเอาCarryXตั้ง ลบ Enemy2X แล้วคำตอบมันจะเด้งไปอยู่ที่ตัวตั้งCarryX
เมื่อกี้คือกรณีที่Heroอยู่ทางขวา มีค่าX มากกว่า
และถ้าHeroอยู่ทางซ้าย Hero positionX จะน้อยกว่า Enemy2Xของตัวผีครับ
เราต้องเอามาลบกันใหม่โดย Enemy2Xไปลบ Hero positionX โดย เอาEnemy2X ไปฝาก ตัวแปรCarryX
ในการลบสองวิธีจะเห็นว่าอยู่ในกรอบของการเช็คเงื่อนไขถ้าHeroXมากกว่า/เท่ากับEnemy2X และถ้าไม่ใช่แปลว่าHeroน้อยกว่า
เมื่อได้คำตอบว่าทั้งฮีโร่กับผี ห่างกันเท่าไหร่ก็จะเก็บคำตอบไว้ที่CarryX ก่อนครับ
ใ
รูปที่3 ขั้นตอนที่3ทำแบบเดียวกันแต่เป็นแกนY เปรียบเทียบแกนYของฮีโร่กับผี ถ้าฮีโร่อยู่ล่าง ฮีโร่จะมีแกนYมากกว่า กลับกันถ้าฮีโร่อยู่บน ฮีโร่จะมีแกนYน้อยกว่า ใช้วิธีหาคำตอบโดยเช็กมากกว่า/เท่ากับ และเอามาลบแบบวิธีของแกนX ชุดนี้จะมีคำตอบเก็บไว้ที่CarryYครับ และเมื่อได้คำตอบทั้งแกนXห่างกี่ช่อง แกนY ห่างกี่ช่องแล้ว นำมารวมกันครับว่า มันห่างกันกี่ช่องทั้งหมด โดยเอาแกนX CarryX + CarryY บวกกัน คำตอบจะย้ายไปที่ตัวตั้งเสมอ คือCarryX เมื่อรู้ว่าไอ้ที่คิดมาเยอะๆ ห่างกันกี่ช่องแล้วก็มาป้อนคำสั่งในรูปต่อไปเลยครับ
รูปที่4 วิธีสุดท้ายคือ เช็คว่าCarryX ห่างเกิน4ช่องไหมหรือเท่ากัน ถ้าห่างเกินไป ให้สั่งตัวผีตัวนนี้วิ่งตามฮีโร่ ถ้าถึงระยะแล้วให้เดินหนีจากฮีโร่ (ถ้ามันได้ระยะหรือเกินระยะอีกทีมันจะดึงไปดึงมาตามจุดประสงค์เลยครับ)
รูปที่5 มาถึงการทดสอบ ตั้งตัวละครไว้ห่างกันแล้วครับ ผมตั้งวิ่งเร็วเกินเกือบเซฟรูปไม่ทัน มันวิ่งเข้ามาไวมาก
รูปที่6 นี่คือระยะ4ช่องที่มันวนเวียนอยู่ครับมันจะคอยหนีให้ได้ระยะที่ต้องการ
จบแล้วครับเอาไปปรับใช้ดูนะครับ ถ้าลบคำอธิบายในตัวอีเวนท์ออกจะดูน้อยลงมากครับ