Пишу 2d игру с видом сверху. Как рассчитать начальные координаты пули, которая должна быть на конце ствола? Т.к. использую box2d игрок имеет форму круга, изначально использовал такую формулу:
pos
- позиция, raduis
- радиус тела игрока, rot
- поворот (уже известен)
pos.x + radius * Math.cos(rot)
pos.y + radius * Math.sin(rot)
Но пули появлялись в плотную от игрока и происходила коллизиция, т.е. игрок попадал сам в себя. Как сделать, что бы пуля появлялась "на конце ствола" и был правильный вылет. Можете ответить на любом языке, мне только формула нужна.
В box2D есть встроенная поддержка фильтрации столкновений. Фильтрация имеет две ступени
Ваша ситуация скорее подпадает под 2 категорию - пули и игрок не должны сталкиваться между собой однако и пули, и игрок должны сталкиваться со стенками.
Задавать эти параметры можно при создании fixture, например:
int16 const main_group_id{1};
uint16 const flag_wall{0x0001};
uint16 const flag_player{0x0002};
uint16 const flag_bullet{0x0004};
b2FixtureDef wall_fixture_def;
wall_fixture_def.filter.categoryBits = flag_wall; // что такое
wall_fixture_def.filter.maskBits = flag_player | flag_bullet; // с кем сталкиваться
wall_fixture_def.filter.groupIndex = main_group_id;
b2Fixture * p_wall_fixture = p_wall_body->CreateFixture(&wall_fixture_def);
b2FixtureDef player_fixture_def;
player_fixture_def.filter.categoryBits = flag_player; // что такое
player_fixture_def.filter.maskBits = flag_wall; // с кем сталкиваться
player_fixture_def.filter.groupIndex = main_group_id;
// create player fixtures...
b2FixtureDef bullet_fixture_def;
bullet_fixture_def.filter.categoryBits = flag_bullet; // что такое
bullet_fixture_def.filter.maskBits = flag_wall; // с кем сталкиваться
bullet_fixture_def.filter.groupIndex = main_group_id;
// create bullet fixtures...
Или позже посредством метода b2Fixture::SetFilterData
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как перевести INT в PCHAR в режиме ядра Windows ? Я знаю как перевести в обычной проге но вот в режиме ядра (написания драйвера) не знаю получиться...
Есть std::set минимум из N элементовКак выбрать N разных случайных?Порядок любой
Всем приветВ общем дали мне задание, связанное с сортировкой методом шейкере используя пользовательские типы fraction и data
Я думаю что нельзяТак как в куча имеет хедер в котором есть(свободный ли блок и сколько байт в нему)