ฉันจะใช้การเลื่อนแบบพารัลแลกซ์ในแบบ 2D ได้อย่างไร


21

สมมติว่าฉันมีสามชั้น: พื้นหน้าพื้นกลางและพื้นหลัง การใช้เลเยอร์ทั้งสามนี้เกี่ยวข้องกับการสร้างการเลื่อนพารัลแลกซ์อย่างไร

คำตอบ:


20

แบ่งตำแหน่งของแต่ละเลเยอร์ด้วย "ระยะทาง" ที่คุณต้องการจากกล้อง

ตัวอย่างเช่น: สร้างคู่ของตัวแปรที่จะเป็นตัวแทนตำแหน่งกล้องและcameraX cameraYตั้งค่าเหล่านี้ให้เท่ากับตำแหน่งของตัวละครของคุณอาจเพิ่มไปอีกเล็กน้อยในทิศทางของการเคลื่อนไหว

เลเยอร์หลักจะถูกวางตำแหน่งที่

mainLayer.x = -cameraX;

ชั้นกลางที่บางอย่างเช่น

middleLayer.x = -cameraX * 0.5;

และชั้นที่ไกล

farLayer.x = -cameraX * 0.2;

เปลี่ยนค่าคงที่ตามต้องการ


3
สิ่งที่ฉันพูดบวกกับฉันใช้ "ปัจจัยพารัลแลกซ์" (1, 0.5 และ 0.2 ในรหัสของเอียน) และทำให้มันเป็นพารามิเตอร์ที่อธิบายเลเยอร์ของฉันด้วยวิธีนี้ฉันสามารถปรับความละเอียดอ่อนของพารารัลแลกซ์
ทรอย Gilbert

6

โดยทั่วไปคุณต้องการให้วัตถุเคลื่อนที่เร็วขึ้นยิ่งเข้าใกล้ 'กล้อง' วิธีการนำไปใช้นั้นขึ้นอยู่กับคุณ

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


5

เลเยอร์ที่ "ย้อนกลับต่อไป" จะต้องเลื่อนที่เศษส่วนของความเร็วของเลเยอร์พื้นหน้า ความเร็วครึ่งหมายถึงระยะทางสองเท่า ผลกระทบอื่น ๆ เช่นการย้อมสีเพื่อจำลองหมอก ฯลฯ อาจเพิ่มภาพลวงตา


1

วิธีที่ดีที่สุดในการทำเช่นนี้คือการทำให้สไปรต์เป็นล่ามป้ายโฆษณาในรูปแบบ 3 มิติ "การเล่นเกม" สามารถเกิดขึ้นได้ทั้งหมดบนเครื่องบินเดียวในขณะที่พื้นหลังและเบื้องหน้าสามารถวางไว้ใกล้หรือไกลกว่าในพื้นที่ 3 มิติ ด้วยวิธีดังกล่าวเอฟเฟกต์พารัลแลกซ์จะได้รับการจัดการให้กับคุณโดยที่คุณไม่ต้องเขียนโค้ดพิเศษ :-)


3
หากคุณทำเช่นนั้นคุณจะต้องปรับขนาดคณะสี่คนไกลเพื่อชดเชยการขยายระยะทางหรือตั้งค่าเมทริกซ์การฉายภาพที่ไม่ได้ใช้มุมมองใด ๆ การแปลล่ามตัวเองอาจจะง่ายกว่า
munificent

0

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

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