cdaz   10-20-2016, 05:31 PM
#1
คือจะทำเป็นชอยส์ให้เลือกน่ะครับ
ซึ่งกรณีที่ทำเป็นให้เลือกชอยส์โดยตรงเลยประเภท
--------------------------------------
Show Choice 1 ไปต่อได้
Choice 2 บังคับเลือกใหม่
Choice 3 บังคับเลือกใหม่
Choice 4 บังคับเลือกใหม่
Choice 5 บังคับเลือกใหม่
--------------------------------------
อันนี้ไม่มีปัญหา

แต่พอจะทำให้ยืดหยุ่นขึ้นเป็นเลือกชอยส์เพื่อกำหนดค่าตัวแปร แล้วใช้ Condition เชคว่า Variable เป็นเท่าไหร่นี่แหละครับที่แก้ปัญหาไม่ตก

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

ไม่ว่าจะกำหนดค่าตัวแปรด้วย Choice ด้วย Selection Item หรือ Custom Menu(โดย Yanfly)
อย่างเช่ในคลิปนี้น่ะครับปัญหาที่ว่า...


ถ้าถามว่าทำไมต้องฝืนในตัวแปร ไม่ยอมให้ชอยส์โดยตรง
คือที่ผมพยายามจะทำก็คือไอ้ฉากเลือกกระสุนความจริงแบบนี้นี่แหละ
ถ้าเลือกผิดก็โดนเพื่อนด่าเลือดลดไปเรื่อยๆ จนกว่าจะตาย หรือเลือกอันที่ถูกได้สำเร็จ
(เกมผมก็จงใจทำเป็นพาโรดี้่ของดันกันนี่แหละ ก๊อประบบมันมาเท่าที่ก๊อปได้เลย)
This post was last modified: 10-20-2016, 05:33 PM by cdaz.
splendith   10-20-2016, 06:42 PM
#2
.
ถ้าผมเข้าใจคำถามไม่ผิดนะครับ คุณอยากให้ตอบผิดแล้ววนกลับไปถามใหม่เรื่อยๆ จนกว่าจะถูกแบบไม่มีกำหนดหรือเปล่า

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

วิธีแก้ไข มีสองวิธีครับ

1. ใช้ Loop

คำสั่ง Loop จะเป็นการวนซ้ำ ซึ่งคำสั่งอยู่ใน Event Command หน้าแรก หัวข้อ Flow Control อันที่ 2 วิธีนี้จะเหมือน loop เวลาเขียนโปรแกรม เมื่อทำคำสั่งด้านใน Loop หมดแล้วก็จะย้อนขึ้นไปเริ่มใหม่ วนไปตลอดกาลไม่มีวันจบ เช่นจากภาพ

[Image: 1.jpg]

จากตัวอย่างผมมีข้อความ Hello! และใช้คำสั่ง Loop ครอบข้อความ 123 และ 456 (คำสั่งมันจะเป็น Loop ... Repeat Above แล้วครอบด้วยของข้างใน) และนอก Loop จบด้วยข้อความ Bye!

เมื่อรันก็จะเป็นการแสดงข้อความ Hello! และเมื่อเข้า Loop ก็จะแสดงข้อความ 123 ตามด้วย 456 กลับไป 123 และ 456 วนไปอย่างนี้ตลอดกาล และเกมก็จะดำเนินการต่อไปไหนไม่ได้อีกเลย แม้ด้านล่างจะมีคำสั่ง Bye! ก็จะไม่มีวันปรากฎขึ้นเพราะไม่ได้ออก Loop

ทีนี้วิธีการจาก Loop ทำยังไง ต้องใช้คำสั่ง Break Loop (Event Command อันถัดจาก Loop) ซึ่งคำสั่งนี้จะออกจาก Loop ทันทีโดยไม่สนใจคำสั่งใน Loop ที่เหลือ

เมื่อเรารู้ดังนี้แล้วก็สามารถเขียน Event ที่คุณต้องการได้ดังนี้

[Image: image.jpg]

จากภาพ เมื่อตอบผิดก็จะวนขึ้นไปเรียก Common Event ถามใหม่ไปเรื่อยๆ จนกว่าจะตอบถูก และเมื่อตอบถูกและเจอคำสั่ง Break Loop ก็จะหลุดพ้นบ่วงกรรม

2. ใช้ Label
วิธีนี้เป็นวิธีที่ท่านอาจจะเข้าใจง่ายกว่า loop

วิธีนี้ตรงไปตรงมามากครับ ใช้คำสั่ง Label และ Jump to Label (อยู่ใน Event Command หน้าแรกตรง Flow Control เช่นกัน)

[Image: image.jpg]

จากภาพ เราสร้าง Label ชื่อ "กลับมาถามใหม่" จากนั้นในเงื่อนไขที่ตอบผิด เราก็ใช้คำสั่ง Jump to Label ให้กระโดดไป Label ที่เราสร้างไว้ข้างบน ให้กลับไปบรรทัดด้านบนเรียก Common Event และเช็คใหม่

ตัวอย่างจากทั้งสองวิธีได้ผลลัพธ์เหมือนกันทุกประการ

แต่วิธี Label น่าจะดูง่ายกว่าและเหมือนจะไม่งง แต่อย่างไรก็ตาม ผมแนะนำให้ใช้วิธี Loop มากกว่า เพราะ
1. ถ้าสมมุติมี Label ใน Event เดียวกันเป็นจำนวนมาก ท่านจะงงและสับสันแน่นอนว่าอะไรกระโดดไปไหนกันแน่
2. การใช้ Loop เป็นหลักการเขียนโปรแกรมที่ดีกว่าครับ


ปล. ผมมีข้อสงสัยอยู่ครับ

Quote:คือจะทำเป็นชอยส์ให้เลือกน่ะครับ
ซึ่งกรณีที่ทำเป็นให้เลือกชอยส์โดยตรงเลยประเภท
--------------------------------------
Show Choice 1 ไปต่อได้
Choice 2 บังคับเลือกใหม่
Choice 3 บังคับเลือกใหม่
Choice 4 บังคับเลือกใหม่
Choice 5 บังคับเลือกใหม่
--------------------------------------
อันนี้ไม่มีปัญหา

ถ้าไม่ใช้ Loop หรือ Label ท่านทำอย่างไรให้ไม่มีปัญหาหรือครับ ผมมองว่าแม้จะเป็นชอยส์ธรรมดา มันก็เกิดปัญหาทำนองเดียวกันอยู่ดีนะ *0*

---
This post was last modified: 10-20-2016, 07:07 PM by splendith.
cdaz   10-20-2016, 08:09 PM
#3
ขอบคุณมากครับ ไม่เคยลองนึกถึงวิธีนี้เลยแฮะ

ส่วนชอยส์ธรรมดาผมให้ตัวชอยส์อยู่ใน Common Event อ่ะครับ
ถ้าไม่ถูกก็ให้มันโหลด Common Event โดนด่า

แล้วใน Event โดนด่าก็จะสั่งโหลด Event คำถามซ้ำไปเรื่อยๆ
แต่พอใช้วิธีนี้จะยัดใส่อีเวนท์ยังไงก็หลุดลูปอยู่ดี

ประมาณนี้อ่ะ

-----Auto Event ----
Text :สวัสดี
Call Event :คำถาม
Text :ยอดเยี่ยมมากนายมีเป็นคนมีความรู้จริงๆ
ได้รับไอเทม : โพชั่น 1ขวด

---- Event คำถาม ----
Text : คำว่าสุนัขหมายถึงตัวอะไร
Choice 1 หมา - > Text :ใช่แล้วสุนัขก็คือหมานั่นเอง->ปล่อยหลุดลูปตามปกติ

Choice 2 แมว -> Call : โดนด่า

------ Event โดนด่า -------
Text :เจ้าบ้า บ้านนายเรียกแมวว่าสุนัขเรอะ
Text : เอาล่ะตอบมาใหม่ซะ
Call Event : คำถาม
------------------------------

ไม่คิดว่าจะมีวิธีแก้ปัญหาง่ายๆ แบบเส้นผมบังภูเขาขนาดนี้แฮะ
จริงๆ ใช้มาตั้งแต่สมัย XP ผมไม่เคยรู้เลยด้วยซ้ำว่ามันใช้ทำอะไร ขอบคุณมากครับ 5555+
This post was last modified: 10-20-2016, 08:17 PM by cdaz.
splendith   10-20-2016, 09:11 PM
#4
อ้อ~ รับทราบครับ ขอบคุณคร้าบ
Ivan_GilDong   10-20-2016, 09:24 PM
#5
ขอบคุณสำหรับคำถามดีๆนะครับ และขอบคุณสำหรับคำตอบด้วยครับ *0* //ชาบูท่านสเปรนดิท

[Image: NvcQbcH.jpg]
splendith   10-21-2016, 09:54 PM
#6
มีคำถามอีกอันคร้าบ
พอดีแอบเห็นว่ามีการ connect Steam ตอนรันเกม ใช้สคริปต์ตัวไหนหรือท่าน *0*
This post was last modified: 10-21-2016, 09:54 PM by splendith.
cdaz   10-22-2016, 01:31 AM
#7
(10-21-2016, 09:54 PM)splendith Wrote: มีคำถามอีกอันคร้าบ
พอดีแอบเห็นว่ามีการ connect Steam ตอนรันเกม ใช้สคริปต์ตัวไหนหรือท่าน *0*
อ้อ อันนี้ผมไม่ได้ใช้สคริปเกี่ยวกับสตีมนะครับ แค่ตัว RMMV อันนี้ผมกดซื้อมาจากสตีม
มันก็เลยเด้งมาบนหน้าจอเกมที่สร้างจากสตีมด้วยเฉยๆอ่ะ

เหมือนเวอร์ชั่นที่ซื้อจากสตีมจากมีระบบแนวๆ นี้ให้ด้วยมั๊งครับ
ตรงแถวๆเมนูสำหรับเอกส์พอร์ตก็มีให้เลือกอัพขึ้นแจกเป็นเวิร์คชอปบนสตีมได้ด้วย
แต่ยังไม่เคยลองใช้ดูเลย
  
Users browsing this thread: 7 Guest(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.