ฉันควรย้ายโลกหรือย้ายผู้เล่นหรือไม่


11

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

ฉันกำลังพัฒนาสิ่งนี้กับ AndEngine สำหรับ Android ที่ใช้ OpenGL และ Box2d

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

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

ขอบคุณ!


2
ย้ายกล้อง
Jonathan Dickinson

1
ยกเว้นว่าคุณมีเหตุผลเฉพาะที่ไม่ต้องการใช้กล้อง (ซึ่งเขียนขึ้นสำหรับคุณแล้ว) คุณควรย้ายเครื่องเล่นและกล้อง การเพิ่ม "การเพิ่มพลัง" ไม่ควรได้รับผลกระทบอย่างใดอย่างหนึ่ง
Christopher Horenstein

คำตอบ:


9

ย้ายกล้อง (แนบกับเครื่องเล่นของคุณ) ฉันคิดว่าโลกของคุณมีวัตถุหลายอย่างเช่นศัตรู หากคุณไปกับการเคลื่อนย้ายโลกคุณจะต้องวนซ้ำวัตถุเหล่านี้เพื่ออัปเดตตำแหน่งของพวกเขาทุกครั้งที่โลกเคลื่อนที่

หากคุณย้ายเครื่องเล่นและต่อกล้องเข้ากับเครื่องเล่นจะมีการใช้ทรัพยากรน้อยที่สุด เกมจะเข้าสู่ระยะเรนเดอร์วนรอบทุกอย่างเหมือนที่มันทำทุกเฟรมและวาดที่ตำแหน่ง - กล้องตำแหน่ง ตำแหน่งกล้องจะเท่ากับตำแหน่งผู้เล่นของคุณเสมอในกรณีนี้


แน่นอนถ้าวัตถุเป็นศัตรูคุณไม่จำเป็นต้องวนซ้ำวัตถุเหล่านั้นเพียงเพิ่มการเคลื่อนไหวของโลกลงในวัตถุในวิธีการอัปเดต
SirYakalot

1
+1 ใช้camera.setChaseEntity(player);เพื่อให้บรรลุสิ่งนี้
MartinTeeVarga

6

ฉันมักจะย้ายกล้องและจะแนะนำมัน - มีหลายเหตุผลที่ฉันชอบสิ่งนี้ แต่สิ่งที่สำคัญที่สุดที่อาจทำให้เกิดปัญหานี้:

  1. หากคุณย้ายกล้องและเครื่องเล่นนั่นเป็นเพียงสองสิ่งที่จำเป็นต้องได้รับการอัพเดตเพื่อเลื่อนหน้าจอ

  2. หากคุณย้ายโลกทั้งโลกเมื่อใดก็ตามที่หน้าจอจำเป็นต้องเลื่อนหน้าจอนั้นจะครอบคลุมทั้งเอนทิตีที่ไม่รู้จักและอาจมีจำนวนมากซึ่งจะต้องมีการอัพเดต


ฉันเห็นด้วย แต่ฉันจะเพิ่มว่าเพียงแค่เพิ่มบรรทัด + = 'การเคลื่อนไหวของโลกในชั้นเรียนของศัตรูจะเป็นเรื่องเล็กน้อย
SirYakalot

@ AsherEinhorn ฉันคิดว่าคุณกำลังพูดถึงสถานการณ์เช่นกราฟฉากที่แต่ละโหนดแบ่งปันการแปลงของผู้ปกครองและเพียงแค่ย้ายโหนดรูท (เช่น "โลก") จะแปลทุกอย่างโดยอัตโนมัติ? เพราะในทุกกรณีการย้ายโลกหมายถึงการเคลื่อนย้ายทุกสิ่งในโลก - ซึ่งเป็นจุดโพสต์ของฉัน
David Gouveia

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

4

มันช่างน่ารำคาญจริง ๆ แล้วมันไม่ได้สร้างความแตกต่างจากสิ่งที่คุณอธิบาย

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

ถึงแม้ว่าฉันคิดว่าถ้าคุณย้ายพื้นหลังคุณจะต้องเลี้ยงดูรถปิคอัพและศัตรูไปยังสิ่งนั้นอีกครั้งซึ่งเป็นเรื่องเล็กน้อย แต่มันเป็นสิ่งที่คิด

โดยส่วนตัวแล้วฉันจะย้ายผู้เล่นเพราะฉันชอบสิ่งต่าง ๆ ที่ต้องทำในแบบที่สมจริงยิ่งขึ้น


0

คำตอบอื่น ๆ เป็นสิ่งที่ดี แต่ฉันต้องการเพิ่มบางจุดของสิ่งที่ดีกว่าหวังว่าจะช่วยคนที่พยายามตัดสินใจเดียวกันสำหรับโครงการอื่น

ย้ายผู้เล่น:

  • มันง่ายทุกอย่างอื่นคงที่ (ish) ดังนั้นในแง่ง่ายสิ่งเดียวที่คุณต้องทำเพื่อย้ายผู้เล่นคือplayer.x += 5;(pseudocode)
  • มัน "คลิกดีกว่า" สำหรับคนส่วนใหญ่ เมื่อคุณเล่นเกมคุณจะคิดเสมอว่าผู้เล่นเคลื่อนที่ไม่ใช่ทางอื่น ๆ ดังนั้นจึงง่ายที่จะคิดว่ามันเป็น "ผู้เล่นควรย้ายไม่ใช่โลก" ซึ่งในทางกลับกันอาจทำให้มันง่ายขึ้นสำหรับคนที่จะจัดระเบียบมันในหัวของพวกเขา
  • ง่ายต่อการติดตามตำแหน่งของผู้เล่น (ตำแหน่งของมันยังเป็นพิกัดบนแผนที่)

การย้ายโลก:

  • หากเกมของคุณมีขนาดใหญ่พอคุณไม่ต้องกังวลเกี่ยวกับการโอเวอร์โฟลว์ / อันเดอร์โฟลว์โดยการเคลื่อนห่างจากศูนย์กลางของโลกมากเกินไปเนื่องจากตำแหน่งของผู้เล่นอยู่ใกล้0เสมอ
  • คล้ายกับข้างต้นถ้าคุณระเบียบกับการคำนวณ 3D 0คุณจะได้ไม่ต้องกังวลเกี่ยวกับผลที่ไม่ถูกต้องที่มีจุดลอยเพราะทุกสิ่งที่คุณเห็นบนหน้าจอควรจะค่อนข้างใกล้เคียงกับ
  • หากทำอย่างถูกต้องคุณสามารถสร้างโลกที่ไม่มีที่สิ้นสุด
  • ต้องติดตามผู้เล่นด้วยตนเองตำแหน่งของผู้เล่นจะเป็นค่าเล็ก ๆ เสมอซึ่งบ่งบอกว่าผู้เล่นอยู่ที่ไหนบนหน้าจอ (kinda) เพื่อทราบว่าผู้เล่นอยู่ที่มุมซ้ายบนของแผนที่หรือมุมล่างขวา คุณจะต้องติดตามสิ่งนั้นไม่ทางใดก็ทางหนึ่ง

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.