Заставить мяч двигаться с одинаковой скоростью независимо от разрешения (PONG)

Я создал простую игру Pong, и я перемещаю мяч, добавляя переменную ballSpeed к его позиция в моем update игровая логика вроде:

void Update()
{
ballPosition += ballSpeed;
}

Проблема в том, что ballSpeed это D3DXVECTOR3 с компонентами: x = 10; y = 10; z = 0;

Дело в том, что когда я увеличиваю разрешение окна с 640:480 в 1280:1024 шар движется медленнее, потому что для этого требуется больше пикселей.

И мой вопрос: Как я могу заставить мяч двигаться с одинаковой скоростью независимо от разрешения монитора?

2

Решение

Вы можете масштабировать скорость по отношению фактического разрешения к разрешению разработки. Поскольку в игровом процессе в понге преобладают горизонтальные движения, вы можете использовать соотношение ширины:

ballSpeed = int(ballSpeed * width / 640.0);

Вы, вероятно, захотите сделать то же самое для размера всех элементов экрана, таких как шар.

Все это предполагает, что вы определяете «скорость» как время, необходимое для прохождения всего экрана, а не для охвата заданного количества дюймов. Этот расчет будет зависеть не только от разрешения.

1

Другие решения

Возможно, вы могли бы ввести новую систему координат; скажем от (0,0) до (1,1). Переместите шар в этой системе координат, а затем сопоставьте позиции в этих координатах с пикселями на экране, чтобы нарисовать шар. Вы хотите, чтобы ваша система координат имела такое же соотношение сторон, что и у окна.

2

Сначала вы должны ввести преобразование между экранными координатами и логическими координатами и обновлять положение шара не на постоянную величину, а учитывать время с момента последнего обновления, чтобы правильно смоделировать скорость.

1
По вопросам рекламы [email protected]