保存等距游戏的平铺数据的最有效方法

Har*_*men 32 javascript isometric

我正在开发一款支持快速浏览器的等距游戏,<canvas>非常有趣.为了保存每个图块的信息,我使用一个二维数组,其中包含代表图块ID的数字,如:

var level = [[1, 1, 1, 2, 1, 0],
             [0, 1, 1, 2, 0, 1],
             [0, 1, 1, 2, 1, 1]];

var tiles = [
    {name: 'grass',  color: 'green'},
    {name: 'water',  color: 'blue'},
    {name: 'forest', color: 'ForestGreen'}
];
Run Code Online (Sandbox Code Playgroud)

到目前为止,它的效果很好,但现在我想在这张照片中使用高度和斜率: alt text http://harmen.no-ip.org/isometrictiles.png

对于每个瓷砖,我需要保存它的瓷砖ID,高度和有关哪些角向上翻转的信息.

我想出了一个关于所有四个角的按位表示的简单想法,如下所示:

1011 // top, bottom and left corner turned up
Run Code Online (Sandbox Code Playgroud)

我的问题是:为每个单元格保存这三个值的最有效方法是什么?是否可以将这三个值保存为一个整数?

Yac*_*oby 14

如果你试图做一些类似图片的事情,你不需要存储哪些角落向上/向下,因为它可以从周围的瓷砖中推断出来.

例如,如果当前图块是高度n并且从当前图块向上的图块的高度是高度,n+1那么当前图块必须具有"顶部向上"

大!谢谢!我会尝试实现这个.还有一个想法来完成你的答案:是否可以将高度和图块ID存储为整数?

是.您将需要使用按位操作.

如果你使用高度的前16位和id的其余部分在高度和id之间平均分配整数

var id = tile & 0x0000FFFF; //mask the first 16 bits
var height = tile >>> 16; //shift the first 16 bits to the right
Run Code Online (Sandbox Code Playgroud)

设置可以在类似的mannar中完成

tile &= 0xFFFF0000; //remove id bits
tile |= id; //set new id

tile &= 0x0000FFFF; //remove height bits
tile |= (height << 16);
Run Code Online (Sandbox Code Playgroud)

  • +1,但存储角高,而不是单元格高度,以避免歧义. (5认同)