Я намагаюся створити "справедливе" виявлення зіткненнясистема для 2d спрайтової гри, але мені здається, що це складніше, ніж я спочатку очікував. Під "справедливим" я маю на увазі, що жодному рухомому об'єкту не надається пріоритет руху над іншим в одному оновленні гри:
наприклад A -> 50px <- B (якщо b і a мають однакові швидкості, кожен з них повинен рухатись 25 пікс. Перед зіткненням і зупинкою)
На відміну від жадібних алгоритмів, які можуть просто рухатись спочатку A, а потім скасовувати рух B, оскільки A вже є.
2 випадки вирішуються досить просто, але у мене виникають проблеми, коли у мене стикаються кілька об'єктів.
напр. (показані лише швидкості).
B
|
|<--C
A--> v
Де об'єкти A, B і C можуть бути різного розміру
В основному, я шукаю ідеї, як це зробитипідходити до цієї проблеми. Мій сучасний підхід став занадто складним, і мені цікаво обговорити деякі інші підходи, про які я не думав.
Відповіді:
1 для відповіді № 1Якщо ви щось пересуваєте, а потім перевіряєте на зіткнення, як ви кажете, це ніколи не буде справедливим. То чому б не рухатися все, і під час переміщення суб'єкта господарювання, якщо він єзіткнення, позначте його як таке. Після того, як ви все пересунете, ви зможете переглянути всі зіткнення і вирішити, що робити далі на основі всіх (наприклад, перемістіть їх однаково, щоб вони більше не стикалися).