У меня есть Picturebox для перемещения с помощью клавиш (W, A, S, D), но он очень прерывистый, и вы можете нажимать только одну клавишу за раз. Есть ли другой способ более плавно перемещать «спрайт»?
Это мой код, который я пробовал:
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
int offset = 10;
if (e.KeyChar == 'a')
{
pictureBox1.Location = new Point(pictureBox1.Location.X - offset, pictureBox1.Location.Y);
}
else if (e.KeyChar == 'w')
{
pictureBox1.Location = new Point(pictureBox1.Location.X, pictureBox1.Location.Y - offset);
}
else if (e.KeyChar == 's')
{
pictureBox1.Location = new Point(pictureBox1.Location.X, pictureBox1.Location.Y + offset);
}
else if (e.KeyChar == 'd')
{
pictureBox1.Location = new Point(pictureBox1.Location.X + offset, pictureBox1.Location.Y);
}
}
WinForms — это не игровой движок; это для создания бизнес-форм. Если вы создаете игру, вы, вероятно, захотите использовать какой-нибудь игровой движок, такой как Unity или аналогичный.
а) Перемещение на 10 пикселей прерывистое. б) winforms не синхронизирует анимацию с монитором, поэтому она всегда будет неровной. c) рисуйте все сами, лучше всего на PictureBox или Label. Не рисуйте на панели! Рисование на форме с двойной буферизацией возможно, но не позволяет легко расширяться.





Возможно, вам лучше обновить местоположение внутри, а не присваивать ему новое значение, вызвав pictureBox1.Location.Translate(offset, offset);
Чтобы расширить Babak и ответить на другую часть (нажимая только одну клавишу за раз), измените else if на серию операторов if. С else if последовательность прерывается, как только одно из них становится истинным, а это означает, что как только вы нажмете одну клавишу, другие не будут искаться.
KeyPressEventArgs.KeyChar может содержать только одно нажатие клавиши; он не хочет искать других.
Я предполагаю, что это WinForms. Попытка изменить положение элементов управления пользовательского интерфейса приводит к перекомпоновке формы и очень медленно; вы никогда не получите хорошую производительность таким образом. Если вам абсолютно необходимо использовать WinForms, создайте один элемент управления
Canvasи рисуйте внутри него.