Pages (2): 1 2   
sharifyasan Away   07-09-2012, 08:21 PM
#1
กลับมาแล้วน่ะครับกับตอนที่ 2 ของบทความ "วิธีทำระบบ Action เบื้องต้น" โดยบทความนี้ผมจะมาสอนวิธีการทำ "ม่อนส์เตอร์" หรือศัตรูแบบง่ายๆกันน่ะครับ...โดยสามารถนำไปประยุตก์หรือปรับแต่งให้ดีขึ้นได้เช่นกันครับ

*อนึ่งคือการเขียนระบบแบบนี้ต้องมีความรู้พื้นฐานโปรแกรม Rpg Maker ด้วยน่ะครับ เช่น พวกตัวแปร (Variables) สวิตช์ (Switches) และคำสั่งต่างๆอื่นๆอีกด้วยเป็นต้น
สำหรับใครที่ยังไม่ได้อ่านบทความตอนที่ 1 สามารถหาอ่านได้ที่นี้เลยครับ
[Image: 140301.a1167823.o.png]

โอเคครับเมื่อพร้อมแล้วเราก็มาเริ่มกันเลยดีกว่า...อันดับแรกเรามาดูกันก่อนว่าเราต้องเตรียมอะไรกันบ้างครับ
[Image: 140655.ca62f4a0.o.png]
อธิบายทีละบรรทัดน่ะครับ
1. ควบคุมตัวแปรเก็บพิกัด "แนวนอน" ของอีเว้น (Event) ม่อนส์เตอร์
2. ควบคุมตัวแปรเก็บพิกัด "แนวตั้ง" ของอีเว้น (Event) ม่อนส์เตอร์
3. ควบคุมตัวแปรเก็บค่า Hp ของม่อนส์เตอร์
4. ควบคุมสวิตช์เปิด-ปิดระยะเวลาการโจมตีของม่อนสเตอร์

เมื่อเตรียมเสร็จแล้วเราก็จะมาทำม่อนส์เตอร์กันครับ โดยเราจะเขียนคำสั่งเกี่ยวกับ "การโจมตีของม่อนส์เตอร์" กันก่อนนั้นเอง
[Image: 140656.29a72780.o.png]
ตามภาพน่ะครับ เราจะสร้างอีเว้นเปล่าๆขึ้นมาก่อน 1 อีเว้นโดยจะตั้งชื่อว่าอะไรก็ได้ครับ...แต่ในฮาวทูนี้ผมขอตั้งเป็น Enemy.1 ละกันเน้อ โดยให้เราปรับรูปแบบการเคลื่อนที่เป็น "เข้าหาผู้เล่น" ส่วนเรื่อง "ความเร็ว" กับ "ความถี่" ในการเคลื่อนที่นี้ก็แล้วแต่เราจะปรับเลยครับผม แล้วก็เซตเงื่อนไขการเริ่มเหตุการณ์เป็นแบบ "เหตุการเข้ามาสัมผัส" อ้อ! อย่าลืมเลือกรูป character ของอีเว้นด้วยเน้อ~
*ที่ต้องปรับให้เป็น "เหตุการณ์เข้ามาสัมผัส" ผู้เล่นก็เพราะว่าเราจะได้เขียนคำสั่งได้เมื่อม่อนส์เตอร์วิ่งมาชนหรือเข้ามาชนกับตัวละครผู้เล่นนั้นเองครับ

เมื่อเซตค่าต่างๆเบื้องต้นเสร็จแล้วเราก็มาเขียนคำสั่งต่างๆต่อกันเลยครับ
[Image: 140667.273fed29.o.png]
อธิบายทีละบรรทัดน่ะครับ
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 )

จากนั้นเราเข้าไปส่วนของ "เหตุการณ์ทั่วไป" ก่อนครับผม...เราจะไปกำหนดระยะเวลาการโจมตีของม่อนส์เตอร์กัน โดยวิธีทำมีเพียงแค่ไม่กี่บรรทัดเองครับ
[Image: 140658.e28a941e.o.png]
โดยเราจะตั้งชื่อเหตุการณ์เป็นอะไรก็ได้ที่เราเข้าใจน่ะครับ แต่ในฮาวทูนี้ผมขอตั้งเป็น Enemy.Delay ชื่อเดียวกับสวิตช์ละกันครับ Tongue
จากนั้นปรับเงื่อนไขการเริ่มเหตุการณ์เป็น "พร้อมเนื้อเรื่อง" และเรื่องสวิตช์ที่ใช้เริ่มเหตุการณ์เป็น "Enemy.Delay" ที่เราเตรียมไว้ตอนแรกน่ะครับ

ส่วนคำสั่งเหตุการณ์นั้นขออธิบายทีละบรรทัดน่ะครับ
1. รอเวลา ตรงบรรทัดนี้เราจะเซตไว้กี่เฟรมก็ได้ครับ แต่ในฮาวทูนี้ผมเซตไว้ว่า 30 เฟรม ก็หมายความว่า "เมื่อม่อนสเตอร์โจมตีเราโดนครั้งแรกแล้ว...จะต้องรอเวลาอีก 30 เฟรมถึงจะโจมตีครั้งต่อไปได้" นั้นเองครับผม
2. ปิดสวิตช์ Enemy.Delay
*จะเห็นได้ว่าขั้นตอนนี้สอดคล้องกับหน้าอีเว้นแรกที่เราได้เขียนไปนั้นเองครับ ซึ่งก็คือเมื่อม่อนส์เตอร์โจมตีเราเสร็จแล้วจะเปิดสวิตช์ Enemy.Delay ซึ่งในหน้าอีเว้นของม่อนส์เตอร์จะไม่มีคำสั่งใดๆหรือก็คืออีเ้้ว้นม่อนส์เตอร์จะเดินตามเราแค่นั้นแต่ทำอะไรไม่ได้...เพราะจริงๆแล้วไม่มีคำสั่งในบรรทัดนั้น แต่ไปมี "ให้รอเวลา 30 เฟรม" ในเหตุการณ์ทั่วไปอยู่นั้นเองครับ

ฮว๊ากกก! กลับไปที่หน้าอีเว้นของม่อนส์เตอร์กันอีกทีครับ...เราจะไปเีขียนคำสั่งต่างๆเกี่ยวกับการลดพลังชีวิตของม่อนส์เตอร์เมื่อโดนเราโจมตีกันบ้าง
[Image: 140659.9e918dcf.o.png]
ปรับรูปแบบการเคลื่อนที่หรือเซตค่าต่างๆได้เหมือนหน้าแรกเลยครับ แต่เพิ่มสวิตช์ที่ใช้เปิดคำสั่งหน้านี้เข้าไปก็คือ "Hero.Fire" และเงื่อนไขการเริ่มเหตุการณ์ก็เป็น "พร้อมเนื้อเรื่อง" นั้นเองครับ

เมื่อเซตค่าต่างๆของหน้าที่ 2 เสร็จแล้วก็มาถึงการคำนวนพิกัดเมื่อเรายิงโดนม่อนส์เตอร์กันครับ
[Image: 140665.69f54c25.o.png]
อธิบายทีละบรรทัด
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 หรือหน้าสุดท้ายแล้วน่ะครับ!~
[Image: 140666.aa08e842.o.png]
หน้านี้เซตเงื่อนไขต่างๆคล้ายๆกับหน้าที่ 2 ครับเพียงแต่เงื่อนไขการเริ่มเหตุการณ์ให้เซตเป็น "ตัวแปร Enemy.Hp เท่ากับหรือมากกว่า..." แทนและไม่ให้อีเว้นเดินเข้าหาผู้เล่นนั้นเองครับ
ที่ต้องเซตให้ตัวแปร Enemy.Hp เริ่มเหตุการณ์ก็เพราะว่าเป็นการตรวจเช็คเงื่อนไขอย่างนึงเมื่อ Hp ของม่อนส์เตอร์เท่ากับค่าที่เรากำหนดไว้ก็จะตาย ในฮาวทูนี้ผมเซตไว้ว่าม่อนส์เตอร์ตัวนี้มีเลือดแค่ 50 Hp ซึ่งจากขั้นตอนข้างต้นเราจะโจมตีได้แ่ค่ 10 ซึ่งก็หมายความว่าจะต้องยิงม่อนส์เตอร์ตัวนี้ 5 ครั้งถึงจะตายนั้นเองครับ

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

โอ้วเย้! ในที่สุดเราก็จบแล้วน่ะครับกับตอนที่ 2 นี้สำหรับใครที่มีข้อสงสัยต่างๆอะไรก็ตามสามารถถามมาได้น่ะครับ...ถ้าผมตอบได้ยินดีตอบให้เช่นกัน :"D
ตอนนี้ยังไม่มีแพลนว่าจะทำตอนที่ 3 รึเปล่าน่ะครับ แต่ถ้าทำจริงๆคงเป็นระบบที่ขั้นสูงขึ้นมาอีกหน่อยครับ (ถ้าไม่ขี้เกียจด้วยน่ะ ~)

***ห้ามคัดลอกหรือนำไปเผยแพร่ที่อื่นก่อนได้รับอนุญาตจาก sharifyasan หรือ Jacobo ก่อนเป็นอันขาด***
Last Update : 9/07/2012
This post was last modified: 07-09-2012, 09:01 PM by LuZi.
LuZi   07-10-2012, 05:44 AM
#2
โอ้ว บทความคุณภาพจากชารีฟ;w;b



byrzt   07-10-2012, 06:55 AM
#3
1. ควบคุมตัวแปรเก็บพิกัด "แนวนอน" ของอีเว้น (Event) ม่อนส์เตอร์
2. ควบคุมตัวแปรเก็บพิกัด "แนวตั้ง" ของอีเว้น (Event) ม่อนส์เตอร์
3. ควบคุมตัวแปรเก็บค่า Hp ของม่อนส์เตอร์
4. ควบคุมสวิตช์เปิด-ปิดระยะเวลาการโจมตีของม่อนสเตอร์

พวกนี้อยุ่ที่เหตุการณ์ใน ดาต้าเบส หรือ ครับ ?
Shinryu   07-10-2012, 07:16 AM
#4
1-3 คำสั่งอิเวนท์ "ตัวแปร"
4 คำสั่งอิเวนท์ "สวิทซ์"

[Image: 7f7cb68ce0.png][Image: rlogo.png]
Show ContentSpoiler:
OP_Jum_RPG   07-10-2012, 08:27 AM
#5
กระทู้ที่แล้วยังเคลียร์ไม่จบเลย เอาอันใหม่มาแล้วรึ

- บั๊คแน่นอน
คำสั่งเช็คศัตรูชนคนเล่น กับเช็คศัตรูโดนโจมตี ควรจะแยกเหตุการณ์กัน
ถ้าทำแบบนี้ ถ้าเรากำลังตีอยู่ ศัตรูจะทำอะไรเราไม่ได้เลย เพราะคำสั่งมันโดนล็อคไว้อีกหน้านึง

- แล้วแต่ดวง
หน้าสุดท้ายของศัตรู ควรจะใส่รอเวลาไว้ข้างบนสักหน่อย
ไม่งั้นถ้ามันทำงานก่อนเหตุการณ์รีเซ็ตแผนที่ ศัตรูที่ตายในแผนที่ก่อนหน้า จะทำให้แผนที่นี้ตายตั้งแต่เข้ามา

- ไม่จำเป็น
เช็คตำแหน่งกระสุนในหน้าเช็คศัตรูโดนโจมตี

- ว่าด้วยเรื่องบท 3
เรื่องพื้นฐานยังขาดอีกเยอะ เช่น
1. การรีเซ็ตค่าในแผนที่
2. การรีเซ็ตค่าของระบบ
3. กระสุนศัตรู
3.2 จะต่อยอดไปสู่การเขียนบอส
4. VX มีบั๊คเรื่องเหตุการณ์ชนผู้เล่น

ปล. ม่อนสเตอร์?

http://op-jum-rpg.blogspot.com/

E Book RPG Maker MV (OP_Jum_RPG, Miki Akatsuki)
http://irpg.in.th/thread-3508.html

E Book RPG Maker MZ (OP_Jum_RPG, Miki Akatsuki)
http://irpg.in.th/thread-3686.html

Touhou Excalibur: http://irpg.in.th/thread-3096.html
RockmanX VS Devil May Cry: http://irpg.in.th/thread-2698.html

BlackHole   07-10-2012, 08:34 AM
#6
โอ้ส เยี่ยมยอดครับผม

[Image: TdVlYb][Image: Signature-Alex.png]
Shinryu   07-10-2012, 09:12 AM
#7
เสริมท่านออฟนิด
-การเช็คการโจมตีควรเรียกใช้จาก เหตุการณ์ทั่วไป จะดีกว่า
-ที่ตัวมอนตั้งแค่เหตุการณ์สำหรับโจมตีผู้เล่นก็พอ

Quote:- แล้วแต่ดวง
หน้าสุดท้ายของศัตรู ควรจะใส่รอเวลาไว้ข้างบนสักหน่อย
ไม่งั้นถ้ามันทำงานก่อนเหตุการณ์รีเซ็ตแผนที่ ศัตรูที่ตายในแผนที่ก่อนหน้า จะทำให้แผนที่นี้ตายตั้งแต่เข้ามา
อันนี้ถ้ามีการเซตตัวแปรเป็น0 ต่อท้ายก็ช่วยได้นะ

รอท่านนกย่างมาลงวิธี รีเซตค่าพลังมอนเมื่อเข้าฉาก ละกัน

[Image: 7f7cb68ce0.png][Image: rlogo.png]
Show ContentSpoiler:
OP_Jum_RPG   07-10-2012, 09:50 AM
#8
พอดีเอาจากประสบการณ์ตรง
เพราะผมรีเซ็ตค่าทุกอย่าง + เซ็ตพลังมอน ตอนเข้าแผนที่
แล้วดันติดดีเลย์ เหตุการณ์มอนรันก่อนซะงั้น

ตอนนี้ล็อคหลายชั้นกว่าเดิมมาก
บั๊คตรงนี้เลยหายไปแล้ว
เดี๋ยวว่างๆจะเอามาสรุปลงให้ละกัน

http://op-jum-rpg.blogspot.com/

E Book RPG Maker MV (OP_Jum_RPG, Miki Akatsuki)
http://irpg.in.th/thread-3508.html

E Book RPG Maker MZ (OP_Jum_RPG, Miki Akatsuki)
http://irpg.in.th/thread-3686.html

Touhou Excalibur: http://irpg.in.th/thread-3096.html
RockmanX VS Devil May Cry: http://irpg.in.th/thread-2698.html

Mysticphoenix   07-10-2012, 10:43 AM
#9
Quote:รอท่านนกย่างมาลงวิธี รีเซตค่าพลังมอนเมื่อเข้าฉาก ละกัน
รีัเซ็ตค่าพลังมอนในแบบฉบับผมนะ ค่อนข้างจะmanual

ก็คือแปะ common event ไว้ทุกครั้งที่มีการ teleport แล้วใน common event นั้นก็เขียน reset พลังต่างๆอ่ะคับ

ถ้ากลัวไม่เนียนก็ค่อยๆ fade screen ให้ดำ ช่วยได้
This post was last modified: 07-10-2012, 10:44 AM by Mysticphoenix.

[Image: webboard%20signature1_zpskhtut2jg.png]
การทำอาหารที่อร่อยที่สุด และเดือดร้อนชาวบ้านมากที่สุด กำลังจะเริ่มขึ้น
Jirayu   07-10-2012, 03:48 PM
#10
(07-10-2012, 09:50 AM)OP_Jum_RPG Wrote: พอดีเอาจากประสบการณ์ตรง
เพราะผมรีเซ็ตค่าทุกอย่าง + เซ็ตพลังมอน ตอนเข้าแผนที่
แล้วดันติดดีเลย์ เหตุการณ์มอนรันก่อนซะงั้น

ตอนนี้ล็อคหลายชั้นกว่าเดิมมาก
บั๊คตรงนี้เลยหายไปแล้ว
เดี๋ยวว่างๆจะเอามาสรุปลงให้ละกัน

ดูเหมือนท่านจะมีประสบการณ์เยอะดี

ลองเขียนบทความลงบอร์ดดูสิครับ บอร์ดจะได้มีเนื้อหาคุณภาพมากขึ้น

[Image: 76561198011764062.png]

[Image: graphic.png]
Pages (2): 1 2   
  
Users browsing this thread: 4 Guest(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.