Box2dx: Укажите приборы, которые следует игнорировать при радиовещании? - PullRequest
3 голосов
/ 05 апреля 2010

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

Я использую 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;
    }

1 Ответ

1 голос
/ 09 апреля 2010

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

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

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

...