Crafty.map
与查询实体相关的函数。
方法
Back to top
Crafty.map.boundaries()
public Object Crafty.map.boundaries()
- [Returns]
具有以下结构的对象,它表示包含所有实体的最小外接矩形
请注意,返回的对象是对内部使用的对象的引用。使用Crafty.clone
来获得一个副本。
{
min: {
x: val_x,
y: val_y
},
max: {
x: val_x,
y: val_y
}
}
Back to top
Crafty.map.insert()
public Object Crafty.map.insert(Object obj)
- obj
要插入的实体。
- [Returns]
在哈希表中表示该对象的条目的对象
obj
是插入到 '.map' 响应的单元格. 返回对象会包含以下字段.
{
keys: the object that keep track of cells
obj: The inserted object
map: the HashMap object
}
Back to top
Crafty.map.refresh()
public void Crafty.map.refresh(Entry entry)
- entry
要更新的实体
更新条目的键,以及它在广阔地图中的位置。
例子
Crafty.map.refresh(e);
Back to top
Crafty.map.remove()
public void Crafty.map.remove(Entry entry)
- entry
要从哈希表中删除的实体
从广阔的地图中移除实体
例子
Crafty.map.remove(e);
Back to top
Crafty.map.search()
public Object Crafty.map.search(Object rect[, Boolean filter])
- rect
搜索实体的矩形区域。这个对象必须包含属性
_x
,_y
,_w
,_h
。
- filter
如果为
false
, 只执行一次广泛的碰撞检测 。默认值为true
.
- [Returns]
在给定区域中找到的一个(可能是空的)实体数组
搜索给定区域中的实体,使用它们的大范围边界矩形。
- 如果
filter
为false
,那么就可以通过广义的碰撞来搜索给出矩形区域的所有项。实体可以被复制。 - 如果
filter
为true
,那么通过检查它们实际重叠的矩形来过滤上述结果。
更简单的用法是使用filter == true
。出于性能原因,您可以使用filter == false
,并自己过滤结果。看 drawing.js 和 collision.js 中的例子。
例子
// search for entities located in the current visible region of the viewport
var results = Crafty.map.search(Crafty.viewport.rect());
// iterate over all those entities
var ent;
for (var i = 0, l = results.length; i < l; ++i) {
// do something with an entity
ent = results[i];
Crafty.log('Found entity with id', ent.getId());
}
Back to top
Crafty.map.traverseRay()
public void Crafty.map.traverseRay(Object origin, Object direction, Function callback)
- origin
射线将被投射到原点的点。对象必须包含属性
_x
和_y
。
- direction
射线的方向。它必须规范化。对象必须包含属性
x
和y
。
- callback
对于在光线中遇到的每个对象,都会调用一个回调。这个函数用两个参数调用:第一个表示所遇到的对象;第二个参数表示到目前为止所有对象被报告的距离。回调可以返回一个真值,以便提前停止遍历。
在提供的光线的方向上穿过空间映射。
给定了射线的origin
和 direction
,并调用了在映射单元中遇到的每个对象的callback
。
对于可能与光线相交的每一个对象,都调用回调。实际的交集是否应该由回调的实现来决定。
例子
Crafty.e("2D")
.setName('First entity')
.attr({x: 0, y: 0, w: 10, h: 10});
Crafty.e("2D")
.setName('Second entity')
.attr({x: 20, y: 20, w: 10, h: 10});
var origin = {_x: -25, _y: -25};
var direction = new Crafty.math.Vector2D(1, 1).normalize();
Crafty.map.traverseRay(origin, direction, function(ent, processedDistance) {
Crafty.log('Encountered entity named', ent.getName()); // logs 'First entity'
Crafty.log('All entities up to', processedDistance, 'px away have been reported thus far.');
Crafty.log('Stopping traversal after encountering the first entity.');
return true;
});