我正在制作一个游戏,我有一个名为MainCharacter的类,它首先初始化主角(在pictureBox中)然后我有一个用于处理运动的KeyDown事件 . 在这个事件中,如果我按下箭头键,我就能够处理角色移动,我甚至做了一个基于计时器的动作动画,使它看起来更加流畅 .
但是,KeyDown事件的问题是每次按下键时它都会触发,这意味着如果我按住箭头键使角色继续向一个方向移动,则会重复触发事件,这意味着角色像鱼雷一样在屏幕上运行,因为事件的发射速度与计算机可以处理的速度一样快 .
这就是为什么我决定使用KeyPress事件,这样当我按住键时,角色将以稳定的速度沿指定的方向移动 . 但是,KeyPress事件无法处理箭头键,这就是我必须在主窗体中覆盖ProcessDialogKey方法的原因 . 但是如果我在主窗体中覆盖它,那么每次按箭头键都会触发事件,即使我不在游戏中,但是例如在主菜单或其他任何地方 . 除此之外,我认为如果我试图通过跨课程来编程,那将是不好的做法 .
那么,有没有其他方法让我在MainCharacter类中的箭头上处理KeyPress事件而不影响其他类?或者我有机会继续使用我已经工作过的KeyDown事件,并且如果按住键那么它就不能反复触发吗?记住,我想要实现的是当我按下我的钥匙时,我的角色会流畅地移动 . 到目前为止,它工作正常,如果我只按一次,但通常人们在向一个方向走时按住键 .
2 回答
在
MainCharacter
类上创建direction
变量 .左键为
OnKeyDown
,方向为-1,右键为OnKeyDown
,方向为1 .然后是左右键的
OnKeyUp
,将方向设置为0 .然后,您可以根据
direction
设置的值移动角色,而不是每次按下物理按键时移动角色 .Very pseudo-code: //此示例仅关注左/右移动 .
this.position.X =(this.direction *(this.speed 10));