Я работаю над 2-й игрой. В нем бананы (picturBox
) выпадают из верхней части экрана, и вы должны их поймать, иначе он бьет по земле, и вы теряете очки. Чтобы оживить банан, я меняю его Y-Location с использованием timer
, который имеет интервал 5ms (Плавная анимация).Banana Drop - C# Игра
Y-Drop Speed изменяется на основе разрешения экрана. Поскольку банан перемещается 1px каждые 5ms на базовом разрешении, которое составляет , ему необходимо изменить скорость, чтобы в одно и то же время выполнять различные разрешения.
Код:
private void timer_Tick(object sender, EventArgs e)
{
double xNanas = nanas.Location.X;
double yNanas = nanas.Location.Y;
yNanas += 1 * this.Height/720;
nanas.Location = new Point((int)xNanas, (int)yNanas);
nanas.Refresh();
}
Проблема:
1. При изменении разрешения на небольшое количество напр. 800х600. Двойные обращенные к ИНТ и банан не двигается, даже если (1 * 600/720) округляется является 1.
2. Поскольку скорость всегда округляется время, необходимое для банана, чтобы ударить землю резко меняется! 16,7 на 1920x1080 и 10,6 на 1280x720. Как бы я сделал это так же?
Пробовал:
Изменение интервала, а не скорость. В то же время он все равно не попадает в землю. Я не могу изменить интервал на большое количество, поскольку это делает анимацию изменчивой.
Вам нужно искать время реализации delta – jdphenix
Вы выполняете математику целых чисел. Попробуйте 'yNanas + = 1 * this.Height/720d' – SimpleVar
@SimpleVar Спасибо! Это решило проблему №1, но как насчет проблемы №2? –