Хоча я спеціально не працював з двигуном фізики кулі, я зробив щось дуже схоже в іншому двигуні фізики. Я вирішив це шляхом встановлення лінійної швидкості жорсткого тіла замість того, щоб перекладати його безпосередньо. Потім рух і зіткнення автоматично оброблялися на етапі оновлення фізичного двигуна.
З документації , здається, існує btRigidBody::setLinearVelocity
метод, який ви можете використовувати. Наприклад, якщо ви не хочете, щоб якісь прискорення відбувалися, просто встановіть лінійну швидкість на відповідне значення кожного разу, коли персонаж рухається, і встановіть його назад (0,0,0), коли символ повинен зупинитися (тобто коли гравець відпустить ключ).
Що стосується того, які значення використовувати, звичайним підходом було б починати з бажаної швидкості вашого персонажа (як поплавок / скаляр), а потім помножувати його на нормалізований вектор, який спрямований у напрямку, в якому ви хочете рухатися. З того, що я бачуbtVector3
класі вже є методи для всього цього.
Крім того, ви можете розглянути характер для персонажа як повного об'єкта фізики та керувати рухом за допомогою applyForce
або applyImpulse
методів. Це призведе до прискорення тіла, тому ваші персонажі матимуть силу і результати, ймовірно, виглядатимуть приємніше. Але вам потрібно вжити деяких додаткових заходів, наприклад, переконавшись, що лінійна швидкість ніколи не перевищує певну межу, або затискаючи її, або граючи навколо демпфування / тертя. Так це буде трохи складніше здійснити і фінітувати.
Експериментуйте з обома підходами, а потім виберіть той, який поводиться найближче до ваших потреб.