irpg Community

Full Version: อยากให้มอนตามเรา แต่ว่าทิ้งระยะห่างเอาไว้ทำไง?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.

หายไปนานเลยครับ หลังจากไปเที่ยวมา ก็เลยกลับมาสร้างต่อ
คราวนี้มีประเด็นสงสัยขึ้นมาคือ

"ถ้าเราอยากให้มอนเดินตามเรามา แต่ทิ้งระยะห่างเอาไว้ ไม่เข้าประชิดตัวเราทำไงดี"

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

อยากได้แบบนี้ใครพอทำเป็นบ้าง
ผมทำมาให้แล้วครับตั้งชื่อ Event นี้ว่า Event ผีรังควาญ จากโจทย์ที่ได้รับมาของคุณโชกุนคือ ทิ้งระยะห่างเดินไม่มากไปไม่น้อยไป ดังนั้นผมจะให้มันคำนวนระยะห่าง สัก4ช่อง ถ้าห่างเกินให้กำหนดEventเดินตามHero ถ้าใกล้เกินให้เดินหนีจากHero

รูปที่1 ขั้นตอนแรกคือ ให้มีEventเปล่าๆอันนึง ตั้งไว้ในmap แล้วติ๊กช่องล่าง ทำงานพร้อมเนื้อเรื่อง ให้มันบันทึกพิกัดHeroตลอดเวลา
[Image: aOmR1d.jpg]

รูปที่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 ก่อนครับ

[Image: qv2ZDJ.jpg]

รูปที่3 ขั้นตอนที่3ทำแบบเดียวกันแต่เป็นแกนY เปรียบเทียบแกนYของฮีโร่กับผี ถ้าฮีโร่อยู่ล่าง ฮีโร่จะมีแกนYมากกว่า กลับกันถ้าฮีโร่อยู่บน ฮีโร่จะมีแกนYน้อยกว่า ใช้วิธีหาคำตอบโดยเช็กมากกว่า/เท่ากับ และเอามาลบแบบวิธีของแกนX ชุดนี้จะมีคำตอบเก็บไว้ที่CarryYครับ และเมื่อได้คำตอบทั้งแกนXห่างกี่ช่อง แกนY ห่างกี่ช่องแล้ว นำมารวมกันครับว่า มันห่างกันกี่ช่องทั้งหมด โดยเอาแกนX CarryX + CarryY บวกกัน คำตอบจะย้ายไปที่ตัวตั้งเสมอ คือCarryX เมื่อรู้ว่าไอ้ที่คิดมาเยอะๆ ห่างกันกี่ช่องแล้วก็มาป้อนคำสั่งในรูปต่อไปเลยครับ
[Image: sD1cti.jpg]

รูปที่4 วิธีสุดท้ายคือ เช็คว่าCarryX ห่างเกิน4ช่องไหมหรือเท่ากัน ถ้าห่างเกินไป ให้สั่งตัวผีตัวนนี้วิ่งตามฮีโร่ ถ้าถึงระยะแล้วให้เดินหนีจากฮีโร่ (ถ้ามันได้ระยะหรือเกินระยะอีกทีมันจะดึงไปดึงมาตามจุดประสงค์เลยครับ)
[Image: CzmSpB.jpg]

รูปที่5 มาถึงการทดสอบ ตั้งตัวละครไว้ห่างกันแล้วครับ ผมตั้งวิ่งเร็วเกินเกือบเซฟรูปไม่ทัน มันวิ่งเข้ามาไวมาก
[Image: ECjWMF.jpg]

รูปที่6 นี่คือระยะ4ช่องที่มันวนเวียนอยู่ครับมันจะคอยหนีให้ได้ระยะที่ต้องการ
[Image: lLSfCF.jpg]

จบแล้วครับเอาไปปรับใช้ดูนะครับ ถ้าลบคำอธิบายในตัวอีเวนท์ออกจะดูน้อยลงมากครับ
ฟังดูคล้ายอยากให้หนุ่มหลงชอบ แต่ไม่อยากให้มาตามติดวุ่นวาย
ตามติดเป็นสโต๊กเกอร์เลย
จะเข้ามาตอบ ดันได้ความรู้เองซะงั้นเรา ทำหน้าเหยาหมิง
;3

Cool ! สุดยอดมากเลยครับ

อยากลองเขียนสคริปต์ได้จัง แมวร้อง
ขอบคุณมากครับ
จะกลับไปสร้างต่อล่ะ
ขี้เกียจมาหลายวันแล้ว