我在想,对于每组可穿戴物品,您都会有一系列可以放在播放器上的物品,例如:
var AwesomeDragonProofDiamondArmour =
{
head: 'awesome-diamond-helmet.png',
chest: 'awesome-diamond-chest.png',
legs: 'awesome-diamond-legs.png',
boots: 'awesome-diamond-boots.png'
};
然后在您的播放器设置中,您将拥有相同的数组;当然,在许多 RPG 游戏中,您不会从一整套令人敬畏的钻石盔甲开始,而是从皮革开始,也许还有一种好的胸甲。
var RubbishLeatherArmour =
{
head: 'rubbish-leather-helmet.png',
chest: 'rubbish-leather-chest.png',
legs: 'rubbish-leather-legs.png',
boots: 'rubbish-leather-boots.png'
};
var SortOfGoodSteelArmour =
{
head: 'sort-of-good-steel-helmet.png',
chest: 'sort-of-good-steel-chest.png',
legs: 'sort-of-good-steel-legs.png',
boots: 'sort-of-good-steel-boots.png'
};
var Player =
{
head: RubbishLeatherArmour.head,
chest: SortOfGoodSteelArmour.chest,
legs: RubbishLeatherArmour.legs,
boots: RubbishLeatherArmour.boots
}
这些 PNG 将是透明的,想法是将它们与基本的播放器图形合成,最终得到一个纸娃娃角色。为了减少开销,将这些图形放在单个精灵表中并存储每个项目的 X、Y、宽度和高度可能是明智的,如下所示:
var RobustMetalArmour =
{
head: [120, 120, 20, 20],
chest: [140, 120, 20, 20],
legs: [160, 120, 20, 30],
boots: [180, 120, 20, 10]
}
其中数组是 [x, y, width, height]。这样做的缺点是只有一个大小,所以除非你的角色都是相同的大小(实际上在基于图块的 RPG 中完全可能),为每个大小的角色生成所有图形可能会很耗时。
您可以使用的另一种方法是使用画布绘图功能绘制图形,其中您可以为头盔指定 ax/y/width/height,然后以您希望的任何尺寸绘制头盔。像这样的东西:
function drawPlus(ctx, x, y, size, colour)
{
ctx.lineWidth = 1;
ctx.strokeStyle = colour;
ctx.beginPath();
ctx.moveTo(x + 0.5, y + 0.5 - size);
ctx.lineTo(x + 0.5, 0.5 + y);
ctx.lineTo(x + 0.5 + size, 0.5 + y);
ctx.moveTo(x + 0.5 - size, y + 0.5);
ctx.lineTo(x + 0.5, 0.5 + y);
ctx.lineTo(x + 0.5, 0.5 + y + size);
ctx.stroke();
ctx.closePath();
}
上面的函数在屏幕上画了一个+。对于奇数宽度的线条,0.5 是必需的 -请参阅此线程。
无论哪种方式,这将非常耗时,具体取决于您希望在每个角色上显示多少项目。