-1

我试图学习如何使用 javascript 对象,并在这里遇到了一些问题。

var playerImg = new Image();
    playerImg.src = 'player_stay.png';

var player = {
    posX: 50,
    posY: 50,
    draw: function(){
        ctx.drawImage(playerImg, player.posX, player.posY);
    }
}

可以将 playerImg 插入播放器对象吗?像 player.img 这样的东西

编辑:我可以这样

var player = {
    posX: 50,
    posY: 50,
    draw: function(){
        playerImg = new Image();
        playerImg.src = 'player_stay.png';
        ctx.drawImage(playerImg, player.posX, player.posY);
    }
}

但我认为它会创建新的 Image(); 我一直在使用 player.draw(); 所以我问是否有更好的方法来做到这一点并将所有参数都放在玩家对象中?

4

3 回答 3

1

是的,为什么不:

var player = {
    posX: 50,
    posY: 50,
    draw: function(){
        ctx.drawImage(playerImg, player.posX, player.posY);
    },
    playerImage: playerImg
}
于 2012-05-11T11:14:14.973 回答
0

是的,有可能。

通常,您可以拥有嵌套对象或列表,如下所示:

var player = {
    posX: 50,
    posY: 50,
    draw: function(){
        ctx.drawImage(playerImg, player.posX, player.posY);
    },
    playerImage:{
                 src = 'player_stay.png'
                 },
   playerList:['elem1', 'elem2']
}

在您刚刚编写的代码中引用它(例如在赋值的情况下)

player.playerImage.src='anotherplayer.jpg';

此链接可能会有所帮助 http://www.json.org/

于 2012-05-11T11:18:55.973 回答
0

如果我理解正确,您不想在playerImg对象之外/之前构建对象player

好吧,这是您可以做到的一种方式,但我不推荐它,因为它不那么可读:

var player = {
    posX: 50,
    posY: 50,
    draw: function(){
        ctx.drawImage(player.img, player.posX, player.posY);
    },
    img: (function(){
        var playerImg = new Image();
        playerImg.src = 'player_stay.png';
        return playerImg;
    })()
}

这种构造(function(){})();称为自执行/自调用匿名函数,或立即调用函数表达式

BTW:这个表达式只执行一次,当玩家对象被构造时,所以你不必担心重复创建图像。

于 2012-05-11T11:41:41.480 回答