javascript - 修改返回的对象

标签 javascript html image canvas scope

编辑:感谢 Teemu 的回答,它很有帮助

我不确定这个问题的措辞是否完全正确地解决了我的问题...无论如何,我正在尝试创建一个 getImage 函数以在我的 html5 游戏中使用。我希望 API 的设计能够给出 bool 预渲染参数。我在实现它时遇到问题,以便预渲染位可以修改返回的图像。

使用该函数的代码如下所示:

var resources = {
    image: getImage('path/to/my/image.png'),
    prerendered: getImage('my/prerendered/image.png', true)
};

getImage 函数的代码如下所示:

var getImage = function (source, prerender) {
    var img = new Image(); // store as empty image

    img.onload = function () {
        if (prerender) { // all my prerendering code
            var can = document.createElement('canvas');
            var ctx = can.getContext('2d');

            can.width = img.width;
            can.height = img.height;

            ctx.drawImage(img, img.width, img.height);

            // right here is where I attempt to modify img
            // but since it's already been returned, I'm not changing the returned value - I think
            img = can;
        }

        img.ready = true; // a property my game uses to check if the resource is ready
    };

    img.src = source; // load that badboy

    return img;
};

我尝试的一个解决方案是将 img 包装在一个对象中,并将其作为一个属性,例如

 var wrapper = {img: new Image()};

但这看起来很难看,我认为有更好的解决方案

最佳答案

如果我正确理解你的问题,你想返回 canvas而不是img如果是 prerendertrue 。如果是这样,您可以这样做:

var getImage = function (source, prerender) {
    var img = new Image(),
        can, ctx;
    img.onload = function () {
        if (prerender) {
            // prerender, can & ctx are defined in the outer scope
            // img still refers to the originally-created image, hence this will work
            can.width = img.width;
            can.height = img.height;
            ctx.drawImage(img, img.width, img.height);
        }
        img.ready = true;
    };
    if (prerender) {
        can = document.createElement('canvas');
        ctx = can.getContext('2d');
    }
    img.src = source;

    return can || img; // returns can if it's defined, img otherwise
};

关于javascript - 修改返回的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27685156/

相关文章:

javascript - 本地存储 : condition to prevent storing duplicated values in localStorage

javascript - 防止删除文本框中的特殊字符

php - 如何在点击 A href 后执行操作

java - JPEG 格式的原始数据 - JAVA

html - 以 50% 宽度和 100% 高度显示图像

javascript - 在 HTML 的有序列表中为大数字添加逗号

html - 使用:before and :after selector绘制div

javascript - 捕获 html5 地理定位事件

css - 修复了响应式 Bootstrap 侧边栏导航中的垂直 Logo

javascript - 如何在 Leaflet.js 中使用 Angular JS