อะไรคือข้อแตกต่างระหว่าง TextureRegion, TextureAtlas, Sprite และ Image ใน libgdx


12

ฉันค้นหาบทช่วยสอน ฉันเคยเห็นคนที่ใช้คลาสข้างต้นโหลดภาพ

ตามความเข้าใจของฉันชั้นเรียนทั้งหมดสามารถอ่านได้ในสองภาพที่ไม่ใช้พลังงานโดยปกติแล้ว TextureRegion / TextureAtlas จะใช้ในการโหลดแผ่นสไปรต์ซึ่งแผ่นนั้นมีหลายภาพ ในขณะที่ Texture / Sprite / Image พวกมันถูกใช้เพื่อโหลด Sprite ชีทที่มีภาพเดียว

อย่างไรก็ตามฉันไม่แน่ใจในสถานการณ์ที่ฉันควรใช้ Texture / Sprite / Image และในสถานการณ์ใดที่ฉันควรใช้ TextureRegion / TextureAtals

โปรดแก้ไขให้ฉันถ้าฉันผิดเพราะฉันสับสนเล็กน้อยกับคำศัพท์ใน API หลังจากดูบทเรียนต่าง ๆ

คำตอบ:


18

อย่างแรก, Texture vs TextureRegion: เมื่อคุณทำบางอย่างเช่น Texture t = Texture (path), คุณกำลังโหลดมันเข้าสู่ GPU นอกจากนี้คุณควรโหลดพลังงานของพื้นผิวที่ 2 คุณสามารถทำงานร่วมกับวิธีแก้ปัญหาอื่น ๆ (Texture.setEnforcePotImages = false) แต่ขอแนะนำให้ใช้ pow เป็น 2

ตอนนี้ TextureRegion ใช้ "ชิ้นส่วน" จาก Texture ไม่ว่าจะเป็นมิติใด ข้อดีของการมี Texture 1 Texture และ TextureRegion ของ TextureRegion หลายตัวนั้นคือคุณไม่ได้โหลดทุกส่วนลงใน GPU

อย่างที่คุณคิดเมื่อคุณต้องการวาดด้วย SpriteBatch มันมีประสิทธิภาพมากขึ้นในการใช้ TextureRegion แทนที่จะเป็น Texture หลายอันฉันขอโทษภาษาอังกฤษของฉันไม่ดีพอ นี่คือคำอธิบายที่ดี: Textures TextureRegion & SpriteBatch


ตอนนี้คุณต้องการใช้ TextureRegion และรูปภาพเดียวหนึ่งภาพที่มีความละเอียด 2 ระดับด้วยสไปรต์และรูปภาพทั้งหมด คุณต้องสร้าง TextureRegions พร้อมพิกัดและมิติทั้งหมดหรือไม่ คุณจำเป็นต้องเปิดโปรแกรมระบายสีเพื่อนับจำนวนพิกเซลหรือไม่ Noooo คุณทำไม่ได้ คุณสามารถใช้สิ่งที่ต้องการTexturePacker มันจะแพ็คทุกพื้นผิวเป็นภาพเดียวและสร้างไฟล์. pack พร้อมมิติข้อมูลและพิกัดของทั้งหมด

TexturePacker

ผลลัพธ์จะเป็นดังนี้:

ซอง

แทนที่จะสร้าง Texture ให้สร้าง TextureAtlas ดังนี้:

สร้าง TextureAtlas

ตอนนี้การสร้าง TextureRegions ของคุณจะง่ายเหมือน:

findRegion

(โปรดทราบว่าชื่อของพื้นที่นั้นเป็นชื่อของภาพต้นฉบับโดยไม่มีนามสกุล)


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


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

หวังว่าจะช่วย :)


ขอบคุณ! ชัดเจนขึ้นแล้ว :) แล้วประสิทธิภาพของการสร้าง TextureRegion จาก Texture และการสร้าง TextureRegion จาก TextureAtlas ล่ะ?
user15783

4
@ user15783 ถามเป็นคำถามใหม่
David J. Liszewski

มีข้อมูลที่ดีมากมาย แต่ส่วนนี้ไม่ถูกต้อง / ทำให้เข้าใจผิด: "คุณไม่ได้โหลดทุกภูมิภาคลงใน GPU" อันที่จริงคุณโหลดทุกภูมิภาคเข้าสู่ GPU เป็นเพียงว่าหลาย ๆTextureRegions สามารถอ้างอิงส่วนที่แตกต่าง (หรือทับซ้อน) ของพื้นผิวในขณะที่Textureอ้างอิงถึงรูปภาพทั้งหมด เนื่องจากการสลับพื้นผิวมีราคาแพงจึงเป็นสิ่งที่ดี คำอธิบายของคุณทำให้ดูเหมือนTextureRegionกับดีลที่มีพื้นผิวเบาบาง (a la. GL_ARB_sparse_texture) แต่ libGDX และฮาร์ดแวร์ส่วนใหญ่ที่ทำงานอยู่ไม่สนับสนุนส่วนขยายนั้น
bcrist

นอกจากนี้โปรดเลือกบล็อคโค้ดมาร์คอัปของ SE มากกว่าภาพหน้าจอของรหัส ด้วยวิธีนี้ง่ายต่อการคัดลอกและวางสิ่งต่าง ๆ หากผู้คนต้องการ เพียงแค่เริ่มต้นแต่ละบรรทัดของบล็อครหัสด้วยสี่ช่องว่าง การสร้างโค้ดอินไลน์สามารถสร้างได้โดยใช้ข้อความล้อมรอบด้วยอักขระเน้นเสียง (backtick): `
bcrist
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.