Crafty.raycast()
public Array .raycast(Object origin, Object direction[, Number maxDistance][, String comp][, Boolean sort])
- origin
射线将被投射到原点的点。对象必须包含属性
_x
和_y
。
- direction
射线的方向。它必须规范化。对象必须包含属性
x
和y
。
- maxDistance
查找的最大距离。这是一个可选的参数,默认为
Infinity
。如果它是Infinity
,找到所有的交点。如果是负的,只找到第一个交点(如果有一个)。如果它是正的,就会发现在这个距离上所有的交点。
- comp
检查与具有此组件的实体的交集。这是一个可选的参数,默认情况下是禁用的。
- sort
是否通过增加距离来对返回的数组进行排序。如果不需要排序结果,可能会被禁用,以稍微提高性能。默认值为
true
。
- [Returns]
如果没有找到交集,那么一组射线结果可能是空的。否则,每一个射线结果看起来都像这样的对象
{obj: Entity, distance: Number, x: Number, y: Number}
, 描述obj
实体相交于点x
,y
以及起点方向。
在给定的参数约束条件下,从它的原点投射一条射线,并报告与之相交的实体。
光线追踪只返回应用了 Collision
组件的实体。
例子
Crafty.e("2D, Collision")
.setName('First entity')
.attr({x: 0, y: 0, w: 10, h: 10});
Crafty.e("2D, Collision")
.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();
var results = Crafty.raycast(origin, direction, -1); // find only 1st intersection
Crafty.log('Intersections found', results.length); // logs '1'
var result = results[0];
Crafty.log('1st intersection:');
Crafty.log('Entity name:', result.obj.getName()); // logs 'First entity'
Crafty.log('Distance from origin to intersection point', result.distance); // logs '25 * Math.sqrt(2)'
Crafty.log('Intersection point:', result.x, result.y); // logs '0' '0'