ฉันจะเสนอให้คุณลองTexturePacker
- คุณสามารถลากและวางภาพทั้งหมดของคุณแล้วนำไปอัดแน่น
- คุณสามารถใช้การบีบอัดที่แตกต่างกัน - เช่นใช้ PNG ที่จัดทำดัชนีซึ่งใช้หน่วยความจำน้อยลง - น้อยกว่า 70% เมื่อเทียบกับไฟล์ PNG มาตรฐาน
- คุณสามารถสร้างไฟล์ข้อมูลไฟล์ที่มีชื่อ + ตำแหน่งของสิ่งปลูกสร้างแต่ละแห่งของคุณ
- รุ่นฟรีอาจพอเพียงที่จะสร้างแผ่นสไปรต์สำหรับคุณแล้ว
คุณใช้กรอบการพัฒนาเกมเช่น AndEngine, Cocos2d-x หรือ LibGdx หรือไม่? => ไม่มี
คุณต้องการโหลดภาพทั้งหมดของคุณในเวลาเดียวกันหรือไม่? ดูเหมือนคุณจะพบปัญหา RAM ขนาดใหญ่บนอุปกรณ์เป้าหมาย
อัปเดต: งูส่งรูปมาให้ฉัน ตามที่สัญญาไว้จะไม่ทำให้พวกเขาเป็นสาธารณะที่นี่ดังนั้นฉันจึงสร้างงานศิลปะขึ้นมาเองเพื่อสาธิตวิธีลดการใช้หน่วยความจำ
ในภาพต้นฉบับมีเพียงส่วนหนึ่งของภาพที่เคลื่อนไหว ฉันวางนกไว้บนบ้านเพื่อสาธิตสิ่งนี้:
โดยทั่วไปแล้วการบรรจุแอนิเมชั่นที่สมบูรณ์ลงในแผ่นงานเป็นการสูญเสียความทรงจำครั้งใหญ่ คุณควรแยกชิ้นส่วนแบบคงที่และเคลื่อนไหว:
คงที่:
Anim01:
Anim02:
เก็บตำแหน่งเดิมของนกในภาพ นี่คือเหตุผลที่มีช่องว่างว่างเปล่าด้านบน คุณต้องการสิ่งนี้เพื่อจัดแนวแอนิเมชัน
ตอนนี้ลากภาพบนTexturePackerและเลือกพารามิเตอร์ต่อไปนี้
- รูปแบบข้อมูล: แฮช JSON (หรือ XML หากคุณต้องการ)
- TrimMode: Trim (นี่จะสร้างรูปสี่เหลี่ยม)
- รูปแบบพิกเซล: INDEXED 8 บิต - เพื่อสร้าง PNG 8 บิต (หน่วยความจำน้อยลงประมาณ 70%)
- อนุญาตการหมุน: false
- ป้อนชื่อไฟล์สำหรับข้อมูล
ผลลัพธ์ก็คือตอนนี้คุณจะได้รับ 2 ไฟล์: The sprite sheet และไฟล์คำอธิบาย JSON
"house_anim_01.png":
{
"frame": {"x":351,"y":246,"w":110,"h":79},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":67,"y":8,"w":110,"h":79},
"sourceSize": {"w":400,"h":400},
"pivot": {"x":0.5,"y":0.5}
},
ส่วนที่สำคัญมีความกรอบและspriteSourceSize
กรอบช่วยให้คุณมีสถานที่ตั้งของเทพดาเดิมในแผ่นผีสาง
spriteSourceSizeให้ออฟเซ็ตสำหรับการวาดภาพ - ส่วนต่าง ๆ ของภาพที่เหลือเพราะการตัดแต่ง:
รูทีนการวาดโค้ดหลอกแบบง่ายจะมีลักษณะดังนี้:
drawImage(spritename, posX, posX)
{
data = sheetData[spritename]
offsetX = data.spriteSourceSize.x
offsetY = data.spriteSourceSize.y
frameX = data.frame.x
frameY = data.frame.y
width = data.frame.w
height = data.frame.h
screen.draw(sheetImage, posX+offsetX, posY+offsetY, width, height)
}
คุณอาจต้องปรับการคำนวณออฟเซ็ตขึ้นอยู่กับจุดหมุน / จุดกำเนิดในระบบกราฟิกของคุณ รูทีนด้านบนถือว่าระบบพิกัดที่ต้นกำเนิดอยู่ด้านบนซ้าย
จากนั้นก็วาดบ้านใน 2 ผ่าน:
draw("background", 100, 100);
draw("anim_01", 100, 100);
คุณไม่ต้องกังวลเกี่ยวกับการชดเชย - เนื่องจากภาพที่ได้รับการจัดตำแหน่งแล้ว