กลับมาแล้วน่ะครับกับตอนที่ 2 ของบทความ
"วิธีทำระบบ Action เบื้องต้น" โดยบทความนี้ผมจะมาสอนวิธีการทำ
"ม่อนส์เตอร์" หรือศัตรูแบบง่ายๆกันน่ะครับ...โดยสามารถนำไปประยุตก์หรือปรับแต่งให้ดีขึ้นได้เช่นกันครับ
*อนึ่งคือการเขียนระบบแบบนี้ต้องมีความรู้พื้นฐานโปรแกรม Rpg Maker ด้วยน่ะครับ เช่น พวกตัวแปร (Variables) สวิตช์ (Switches) และคำสั่งต่างๆอื่นๆอีกด้วยเป็นต้น
สำหรับใครที่ยังไม่ได้อ่านบทความตอนที่ 1 สามารถหาอ่านได้ที่นี้เลยครับ
โอเคครับเมื่อพร้อมแล้วเราก็มาเริ่มกันเลยดีกว่า...อันดับแรกเรามาดูกันก่อนว่าเราต้องเตรียมอะไรกันบ้างครับ
อธิบายทีละบรรทัดน่ะครับ
1. ควบคุมตัวแปรเก็บพิกัด
"แนวนอน" ของอีเว้น (Event) ม่อนส์เตอร์
2. ควบคุมตัวแปรเก็บพิกัด
"แนวตั้ง" ของอีเว้น (Event) ม่อนส์เตอร์
3. ควบคุมตัวแปรเก็บค่า Hp ของม่อนส์เตอร์
4. ควบคุมสวิตช์เปิด-ปิดระยะเวลาการโจมตีของม่อนสเตอร์
เมื่อเตรียมเสร็จแล้วเราก็จะมาทำม่อนส์เตอร์กันครับ โดยเราจะเขียนคำสั่งเกี่ยวกับ
"การโจมตีของม่อนส์เตอร์" กันก่อนนั้นเอง
ตามภาพน่ะครับ เราจะสร้างอีเว้นเปล่าๆขึ้นมาก่อน 1 อีเว้นโดยจะตั้งชื่อว่าอะไรก็ได้ครับ...แต่ในฮาวทูนี้ผมขอตั้งเป็น Enemy.1 ละกันเน้อ โดยให้เราปรับรูปแบบการเคลื่อนที่เป็น
"เข้าหาผู้เล่น" ส่วนเรื่อง
"ความเร็ว" กับ "ความถี่" ในการเคลื่อนที่นี้ก็แล้วแต่เราจะปรับเลยครับผม แล้วก็เซตเงื่อนไขการเริ่มเหตุการณ์เป็นแบบ
"เหตุการเข้ามาสัมผัส" อ้อ! อย่าลืมเลือกรูป character ของอีเว้นด้วยเน้อ~
*ที่ต้องปรับให้เป็น "เหตุการณ์เข้ามาสัมผัส" ผู้เล่นก็เพราะว่าเราจะได้เขียนคำสั่งได้เมื่อม่อนส์เตอร์วิ่งมาชนหรือเข้ามาชนกับตัวละครผู้เล่นนั้นเองครับ
เมื่อเซตค่าต่างๆเบื้องต้นเสร็จแล้วเราก็มาเขียนคำสั่งต่างๆต่อกันเลยครับ
อธิบายทีละบรรทัดน่ะครับ
1. ตรวจเช็คเงื่อนไขเมื่อสวิตช์ Enemy.Delay นั้นเปิดอยู่หรือไม่...โดยครั้งนี้เราจะเขียนคำสั่งลงไปในส่วนของ "กรณีไม่ตรงเงื่อนไข" ซึ่งก็หมายถึงสวิตช์ Enemy.Delay นั้นปิดอยู่นั้นเองครับ
2. แสดงอนิเมชั่น (Animation) ต่างๆกับอีเว้น
"ผู้เล่น" เมื่อผู้เล่นถูกม่อนส์เตอร์กระทำหรือโดนโจมตี เช่น อนิเมชั่นโดนกัด, อนิเมชั่นโดนแทง บลาๆ
3. เคลื่อนย้ายเหตุการณ์ "ผู้เล่น" ให้ถอยหลังมา 1 ช่อง...ในส่วนนี้เราจะใส่หรือไม่ก็ได้ครับ แต่ถ้าใส่ให้ถอยหลังก็จะเหมือนว่าผู้เล่นโดนม่อนส์เตอร์โจมตีแล้วกระเด็นถอยออกมานั้นเอง
4. ลดพลังชีวิตทั้งกลุ่ม ตามค่าพลังโจมตีของม่อนส์เตอร์ที่เราคิดไว้...กรณีในฮาวทูนี้ผมเซตไว้ว่าม่อนส์เตอร์โจมตีแรงแค่ 10 ก็ลดพลังชีิวิตผู้เล่นเป็นจำนวน 10 นั้นเองครับ
5. ปิดสวิตช์ Hero.Fire
6. เปิดสวิตช์ Enemy.Delay
ถ้าเราดูคำสั่งในหน้านี้ดีๆแล้วจะเห็นได้ว่าคำสั่งจะทำงานโดยที่จะเช็คก่อนว่า สวิตช์ Enemy.Delay เปิดอยู่หรือไม่?...ถ้าไม่ให้ทำการรันคำสั่งอื่นได้ทันที่ แต่ถ้าเปิดอยู่จะไม่มีอะไรเกิดขึ้นเพราะว่าเราไม่ได้เขียนคำสั่งของไปนั้นเอง
*ตรงข้อ.5 นั้นถ้าใครได้อ่านบทความตอนที่ 1 แล้วจะจำได้ว่ามันคือสวิตช์ roger.fire หรือ hero.fire นั้นเองครับ (สวิตช์ไอดีหมายเลข 5 )
จากนั้นเราเข้าไปส่วนของ
"เหตุการณ์ทั่วไป" ก่อนครับผม...เราจะไปกำหนดระยะเวลาการโจมตีของม่อนส์เตอร์กัน โดยวิธีทำมีเพียงแค่ไม่กี่บรรทัดเองครับ
โดยเราจะตั้งชื่อเหตุการณ์เป็นอะไรก็ได้ที่เราเข้าใจน่ะครับ แต่ในฮาวทูนี้ผมขอตั้งเป็น Enemy.Delay ชื่อเดียวกับสวิตช์ละกันครับ
จากนั้นปรับเงื่อนไขการเริ่มเหตุการณ์เป็น
"พร้อมเนื้อเรื่อง" และเรื่องสวิตช์ที่ใช้เริ่มเหตุการณ์เป็น
"Enemy.Delay" ที่เราเตรียมไว้ตอนแรกน่ะครับ
ส่วนคำสั่งเหตุการณ์นั้นขออธิบายทีละบรรทัดน่ะครับ
1. รอเวลา ตรงบรรทัดนี้เราจะเซตไว้กี่เฟรมก็ได้ครับ แต่ในฮาวทูนี้ผมเซตไว้ว่า 30 เฟรม ก็หมายความว่า "เมื่อม่อนสเตอร์โจมตีเราโดนครั้งแรกแล้ว...จะต้องรอเวลาอีก 30 เฟรมถึงจะโจมตีครั้งต่อไปได้" นั้นเองครับผม
2. ปิดสวิตช์ Enemy.Delay
*จะเห็นได้ว่าขั้นตอนนี้สอดคล้องกับหน้าอีเว้นแรกที่เราได้เขียนไปนั้นเองครับ ซึ่งก็คือเมื่อม่อนส์เตอร์โจมตีเราเสร็จแล้วจะเปิดสวิตช์ Enemy.Delay ซึ่งในหน้าอีเว้นของม่อนส์เตอร์จะไม่มีคำสั่งใดๆหรือก็คืออีเ้้ว้นม่อนส์เตอร์จะเดินตามเราแค่นั้นแต่ทำอะไรไม่ได้...เพราะจริงๆแล้วไม่มีคำสั่งในบรรทัดนั้น แต่ไปมี "ให้รอเวลา 30 เฟรม" ในเหตุการณ์ทั่วไปอยู่นั้นเองครับ
ฮว๊ากกก! กลับไปที่หน้าอีเว้นของม่อนส์เตอร์กันอีกทีครับ...เราจะไปเีขียนคำสั่งต่างๆเกี่ยวกับการลดพลังชีวิตของม่อนส์เตอร์เมื่อโดนเราโจมตีกันบ้าง
ปรับรูปแบบการเคลื่อนที่หรือเซตค่าต่างๆได้เหมือนหน้าแรกเลยครับ แต่เพิ่มสวิตช์ที่ใช้เปิดคำสั่งหน้านี้เข้าไปก็คือ
"Hero.Fire" และเงื่อนไขการเริ่มเหตุการณ์ก็เป็น
"พร้อมเนื้อเรื่อง" นั้นเองครับ
เมื่อเซตค่าต่างๆของหน้าที่ 2 เสร็จแล้วก็มาถึงการคำนวนพิกัดเมื่อเรายิงโดนม่อนส์เตอร์กันครับ
อธิบายทีละบรรทัด
1. ควบคุมตัวแปรเก็บพิกัด "แนวนอน" ของอีเว้นม่อนส์เตอร์
2. ควบคุมตัวแปรเก็บพิกัด "แนวตั้ง" ของอีเว้นม่อนส์เตอร์
3. ควบคุมตัวแปรเก็บพิกัด "แนวนอน" ของอีเว้นลูกกระสุน
4. ควบคุมตัวแปรเก็บพิกัด "แนวตั้ง" ของอีเว้นลูกกระสุน
(จริงๆแล้วการเก็บพิกัดของอีเว้นลูกกระสุนผมลืมเขียนไปบทความนี้ตอนที่ 1 ซึ่งต้องขออภัยด้วยครับ)
5. ตรวจเช็คเงื่อนไขเมื่อตัวแปร Bullet.Coor.X เท่ากับ Enemy.Coor.X
6. ตรวจเช็คเงื่อนไขเมื่อตัวแปร Bullet.Coor.Y เท่ากับ Enemy.Coor.Y
7. +ค่าตัวแปร Enemy.Hp เป็นจำนวน 10
*ตรงข้อที่ 5 และ 6 นั้นจะอธิบายให้เข้าใจง่ายๆก็คือ
เมื่อพิกัดแนวนอนของกระสุน =พิกัดแนวนอนของม่อนส์เตอร์
เมื่อพิกัดแนวตั้งของกระสุน = พิกัดแนวตั้งของม่อนส์เตอร์
หรือก็คือกระสุนยิงโดนม่อนส์เตอร์นั้นเองครับ
และแล้วเราก็มาถึงการเขียนอีเว้นม่อนส์เตอร์หน้าที่ 3 หรือหน้าสุดท้ายแล้วน่ะครับ!~
หน้านี้เซตเงื่อนไขต่างๆคล้ายๆกับหน้าที่ 2 ครับเพียงแต่เงื่อนไขการเริ่มเหตุการณ์ให้เซตเป็น "ตัวแปร Enemy.Hp เท่ากับหรือมากกว่า..." แทนและไม่ให้อีเว้นเดินเข้าหาผู้เล่นนั้นเองครับ
ที่ต้องเซตให้ตัวแปร Enemy.Hp เริ่มเหตุการณ์ก็เพราะว่าเป็นการตรวจเช็คเงื่อนไขอย่างนึงเมื่อ Hp ของม่อนส์เตอร์เท่ากับค่าที่เรากำหนดไว้ก็จะตาย ในฮาวทูนี้ผมเซตไว้ว่าม่อนส์เตอร์ตัวนี้มีเลือดแค่ 50 Hp ซึ่งจากขั้นตอนข้างต้นเราจะโจมตีได้แ่ค่ 10 ซึ่งก็หมายความว่าจะต้องยิงม่อนส์เตอร์ตัวนี้ 5 ครั้งถึงจะตายนั้นเองครับ
ส่วนคำสั่งต่างๆในหน้านี้ก็ขึ้นอยู่กับเราที่จะเซตละครับว่าถ้าม่อนส์เตอร์ตายแล้วจะเกิดอะไรบ้าง เช่น สุ่มได้เงิน, สุ่มได้ไอเทม, ตายแล้วมีอนิเมชั่นวิญญาณหรือเลือดสาด, ตายแล้วแปลงร่างเป็นร่างอื่น (ซึ่งก็ต้องเขียนคำสั่งกันยุ่งยากขึ้นไปอีก) แต่สุดท้ายก็อย่าลืมใส่คำสั่ง
"รอเวลา" กี่เฟรมก็ได้น่ะครับเพื่อให้อีเว้นรันคำสั่งข้างบนให้เสร็จก่อนจากนั้นค่อย
"ลบเหตุการณ์" นี้ออกไปครับ
โอ้วเย้! ในที่สุดเราก็จบแล้วน่ะครับกับตอนที่ 2 นี้สำหรับใครที่มีข้อสงสัยต่างๆอะไรก็ตามสามารถถามมาได้น่ะครับ...ถ้าผมตอบได้ยินดีตอบให้เช่นกัน :"D
ตอนนี้ยังไม่มีแพลนว่าจะทำตอนที่ 3 รึเปล่าน่ะครับ แต่ถ้าทำจริงๆคงเป็นระบบที่ขั้นสูงขึ้นมาอีกหน่อยครับ (ถ้าไม่ขี้เกียจด้วยน่ะ ~)
***ห้ามคัดลอกหรือนำไปเผยแพร่ที่อื่นก่อนได้รับอนุญาตจาก sharifyasan หรือ Jacobo ก่อนเป็นอันขาด***
Last Update : 9/07/2012