由用户创建的信息 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);
Понял как определить координаты столкновения это collision_pt. Знаю куда передавать id игрока, создавшего пулю, у меня это param, импульс тела это impulse.
А вот способ определения объекта, с которым произошло столкновение мне не подходит. Потому что:
- у меня не фиксированное количество объектов (игроков) с которым нужно определить столкновение,
- объекты(игроки) могут появиться на сцене после создания пули, и при контакте пули с этим новым игроком, событие не отловить(только если, не пересоздавать все слушатели)
04 May 2015 08:32
-Vampire-, у меня была идея сделать таким образом. Но тут количество обработчиков с увеличением числа игроков и выпущенных ими пуль будет быстро расти. Что, боюсь, очень сильно скажется на производительности. И самое главное… Я не смогу определить, какой игрок выпустил пулю, так как не получу объект пули, в котором лежит айдишник игрока, создавшего её
Есть вариант слушать 2 события. От пули и от игрока. И если они происходят почти одновременно, регистрировать попадание игроком в игрока. (Но мне кажется это костыль… При физ движке, который работает в потоке ).
Зарисовал масштаб трагедии (чего то svg форум не принял…)
Плюс у меня, возможно, будет много динамических объектов, расставленных на сцене, которые могут нанести урон игроку, нужно отличать их от статических стен.
Координаты столкновений нужны, так как взаимодействующие тела могут быть большого размера, и хочется визуализировать это место (например добавить искры)
Есть вариант слушать 2 события. От пули и от игрока. И если они происходят почти одновременно, регистрировать попадание игроком в игрока. (Но мне кажется это костыль… При физ движке, который работает в потоке ).
Зарисовал масштаб трагедии (чего то svg форум не принял…)
Плюс у меня, возможно, будет много динамических объектов, расставленных на сцене, которые могут нанести урон игроку, нужно отличать их от статических стен.
Координаты столкновений нужны, так как взаимодействующие тела могут быть большого размера, и хочется визуализировать это место (например добавить искры)
03 May 2015 20:33
И снова здравствуйте! У меня вот вопрос…
Как мне определить с каким объектом произошло столкновение?
Где произошло столкновение?
На данный момент напридумывал такое:
Консоль пишет obj:объект, который столкнулся, id:"COLLISION", pulse: 1 или -1.
Cила столкновения s является нулевым элементом метода logic_func
Как мне определить с каким объектом произошло столкновение?
Где произошло столкновение?
На данный момент напридумывал такое:
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
01 May 2015 00:59
И снова здравствуйте! У меня вот вопрос…
Как мне определить с каким объектом произошло столкновение?
С какой силой произошло столкновение?
Где произошло столкновение?
На данный момент напридумывал такое:
Консоль пишет obj:объект, который столкнулся, id:"COLLISION", pulse: 1 или -1.
UPD: с силой столкновения разобрался, она находится в массиве s нулевым элементом метода logic_func
UPD2: создал отдельную тему по этому вопросу
Как мне определить с каким объектом произошло столкновение?
С какой силой произошло столкновение?
Где произошло столкновение?
На данный момент напридумывал такое:
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
29 April 2015 01:03