#c# #xaml #while-loop
#c# #xaml #цикл while
Вопрос:
Я пытаюсь создать привязки клавиш / горячие клавиши для игры, которую я создаю
Проблема: перемещение выполняется один раз, а затем завершает код.
Я попытался создать постоянный цикл while, чтобы он никогда не покидал код, после того, как я добавил цикл while, он даже не регистрирует нажатую клавишу! я знаю, что проблема связана с циклом while, потому что я вставил его в комментарий, и код работает так же, как и до того, как я закодировал в цикле while. (я тоже использую XAML.) (playerBody — это холст)
код:
using System;
namespace GameWPF
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_KeyDown(object sender, KeyEventArgs e)
{
Thickness speed = new Thickness(0, 0, 0, 100);
bool d = false;
while (d == false)
{
if (e.Key == Key.W)
{
PlayerBody.Margin = speed;
}
}
}
}
}
Комментарии:
1. Вы никогда не устанавливаете
d
значение true — как вы ожидаете, что это когда-нибудь закончится?2. Цикл никогда не заканчивается -> поток пользовательского интерфейса заблокирован -> никакое действие пользовательского интерфейса не может быть выполнено -> приложение «застревает»
Ответ №1:
Как уже указывали некоторые люди, бесконечный цикл — не очень хорошая идея.
Я также не думаю, что ваш код выполняется только один раз. На самом деле, он должен выполняться там снова и снова, пока нажата клавиша. Однако вы всегда назначаете одно и то же смещение ( Thickness
). Таким образом, значение всегда остается равным 100, потому что оно не суммируется.
Thickness speed = new Thickness(0, 0, 0, 100);
// ...
PlayerBody.Margin = speed;
Попробуйте что-то вроде этого:
int speed = 100;
// ...
PlayerBody.Margin = new Thickness(0, 0, 0, PlayerBody.Margin.Bottom speed);