论坛

由用户创建的信息 recoshet
12 May 2015 16:09
Но вообще говоря, это не самая лучшая идея делать все просчеты с помощью соударений
Я это понимаю, поэтому в будущем буду проводить расчёты на сервере (учитывая задержки игроков и др. факторы соединения), строя виртуальную картину происходящего на сервере.

Сейчас делаю, просто что бы работало . Пули пока что имеют не очень большую скорость, что допускает погрешность.
Спасибо за ответ! Очень приятно что разработка вашего фреймворка поддаётся гибкости и вы идёте на встречу разработчикам
11 May 2015 19:36
Посмотрите на этот туториал.
Посмотрел и напридумывал следующие:
    var _player_id = 82939;
    var _impulse;

    var obrabotchik = function(s) {
        _impulse = s[0];
        return s[1];
    }

    function sobitie(obj, id, pulse, param) {
        var collision_pt = m_ctl.get_sensor_payload(obj, id, 1);

        console.log({obj:obj, id:id, pulse:pulse, param:param, collision_pt:collision_pt, impulse:_impulse});
    }

    var sensor_impulse = m_ctl.create_collision_impulse_sensor(pula_new);
    var sensor_collision = m_ctl.create_collision_sensor(pula_new, 'PLAYER', true);
    m_ctl.create_sensor_manifold(pula_new, "TEST1", m_ctl.CT_SHOT, [sensor_impulse, sensor_collision],
        obrabotchik, sobitie, _player_id);
Где pula_new это только что созданная и помещённая на сцену пуля, которая слушает столкновения.

Понял как определить координаты столкновения это collision_pt. Знаю куда передавать id игрока, создавшего пулю, у меня это param, импульс тела это impulse.
А вот способ определения объекта, с которым произошло столкновение мне не подходит. Потому что:
  • у меня не фиксированное количество объектов (игроков) с которым нужно определить столкновение,
  • объекты(игроки) могут появиться на сцене после создания пули, и при контакте пули с этим новым игроком, событие не отловить(только если, не пересоздавать все слушатели)
У меня сейчас в мыслях напридумывать кучу костылей с массивами. Но хочу услышать ваш совет
04 May 2015 08:32
-Vampire-, у меня была идея сделать таким образом. Но тут количество обработчиков с увеличением числа игроков и выпущенных ими пуль будет быстро расти. Что, боюсь, очень сильно скажется на производительности. И самое главное… Я не смогу определить, какой игрок выпустил пулю, так как не получу объект пули, в котором лежит айдишник игрока, создавшего её

Есть вариант слушать 2 события. От пули и от игрока. И если они происходят почти одновременно, регистрировать попадание игроком в игрока. (Но мне кажется это костыль… При физ движке, который работает в потоке ).

Зарисовал масштаб трагедии (чего то svg форум не принял…)

Плюс у меня, возможно, будет много динамических объектов, расставленных на сцене, которые могут нанести урон игроку, нужно отличать их от статических стен.
Координаты столкновений нужны, так как взаимодействующие тела могут быть большого размера, и хочется визуализировать это место (например добавить искры)
03 May 2015 20:33
И снова здравствуйте! У меня вот вопрос…

Как мне определить с каким объектом произошло столкновение?
Где произошло столкновение?
На данный момент напридумывал такое:
    var sensor_col = m_ctl.create_collision_impulse_sensor(pula_new);
    var sensors = [sensor_col];
    
    var logic_func = function(s) {
        if (s[0] > 0)
            return 1;
        else
            return 0;
    }

    function trigger_pula(obj, id, pulse) {
        console.log({obj:obj,id:id,pulse:pulse});
    }

    m_ctl.create_sensor_manifold(pula_new, "COLLISION", m_ctl.CT_TRIGGER, sensors,
        logic_func, trigger_pula);

Консоль пишет obj:объект, который столкнулся, id:"COLLISION", pulse: 1 или -1.
Cила столкновения s является нулевым элементом метода logic_func
02 May 2015 19:08
-Vampire-, мне тут когда то писали.
Ответ на сообщение пользователя Семенцов Роман
Добрый день.
Попробуйте сделать вызов функции копирования следующим образом:

var pula_new = m_obj.copy(pula, new_name, true);



Только проставьте предварительно галочку "Dynamic geometry" на объекте "Pula" в Blender'e и произведите заново экспорт сцены

Как я понял при таком методе копируется весь объект с геометрией.
01 May 2015 11:42
Привет всем! Хочу сообщить о новых фичах, в моем шутере.

Добавлено:
  • Тестовый режим Deathmatch (Умер и сразу возродился)
  • Отображение очков здоровья в левом нижнем углу.
  • Точки появления игроков (8 точек разбросанно по карте)
  • Простенькая модель игроков (Теперь видно куда игрок смотрит)
  • Система повреждений (Пока не научусь определять, с каким объектом произошло столкновение, об стены лучше не биться с разбега )
  • Чат для общения с игроками
Изменено:
  • Пуля (шар) удаляется не через 1 секунду, а только после соударения с другим объектом. Максимальное время жизни пули 100 сек.
  • Пуля больше не взаимодействует с игроком, который её создал.

Версия на сервере
01 May 2015 02:15
У меня такое тоже наблюдается на слабых компьютерах. Если webgl отключать то сайт не грузит систему.
01 May 2015 00:59
И снова здравствуйте! У меня вот вопрос…

Как мне определить с каким объектом произошло столкновение?
С какой силой произошло столкновение?
Где произошло столкновение?
На данный момент напридумывал такое:
    var sensor_col = m_ctl.create_collision_impulse_sensor(pula_new);
    var sensors = [sensor_col];
    
    var logic_func = function(s) {
        if (s[0] > 0)
            return 1;
        else
            return 0;
    }

    function trigger_pula(obj, id, pulse) {
        console.log({obj:obj,id:id,pulse:pulse});
    }

    m_ctl.create_sensor_manifold(pula_new, "COLLISION", m_ctl.CT_TRIGGER, sensors,
        logic_func, trigger_pula);

Консоль пишет obj:объект, который столкнулся, id:"COLLISION", pulse: 1 или -1.

UPD: с силой столкновения разобрался, она находится в массиве s нулевым элементом метода logic_func
UPD2: создал отдельную тему по этому вопросу
29 April 2015 22:57
Спасибо за ответ. У меня 2 объекта видимый mesh и коллизия.
Я поступлю так пока что: скопирую 2 объекта и установлю связь между ними, используя append_stiff
Коллизия пока что статичная.
29 April 2015 01:03
Сегодня попробовал копировать объект по сложнее пули и заметил что дочерние элементы не копируются.
Подскажите как поступить если нужно скопировать mesh и дочернюю коллизию внутри него для физики?