Задать вопрос
krdpsr
@krdpsr
loading...

Почему выдает странные значения коллизий matter.js?

var найти_тело = function()
	{ 
		var тело //в переменной есть объект

		//координаты луча
		var sX = тело.position.x
		var sY = тело.position.y
		var дистанция = 1000
		var eX = sX + дистанция*Math.cos(тело.angle)
		var eY = sY + дистанция*Math.sin(тело.angle)
		var startPoint = { x: sX, y: sY }
		var endPoint = { x: eX, y: eY }

		var bodies = Composite.allBodies(world)

		var collisions = Query.ray(bodies, startPoint, endPoint)  

	 	for (var x=0; x< collisions.length; x++)
	 	{
	 		alert(collisions[x].bodyA.id +'_'+ collisions[x].bodyB.id) //выдает:  11_11, 12_12, 13_13...
	 	}
}
setInterval(найти_тело, 111)


ожидаю получить массив столкновений из которого возьму id ближайшего найденного тела
а получаю странные id которых нет в мире - все id известны
и эти id одинаковы для bodyA и bodyB
и еще с каждой итерацией интервала они растут на единицу
возможно этот id вспомогательной линии (ray) которую рисует движок - но знание этого пока никак не помогает
  • Вопрос задан
  • 80 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
krdpsr
@krdpsr Автор вопроса
loading...
пришлось залезть в библиотеку и переделать метод
теперь заработало

Query.ray = function(bodies, startPoint, endPoint, rayWidth) {
        rayWidth = rayWidth || 1e-100;

	        var rayAngle = Vector.angle(startPoint, endPoint),
	            rayLength = Vector.magnitude(Vector.sub(startPoint, endPoint)),
	            rayX = (endPoint.x + startPoint.x) * 0.5,
	            rayY = (endPoint.y + startPoint.y) * 0.5,
	            ray = Bodies.rectangle(rayX, rayY, rayLength, rayWidth, { angle: rayAngle }),
	            collisions = Query.collides(ray, bodies);

	        for (var i = 0; i < collisions.length; i += 1) {
	            var collision = collisions[i];
	            collision.body = collision.bodyB       //эту строку поправил, убрал bodyA
	        }

	        return collisions;
	    };
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы