ดังนั้นฉันกำลังสร้าง HTML5 RPG เพื่อความสนุก แผนที่คือ<canvas>
(ความกว้าง 512px สูง 352px | 16 แผ่นข้าม, 11 แผ่นจากบนลงล่าง) ฉันต้องการทราบว่ามีวิธีการทาสีที่มีประสิทธิภาพมากกว่า<canvas>
นี้หรือไม่
นี่คือวิธีที่ฉันมีตอนนี้
วิธีการโหลดและวาดภาพบนแผนที่
แผนที่จะถูกวาดด้วยกระเบื้อง (32x32) โดยใช้Image()
ชิ้นส่วน ไฟล์ภาพจะถูกโหลดผ่านง่ายfor
ห่วงและใส่ลงในอาร์เรย์ที่เรียกว่าจะทาสีเกี่ยวกับการใช้tiles[]
drawImage()
ก่อนอื่นเราโหลดไพ่ ...
และนี่คือวิธีที่จะทำ:
// SET UP THE & DRAW THE MAP TILES
tiles = [];
var loadedImagesCount = 0;
for (x = 0; x <= NUM_OF_TILES; x++) {
var imageObj = new Image(); // new instance for each image
imageObj.src = "js/tiles/t" + x + ".png";
imageObj.onload = function () {
console.log("Added tile ... " + loadedImagesCount);
loadedImagesCount++;
if (loadedImagesCount == NUM_OF_TILES) {
// Onces all tiles are loaded ...
// We paint the map
for (y = 0; y <= 15; y++) {
for (x = 0; x <= 10; x++) {
theX = x * 32;
theY = y * 32;
context.drawImage(tiles[5], theY, theX, 32, 32);
}
}
}
};
tiles.push(imageObj);
}
ตามธรรมชาติแล้วเมื่อผู้เล่นเริ่มเกมมันจะโหลดแผนที่ที่พวกเขาทิ้งไว้ล่าสุด แต่สำหรับที่นี่มันเป็นแผนที่ที่เต็มไปด้วยหญ้า
ตอนนี้แผนที่ใช้อาร์เรย์ 2 มิติ นี่คือแผนที่ตัวอย่าง
[[4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 1, 1, 1, 1],
[1, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 1],
[13, 13, 13, 13, 1, 1, 1, 1, 13, 13, 13, 13, 13, 13, 13, 1],
[13, 13, 13, 13, 1, 13, 13, 1, 13, 13, 13, 13, 13, 13, 13, 1],
[13, 13, 13, 13, 1, 13, 13, 1, 13, 13, 13, 13, 13, 13, 13, 1],
[13, 13, 13, 13, 1, 13, 13, 1, 13, 13, 13, 13, 13, 13, 13, 1],
[13, 13, 13, 13, 1, 1, 1, 1, 13, 13, 13, 13, 13, 13, 13, 1],
[13, 13, 13, 13, 13, 13, 13, 1, 13, 13, 13, 13, 13, 13, 13, 1],
[13, 13, 13, 13, 13, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 1],
[13, 13, 13, 1, 1, 1, 1, 1, 1, 1, 13, 13, 13, 13, 13, 1],
[1, 1, 1, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 1, 1, 1]];
ฉันได้แผนที่ที่แตกต่างโดยใช้if
โครงสร้างที่เรียบง่าย เมื่ออาร์เรย์ 2d ข้างต้นเป็นreturn
จำนวนที่สอดคล้องกันในแต่ละอาร์เรย์จะได้รับการพ่นสีตามภายในที่เก็บไว้Image()
tile[]
จากนั้นdrawImage()
จะเกิดขึ้นและทาสีตามx
และy
และเวลาโดย32
การวาดบนx-y
พิกัดที่ถูกต้อง
การสลับแผนที่หลายครั้งเกิดขึ้นได้อย่างไร
กับเกมของฉันแผนที่มีห้าสิ่งที่จะติดตาม: currentID
, leftID
, rightID
, และupID
bottomID
- currentID: ID ปัจจุบันของแผนที่ที่คุณอยู่
- leftID: ID ใดของที่
currentID
จะโหลดเมื่อคุณออกจากด้านซ้ายของแผนที่ปัจจุบัน - rightID: ID อะไรที่
currentID
จะโหลดเมื่อคุณออกทางด้านขวาของแผนที่ปัจจุบัน - downID: ID ใดของที่
currentID
จะโหลดเมื่อคุณออกที่ด้านล่างของแผนที่ปัจจุบัน - upID:รหัสใดของที่
currentID
จะโหลดเมื่อคุณออกจากด้านบนของแผนที่ปัจจุบัน
บางสิ่งบางอย่างที่จะต้องทราบ: ถ้าอย่างใดอย่างหนึ่งleftID
, rightID
, upID
หรือจะไม่เฉพาะเจาะจงว่าพวกเขาเป็นbottomID
0
นั่นหมายความว่าพวกเขาไม่สามารถออกจากด้านนั้นของแผนที่ได้ มันเป็นเพียงการปิดล้อมที่มองไม่เห็น
ดังนั้นเมื่อมีคนออกด้านข้างของแผนที่ขึ้นอยู่กับว่าพวกเขาออกจากที่ใด ... ตัวอย่างเช่นถ้าพวกเขาออกจากที่ด้านล่างbottomID
จะมีจำนวนของการmap
โหลดและวาดบนแผนที่
ต่อไปนี้เป็นตัวแทน. GIF เพื่อช่วยให้คุณเห็นภาพดีขึ้น:
อย่างที่คุณเห็นไม่ช้าก็เร็วด้วยแผนที่มากมายฉันจะติดต่อกับID จำนวนมาก และนั่นอาจทำให้สับสนและวุ่นวายเล็กน้อย
ข้อดีที่ชัดเจนคือสามารถโหลดได้ครั้งละ 176 แผ่นรีเฟรชผืนผ้าใบขนาดเล็กขนาด 512x352 และจัดการแผนที่ครั้งละหนึ่งแผนที่ ข้อเสียคือรหัสแผนที่เมื่อจัดการกับแผนที่จำนวนมากอาจทำให้เกิดความสับสนในบางครั้ง
คำถามของฉัน
- นี่เป็นวิธีที่มีประสิทธิภาพในการจัดเก็บแผนที่ (เมื่อใช้งานไทล์) หรือมีวิธีที่ดีกว่าในการจัดการแผนที่หรือไม่?
ฉันกำลังคิดตามแนวของแผนที่ยักษ์ ขนาดแผนที่มีขนาดใหญ่และเป็นอาร์เรย์ 2 มิติทั้งหมด อย่างไรก็ตามวิวพอร์ตยังคงเป็น 512x352 พิกเซล
นี่คือ. gif อื่นที่ฉันทำ (สำหรับคำถามนี้) เพื่อช่วยให้เห็นภาพ:
ขออภัยถ้าคุณไม่เข้าใจภาษาอังกฤษของฉัน โปรดถามสิ่งที่คุณมีปัญหาในการทำความเข้าใจ หวังว่าฉันจะทำให้ชัดเจน ขอบคุณ