【问题标题】:Canvas HTML loading time画布 HTML 加载时间
【发布时间】:2015-03-15 05:08:48
【问题描述】:

我尝试使用 HTML Canvas 制作游戏,但遇到了问题。

当我用 'window.onload' 调用我的 'init' 函数时,我的程序不会加载任何图像。画布已创建,但图像不存在,当我在 chrome 控制台中提交我的功能时,图像出现......所以我想加载我的图像并在完成后执行该功能。

感谢您的帮助!

var requestAnimId;

// Initialisation
function init() {

    var tilemapCtx = new Canvas('tilemap', 800, 600, 1);

    var tilemap = new Tilemap("sand", tilemapCtx);

    requestAnimId = window.requestAnimationFrame(update);
}

// Boucle de rafraîchissement
function update() {

    requestAnimId = window.requestAnimationFrame(update);
}

window.onload = init;

这是瓷砖地图:

var Tilemap = function(map, canvas) {

for (var y = 0; y < 10; y++) {

    for (var x = 0; x < 10; x++) {
        // Création de la tile 
        this.image = new Image();
        // Définition de l'image  
        switch(tilemaps[map][y][x]) {
            case " ": 
                this.image.src = "assets/sand.png";
            break;
            case "#": 
                this.image.src = "assets/wall.png";
            break;
        } 
        // Affichage de l'image 
        //canvas.drawImage(this.image, tileX, tileY, tilesetWidth, tilesetHeight, x, y, 32, 32);
        canvas.drawImage(this.image, 32, 32);
    }
}

}

和画布:

var Canvas = function(name, width, height, zIndex) {
this.canvas = window.document.createElement("canvas");
this.canvas.id = name;
this.canvas.style.position = "absolute";
this.canvas.width = width;
this.canvas.height = height;
this.canvas.style.zIndex = zIndex;
document.body.appendChild(this.canvas);

return this.canvas.getContext('2d');

}

【问题讨论】:

    标签: javascript html canvas


    【解决方案1】:

    请注意,对于您的图块,您只使用两张图片。您使用将加载 100 个图像 的双循环。

    一个问题是您正在创建 100 个图像,而最终您只需要两个

    现在您的图像没有被绘制的原因是因为它们不是loaded。在尝试绘制图像之前,您需要给图像加载时间。

    在调用init()之前,您需要创建一个图像数组列表并确保它们已加载

    This 将确保在调用 init() 之前已加载所有图像。

    var len = pics.length;
    var loadCounter = 0;
    for(var i = 0; i < len; i++) {
        $(document.createElement(img)).attr('src', pics[i]).load(function() {
            alert(pics[i] + 'is loaded');
            loadCounter++;
            if(loadCounter === len) {
                alert("all are loaded");   
            }
        });
    }
    

    【讨论】:

    • Canvas 是我自己创建的一个类,当我看到控制台元素时,画布确实存在,并且图像就出现在其中,但只有当我在控制台中键入自己的“init”函数时,而不是在加载页面时。
    • 更新您的问题并发布您的 Canvas 和 Tilemap 课程还请注意,在您的更新中您不会更新任何内容。您所做的就是调用 requestAnimationFrame。所以你要做的就是永远循环而不做任何事情。
    • 我写了它们,但就像我说的那样,这不是那个类的问题,这工作正常,但这只是加载时间的问题。我试过没有更新,没有任何改变。
    • @Krili 我会调查的。
    • 其实我想直接在init函数中画图的时候,加载不出来……这是我之前没有遇到过的问题……在所有的教程中他们都做了一样,它对我不起作用......
    猜你喜欢
    • 2012-06-08
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    相关资源
    最近更新 更多