为什么While循环在C#XAML中不起作用?
我正在尝试为我正在制作的游戏制作键绑定/热键 问题:移动工作一次,然后结束代码 我试着做一个永久的while循环,这样它就永远不会离开代码, 在我添加了while循环之后,它甚至没有注册被按下的键! 我知道while循环存在问题,因为我将其放入注释中,代码的工作方式与之类似 在我在while循环中编码之前。 (我也在使用XAML。) (playerBody是画布) 代码:为什么While循环在C#XAML中不起作用?,c#,xaml,while-loop,C#,Xaml,While Loop,我正在尝试为我正在制作的游戏制作键绑定/热键 问题:移动工作一次,然后结束代码 我试着做一个永久的while循环,这样它就永远不会离开代码, 在我添加了while循环之后,它甚至没有注册被按下的键! 我知道while循环存在问题,因为我将其放入注释中,代码的工作方式与之类似 在我在while循环中编码之前。 (我也在使用XAML。) (playerBody是画布) 代码: 使用系统; 名称空间GameWPF { /// ///MainWindow.xaml的交互逻辑 /// 公共部分类主窗口
使用系统;
名称空间GameWPF
{
///
///MainWindow.xaml的交互逻辑
///
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
私有无效窗口\u KeyDown(对象发送方,KeyEventArgs e)
{
厚度速度=新厚度(0,0,0,100);
bool d=假;
while(d==false)
{
如果(e.Key==Key.W)
{
播放器主体。边距=速度;
}
}
}
}
}
正如一些人已经指出的,没完没了的循环不是一个好主意
我也不认为您的代码只执行一次。事实上,只要按下一个键,它就应该在那里反复运行。但是,始终指定相同的偏移量(厚度
)。因此,该值始终保持在100,因为它没有相加
厚度速度=新厚度(0,0,0,100);
// ...
播放器主体。边距=速度;
试着这样做:
int速度=100;
// ...
PlayerBody.Margin=新厚度(0,0,0,PlayerBody.Margin.Bottom+速度);
您从未将d
设置为true-您希望它如何结束?循环从未结束->UI线程被阻止->无法执行UI操作->应用程序被“卡住”
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;
}
}
}
}
}