Игры, подобные Angry Birds, используют физический движок для перемещения объектов и обнаружения столкновений. Если вы хотите узнать больше о том, как работают физические движки, начните с чтения Box2D . Я не знаю, какой движок использует Angry Birds, но Box2D широко используется с открытым исходным кодом.
Однако для более простых игр вам, вероятно, не нужен физический движок, поэтому обнаружение столкновений довольно просто и состоит из двух частей:
Сначала определяется, с какими объектами тестировать столкновение. Для многих маленьких игр неплохо проверить каждый отдельный объект на предмет каждого другого объекта. Хотя ваш вопрос остерегается такого подхода грубой силы, компьютеры очень быстро справляются с такой обычной математикой.
Однако для больших сцен вам нужно отбросить все объекты, которые находятся слишком далеко от игрока, чтобы иметь значение. По сути, вы разбиваете сцену на зоны, а затем сначала проверяете, в какой зоне находится персонаж, а затем проверяете столкновение с каждым объектом в этой зоне.
Одна техника для этого называется "квадри". Другая техника, которую вы можете использовать, это Binary Space Partitioning . В обоих случаях сцена разбита на множество мелких частей, которые вы можете использовать для организации сцены.
Вторая часть - обнаружение столкновения между двумя конкретными объектами. Самый простой способ сделать это - дистанционные проверки; просто посчитайте, как далеко находятся эти два объекта, и если они достаточно близко, то они сталкиваются.
Почти так же просто построить ограничивающий прямоугольник вокруг объектов, которые вы хотите проверить. Довольно просто проверить, перекрываются ли два поля или нет, просто сравнив их координаты.
Теперь ограничивающие прямоугольники - это просто прямоугольники; этот подход может стать более сложным, если фигуры, которые вы хотите столкнуть, представлены произвольными многоугольниками. Некоторых базовых знаний о геометрии обычно достаточно для этой части, хотя полнофункциональные физические движки могут углубиться в детали, сообщая вам не только о том, что столкновение произошло, но именно когда и как оно произошло.