WPF中的抖动动作
本文关键字:抖动 WPF | 更新日期: 2023-09-27 17:47:49
我在一个300x300的窗户里有一块800x600的画布。当我按下某个键时,我希望画布向那个方向移动
我在窗户后面的代码里做了这个:
受保护的覆盖无效OnKeyDown(KeyEventArgs e){基础OnKeyDown(e);Key keyPressed=e.按键;if(keyPressed==Key.W){gcY+=5;}if(keyPressed==Key.S){gcY-=5;}if(keyPressed==Key.A){gcX+=5;}if(keyPressed==Key.D){gcX-=5;}gameCanvas.RenderTransform=新的TranslateTransform(gcX,gcY);}
好吧,它是有效的,但运动是不稳定的。如果我抓住一个键,例如W,它会在移动前暂停一秒钟
有没有办法让动作更流畅,并在按下键时摆脱停顿
谢谢
当前,您的设置正在接受垃圾邮件输入(按住一个键)。我在大多数基于事件输入的游戏中看到的方法是使用布尔数组keydown[256]
映射键盘(索引是键值);所有值初始化为CCD_ 2。
按下该键时,在keydown方法中将适当的索引设置为true
,在游戏/渲染循环中,根据数组中的键是true
来调用gameCanvas.RenderTransform = new TranslateTransform(gcX, gcY);
。在keyrelease事件方法中释放密钥时,您将密钥值设置为false
(我不确定它在C#中是什么)。
这样你就可以获得平滑的滚动,并且不会延迟启动。
是的,您可以将时间纳入计算中。目前,每当事件触发时,都会添加/substract 5,这是不可预测的。
要使动作流畅,请确保使用DateTime每秒发射次数不超过X次。
类似:
private static DateTime nextUpdate
if (nextUpdate <= DateTime.Now)
{
//Move
nextUpdate = DateTime.Now.AddMilliseconds(100);
}
我现在没有VS,所以我不完全确定语法,但你已经明白了。