Box2dx: указать приборы, которые следует игнорировать при рейкастинге?

У всех в моем игровом мире есть приспособления с прикрепленными формами датчиков. Когда я использую raycast, он попадает в эти приборы, но я хочу задействовать только те приборы, у которых хотя бы одна форма не является датчиком. Это возможно?

Я использую Box2dx — порт C#.

Кроме того, что делает обратный вызов?

     world.PhysicsWorld.RayCast((f, p, n, fr) =>
        {
            fixture = f;
            position = p;
            return fr;
        }, point1, point2);

Это функция raycast, которую я вызываю. В документации говорится, что обратный вызов можно использовать для указания количества возвращаемых фигур, но я не уверен, как это сделать:

    /// Ray-cast the world for all fixtures in the path of the ray. Your callback
    /// controls whether you get the closest point, any point, or n-points.
    /// The ray-cast ignores shapes that contain the starting point.
    /// @param callback a user implemented callback class.
    /// @param point1 the ray starting point
    /// @param point2 the ray ending point
    public void RayCast(Func<Fixture, Vector2, Vector2, float, float> callback, Vector2 point1, Vector2 point2)
    {
        RayCastInput input = new RayCastInput();
        input.maxFraction = 1.0f;
        input.p1 = point1;
        input.p2 = point2;

        _rayCastCallback = callback;
        _contactManager._broadPhase.RayCast(_rayCastCallbackWrapper, ref input);
        _rayCastCallback = null;
    }

person Nick Heiner    schedule 05.04.2010    source источник


Ответы (1)


Поскольку никто больше не ответил, я дам вам то, что я могу понять, предоставленная документация немного отрывочна, функция явно полагается на другой фрагмент кода для выполнения фактической работы, и я не знаю C#, поэтому я могу' т сказать вам все.

Обратный вызов — это метод функции, дающий вам результат, вы должны написать функцию, которая принимает заданный набор параметров. Вы передаете эту функцию в качестве параметра при вызове RayCast, в свою очередь, ваша функция будет вызываться при обнаружении перекрытия, затем ваша функция обратного вызова может вернуть некоторое значение, чтобы указать, продолжать ли raycast, я полагаю, вы должны вернуть либо true, либо ЛОЖЬ.

Лучше всего для выбора только приборов с массивами без датчиков, вероятно, проверить это в своей функции обратного вызова и действовать только в том случае, если эти критерии соблюдены.

person aaaaaaaaaaaa    schedule 08.04.2010