Crafty.raycast()

public Array .raycast(Object origin, Object direction[, Number maxDistance][, String comp][, Boolean sort])
origin

射线将被投射到原点的点。对象必须包含属性_x_y

direction

射线的方向。它必须规范化。对象必须包含属性xy

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'