Я использую PixelToaster (библиотека C ++ для рисования в буфере кадров) для простого движка 3D-трансляции (ehm .. 2.5D). Я использую конфигурацию клавиш WASD старой школы для перемещения камеры (W = вперед, S = назад, A = повернуть влево, D = повернуть вправо), однако я хочу использовать мышь для современного подхода с использованием свободной блокировки (WASD для перемещения и перемещения) мышкой повернуть голову).
Я заметил, что PixelToaster предоставляет слушатель мыши, в котором задаются только координаты мыши ABSOLUTE x, y (относительно ширины окна, высоты). Использование такой системы координат не то, что я хочу, потому что поворот останавливается, как только координата мыши x достигает границы экрана. (во всех коммерческих играх вы можете вращаться бесконечно, непрерывно проводя мышкой в одном направлении).
Как я могу получить такое же поведение, используя прослушиватель мыши PixelToaster?
То, что вам нужно, довольно просто реализовать.
Просто сбросьте указатель мыши на центр экрана, когда вы нажмете поля.
Обратите внимание, что для того, чтобы это работало, вам не следует «отображать» координаты пространства вашего 2D-экрана на угловое вращение персонажа. Вместо этого есть аккумулятор, который продолжает складывать пошаговые изменения угла (рассчитывается на основе движений указателя мыши в двухмерном пространстве экрана).
Альтернативный подход: Вы можете определить, когда находитесь на краях экрана, и продолжать вращать персонажа, пока не покинете этот край. Таким образом, вам не нужно сбрасывать указатель мыши. По какой-то причине я предположил, что в вашей игре не будет перекрестка, поэтому я сначала предложил мой прежний подход. 🙂
Других решений пока нет …