Tôi đang phát triển trò chơi bằng JavaScript và canvas
. Khi trò chơi tải, tất cả hình ảnh sẽ được sử dụng đang được lưu vào bộ nhớ cache.Đợi tải hình ảnh trước khi tiếp tục
Quan sát timeline tài nguyên, tôi thấy rằng đoạn mã sau gây nên một yêu cầu không đồng bộ:
var sprite = new Image();
sprite.src = "sprites/sheet1.png";
Động cơ sẽ tiếp tục thực hiện, cuối cùng bắt đầu vẽ và chơi các cấp độ. Hình ảnh được tải sau khi khung hình đầu tiên được sơn có thể không bao giờ xuất hiện do cắt (ví dụ: không bị "bẩn").
Vì vậy, tôi đã thử nghiệm sau đây:
console.log("begin");
var sprite = new Image();
sprite.onload = function() { console.log('loaded!'); };
sprite.src = "sprites/sheet1.png";
console.log("end");
Các kết quả đầu ra giao diện điều khiển theo thứ tự chúng xuất hiện là:
begin
end
loaded!
Tôi đang tìm cách tương tự như $.ajax
với async: false
để thực hiện tải. Không thể tìm ra cách ... cảm ơn trước sự giúp đỡ của bạn! J.
Cảm ơn trả lời của bạn. Tôi quên đề cập đến, mã này là một phần của một tên hàm "loadSprite (name)" được gọi bởi một phụ huynh. Đó là cha mẹ gọi nó từ một vòng lặp như "cho mỗi sprite loadSprite (tên)". Tôi cần để có thể làm gián đoạn quá trình xử lý, khiến phương thức chỉ trả lại khi hình ảnh được tải. Bất kỳ ý tưởng? – Jem
Bạn không thể thực hiện việc này mà không đóng băng trình duyệt. Tôi sẽ cập nhật câu trả lời của mình để hiển thị giải pháp thích hợp(). – ThiefMaster
Xin cảm ơn, nó rất thú vị. Tôi hoàn toàn không biết gì về vật thể trì hoãn đó! – Jem