Я создал простую игру Pong, и я перемещаю мяч, добавляя переменную ballSpeed к его позиция в моем update
игровая логика вроде:
void Update()
{
ballPosition += ballSpeed;
}
Проблема в том, что ballSpeed
это D3DXVECTOR3
с компонентами: x = 10; y = 10; z = 0;
Дело в том, что когда я увеличиваю разрешение окна с 640:480
в 1280:1024
шар движется медленнее, потому что для этого требуется больше пикселей.
И мой вопрос: Как я могу заставить мяч двигаться с одинаковой скоростью независимо от разрешения монитора?
Вы можете масштабировать скорость по отношению фактического разрешения к разрешению разработки. Поскольку в игровом процессе в понге преобладают горизонтальные движения, вы можете использовать соотношение ширины:
ballSpeed = int(ballSpeed * width / 640.0);
Вы, вероятно, захотите сделать то же самое для размера всех элементов экрана, таких как шар.
Все это предполагает, что вы определяете «скорость» как время, необходимое для прохождения всего экрана, а не для охвата заданного количества дюймов. Этот расчет будет зависеть не только от разрешения.
Возможно, вы могли бы ввести новую систему координат; скажем от (0,0) до (1,1). Переместите шар в этой системе координат, а затем сопоставьте позиции в этих координатах с пикселями на экране, чтобы нарисовать шар. Вы хотите, чтобы ваша система координат имела такое же соотношение сторон, что и у окна.
Сначала вы должны ввести преобразование между экранными координатами и логическими координатами и обновлять положение шара не на постоянную величину, а учитывать время с момента последнего обновления, чтобы правильно смоделировать скорость.