Просмотр полной версии : [Box2D] Запретить толкать тела
Как делать так чтобы одни тела воздействовали на другие(например: круг может подвинуть треугольник, а квадрат нет)? То-есть как-бы для одних тел отдельные тела static а для других dynamic.
caseyryan
29.01.2015, 13:17
Задать им b2InteractionFilter (вроде так он называется в бокс2д, уже не помню точно) с указанием битовой маски столкновений. То есть, допустим у квадрата в его интеракшн фильтре будет указана группа 2, а у круга 4, ну и, скажем у треугольника 8. Мы не хотим, чтобы круг сталкивался с квадратом, соответственно задаем интереакшн фильтру круга маску группы квадрата. Делается это просто указанием тильды, после которой будет номер группы (int)
// это псевдокод, так как я точно уже не помню API бокса
circle.interactionFilter.mask = ~2;
если же нужно, чтобы он так же не сталкивался с треугольниками, то маска будет выглядеть как-то так:
circle.interactionFilter.mask = ~(2|8);
Чуть не то, при маске тела совсем не сталкиваются а надо чтобы сталкивались но силу нельзя было применить, например толкать.
caseyryan
29.01.2015, 21:39
Тогда единственный вариант - это в beginContact менять направление вектора скорости на противоположный, а после нормализовать. Это работает, но не всегда. У меня так в игре солдаты с танком сталкивались. Они должны были в него упираться, но не сдвигать. В 99 случаях из 100 все именно так и было, но иногда, по каким-то причинам солдат начинал толкать танк. Очень долго искал надежное решение, но так и не нашел
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.