การเคลื่อนไหวสวมบทบาทจากบนลงล่างพร้อมการแก้ไข?


27

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

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

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

ฉันใช้ XNA Framework มีอะไรในนั้นที่จะช่วยได้หรือไม่

คำตอบ:


23

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

สำหรับจุดที่สองแนวทางที่ตรงที่สุดคือการเอาเวกเตอร์การเคลื่อนไหว (มาตรฐาน) ของผู้เล่นและเพิ่มลงในเวกเตอร์ปกติของผนังจากนั้นปรับสภาพใหม่ สัญลักษณ์ของส่วนประกอบของเวกเตอร์ที่ได้จะแสดงให้เห็นว่าผนังสัมพันธ์กับการเคลื่อนไหวของผู้เล่นอย่างไรในขณะที่เวกเตอร์นั้นบ่งบอกทิศทางที่ผู้เล่นสามารถเคลื่อนที่ได้ในขณะนี้

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

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


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

ในเซลด้ามีเพียงมุมเดียวที่พวกเขาสามารถทำได้ดังนั้นจึงไม่จำเป็นต้องคำนวณเวกเตอร์ปกติมันเป็นกรณีพิเศษในรหัส
BlueRaja - Danny Pflughoeft

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

ไทล์สันนิษฐานว่ามีข้อมูลเช่นกราฟิกไม่ว่าจะผ่านได้หรือไม่และนี่เป็นเพียงอีกฟิลด์หนึ่ง ตัวอย่างเช่น: Struct Tile {vector2 normal; ... } ค่าปกติควรมาพร้อมกับข้อมูลที่กำหนดไทล์
Josh

@JoshPetrie แก้ไขสิ่งนี้ แผ่นกระเบื้องที่สามารถชนกันในหลายทิศทางไม่จำเป็นต้องมีหลายเวกเตอร์หรือไม่ ฉันไม่แน่ใจว่าฉันเข้าใจว่ากระเบื้องสามารถมีเวกเตอร์เดียวได้อย่างไร
ทดสอบ

4

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


3

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


หรือมีกล่องชนกันเป็นวงกลมบางที?
Oskar Duveborn

2

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

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