繁体   English   中英

Javascript位图,用于简单的冲突检测

[英]Javascript bit map for simple collision detection

我需要帮助/建议来改进/评论我的当前设计:)

这与简单游戏中的碰撞检测有关:动态物体(运动物体)可能与静态物体(即地面,墙壁)碰撞。 我正在将我的Obj-C模型移植到Javascript,并且在实现此方法方面面临内存/性能问题。

我使用的是非常基本的方法:阵列数组代表我的物理不透明程度。

  • 设置为0:透明区域,身体可以穿过

  • 位置1:不透明区域,物体碰撞

测试像素的透明度/不透明度只需进行如下操作:

if (grid[x][y]) {
 // collide!
}

我对JS的了解在性能/内存方面非常有限,无法评估这种方法的优势:)没有人说过使用数组的效率。

想象一下一个1000像素宽的水平,即600像素高。 这是一个很小的级别,但这已经意味着一个包含1000个数组的数组,每个数组最多包含600个条目。 此外,我还没有找到一种方法来确保像低级语言一样创建1位大小的元素。

使用以下内容,可以确定某个条目不是“别的”东西吗?

grid[x][y] = true;
grid[x][y] = false;

感谢您的宝贵时间和意见/建议!

J.

如果您具有1000x600的网格,则可以保证内存中至少有601个阵列(如果相反则为1001)。

我不考虑这样做,而是考虑使用1个数组,或者(最好)使用一个具有映射方案的对象。

var map = {};
map["1x1"] = 1;
map["1x3"] = 1;
// assume no-hits are empty and free to move through

function canGoIn(x, y) {
    return map.hasOwnProperty(x + "x" + y);
};

交替;

var map = [];
var width = 600;
map.push(0);
map.push(1);
// etc

function canGoIn(x, y) {
    return map[(x * width) + y] == 1;
}

布尔值将不会仅存储一位,这对于我知道的任何其他语言(包括C)也是如此。

如果您遇到内存问题,则应考虑实现这样的位数组: https : //github.com/bramstein/bit-array/blob/master/lib/bit-array.js

您将必须将2d数组变成一个简单的向量,并按如下方式转换x,y坐标:offset = x +(y * width);

浏览数组仍然会导致乘法运算来评估偏移量,因此使用向量等效于数组。

但是我怀疑调用一个函数(以防您使用位数组)并在内部进行一些评估会导致性能下降。

我认为您无法同时获得表演和节省内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM