Обрабатывать столкновения в отдельном классе
В настоящее время я пишу код для Ludum Dare, мне нужно, чтобы иметь возможность обрабатывать столкновения сверху вниз. Я знаю, как обращаться с ними нормально, но я собираюсь включить много вещей, с которыми можно столкнуться, поэтому я хотел бы обрабатывать столкновения из возврата bool в отдельном классе. Я бы сделал так, чтобы дать функции входной прямоугольник для поля столкновения игрока, а затем сохранить все функции в функции. Однако, если я сделаю это таким образом, мне придется проверять каждый раз, когда я двигаюсь, сталкиваюсь ли я с чем-то. Есть лучший способ сделать это?
1 ответ
Прежде всего, особенно если вы создаете игру для Ludum Dare, нет ничего плохого в том, чтобы наивно проверять столкновения (перебирая все объекты и спрашивая "Я сталкиваюсь с этим?"), Потому что ваша игра, вероятно, будет маленькой и у вас будет много мощность процессора, чтобы сэкономить.
С учетом сказанного это крайне неэффективно. Есть два способа улучшить это, и они часто реализуются вместе:
- Следует использовать квад-деревья или какую-либо другую форму оптимизации столкновений. Это рекурсивно разделяет игровой мир на квадранты, каждый с определенным количеством сущностей внутри каждого квадранта. Это означает, что ваш персонаж проверяет столкновение только с небольшим количеством объектов, а не со всеми.
- Вам действительно нужна система событий. Судя по вашему вопросу, вы новичок в разработке игр. Это совершенно нормально, но итерации по каждой сущности - это просто большая трата вычислительной мощности. С системой событий (вы можете узнать о них где угодно в Интернете, и они были реализованы бесчисленное количество раз в SFML), игра "уведомляется", когда происходит столкновение, а не "ждет его".
Опять же, обе техники продвинуты, но это связано с территорией в удивительно веселом и суровом мире разработки игр. Godspeed.