เป็นวิธีที่ดีที่สุดในการสร้างภาพเคลื่อนไหวเมื่อทำการพัฒนา Android คืออะไร


10

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

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

เขาบอกว่าจะลงเอยด้วยการใช้ทรัพยากรมากเกินไปบน CPU และฉันมักจะเห็นด้วย แต่ฉันไม่เห็นว่าเราควรทำแอนิเมชั่นที่ราบรื่นโดยไม่ต้องใช้ฮาร์ดแวร์มากเกินไปและถ้าเป็นไปได้ นักออกแบบวาดทุกเฟรมใน Adobe Illustrator

นักพัฒนาเกม Android ที่มีประสบการณ์สามารถช่วยฉันจัดการเรื่องนี้ได้เพื่อให้เราสามารถไปยังส่วนอื่น ๆ ของเกมได้เนื่องจากฉันไม่รู้ว่าวิธีที่ดีที่สุดในการสร้างภาพเคลื่อนไหวคืออะไร

คำตอบ:


12

หากคุณกำลังพิจารณาอนิเมชั่น 2D ให้เรนเดอร์หนึ่งอันแล้วอันอื่นจะไม่เป็นปัญหาสำหรับอุปกรณ์ (เว้นแต่ว่าสไปรต์ของคุณมีขนาดใหญ่มาก)

ด้านล่างนี้เป็นภาพเคลื่อนไหวสไปรต์ทั่วไปที่เป็นสิ่งแรกที่ฉันพบด้วยการค้นหาเพียงเล็กน้อย นี่เป็นเทคนิคที่ใช้กันทั่วไปและมีเว็บไซต์มากมายที่ให้บริการฟรี

แหล่งที่มาของภาพ: [ที่นี่] (http://gaminggroundzero.com/?page_id=31)

แหล่งที่มาของรูปภาพ + ผู้แต่ง: ที่นี่

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

สำหรับ Android เราสามารถดูที่เครื่องยนต์ที่มาเปิดเกมโดยคริส Pruett (ก่อนถึง Google) ที่เรียกว่าเกาะจำลอง มีซอร์สโค้ดและเราสามารถดูSpriteAnimation.javaและSpriteComponent.java ของเขา

A SpriteAnimationนั้นถูกสร้างขึ้นอย่างง่ายๆด้วยการนับเฟรมและ ID ที่ไม่ซ้ำใครและนักแสดงแต่ละคนในเกมสามารถมีภาพเคลื่อนไหวได้หลากหลาย SpriteAnimationจะได้รับเป็นจำนวนมากAnimationFrameของแต่ละคนมีระยะเวลาในมิลลิวินาที ซึ่งหมายความว่าภาพเคลื่อนไหวที่แตกต่างสามารถสลับเข้าและออกได้ขึ้นอยู่กับว่าตัวละครนั้นเคลื่อนไหวหรือโจมตี ฯลฯ (ดูในAnimationComponent.playAnimation(int id))

ทวนของวงแต่ละเกมที่AnimationFrame's getFrame(float time)เรียกว่าและการตรวจสอบมันเท่าใดเวลาที่ผ่านมาตั้งแต่ที่ผ่านมาย้ำห่วงหลักและตัดสินใจที่เฟรมที่จะเล่นต่อไปแล้วผลตอบแทนที่กรอบจะได้รับการส่งออกไปยังระบบการแสดงผล วิธีนี้ช่วยให้สามารถข้ามเฟรมภาพเคลื่อนไหวได้หากภาพเคลื่อนไหวช้าเกินไป

ฉันหวังว่าตัวอย่างนี้ทำงานและคุณสามารถเห็นมันถูกนำมาใช้ในเกมที่เกิดขึ้นจริงในตลาด Android ที่นี่


ขอบคุณมากสำหรับคำตอบที่อธิบายอย่างละเอียดและละเอียด! ฉันจะดูว่าฉันสามารถปรับตัวเข้ากับเกมของฉันได้อย่างไร สิ่งนี้มีประโยชน์มาก!
Adam Smith เมื่อ

@ AdamSmith: การใช้แผ่นสไปรต์เป็นวิธีที่ดีที่สุดในการสร้างภาพเคลื่อนไหว 2D ไม่สำคัญว่าศิลปินของคุณจะสร้างภาพเคลื่อนไหวในแฟลชหรือโปรแกรมอื่นตราบใดที่เขาสามารถส่งออกภาพเคลื่อนไหวไปยังภาพที่คุณสามารถบรรจุลงในแผ่นสไปรต์ได้
bummzack

@ bummzack นั่นเป็นคำตอบที่ฉันหวังไว้ขอบคุณ!
Adam Smith

@AdamSmith มันควรจะสังเกตด้วย (เพื่อหลีกเลี่ยงความสับสน) ที่ Replica Island ไม่ได้ใช้ Sprite ชีทจริง ๆ ก็ใช้ไฟล์เดียว คำอธิบายว่าทำไม spritesheets มีประโยชน์สามารถพบได้ที่นี่และ (มีรายละเอียดเพิ่มเติม) ที่นี่
Martin Foot

@ มาร์ตินฟุตคุณได้รับคำอธิบายที่ดีมาก ๆ แต่ฉันยังคงสับสนฉันมีภาพเคลื่อนไหว 10-15 ประเภทและฉันมีเฟรมของแต่ละภาพด้วยขนาด 320x480 ซึ่งคุณสามารถพูดได้ว่าเป็นภาพเคลื่อนไหวเต็มหน้าจอ ดังนั้นสิ่งที่คุณแนะนำฉันว่าฉันควรได้รับ SpriteSheet หรือไฟล์ภาพเคลื่อนไหวเดียว? ฉันสับสนในสิ่งที่จะใช้ กรุณาแนะนำฉันด้วยวิธีที่ดีที่สุด .. ขอบคุณมาก ....
Scorpion
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.