为什么我们每次要用方向键移动图形时都需要使用定时器?
Why do we need to use a Timer each time we want to keep moving graphics with arrow keys?
我想制作一个 brekaout 游戏。当我想使用箭头键移动 piddle 时,它不起作用。所以我读了几篇文章,我看到他们使用计时器来做到这一点。你能告诉我他们这样做的原因吗?
仔细想想,答案很简单。当您按住箭头键时,您需要找出桨需要沿其 X 轴移动多远。
没有计时器,就无法控制新的偏移超过 n
秒。
基础物理公式D = S * T
(距离=速度*时间)
每当我们按下键时,就会启动一个计时器,然后我们通过将一个恒定速度变量乘以经过的时间来找到到当前位置的新距离added/subtracted。
这也应允许流畅的移动,而不是在每次按键时错开固定距离的移动。
理论上有两种方法:
- 循环请求输入,循环绘制动画
- 在计时器上执行动画步骤并导致重绘,并安装输入处理程序
第二种方法是当前操作系统中使用的方法,因为它不阻塞,不轮询,事件不会将不同的系统方面联系在一起。 DOS 则不然。
所以程序遵循更间接的事件驱动方法。
我想制作一个 brekaout 游戏。当我想使用箭头键移动 piddle 时,它不起作用。所以我读了几篇文章,我看到他们使用计时器来做到这一点。你能告诉我他们这样做的原因吗?
仔细想想,答案很简单。当您按住箭头键时,您需要找出桨需要沿其 X 轴移动多远。
没有计时器,就无法控制新的偏移超过 n
秒。
基础物理公式D = S * T
(距离=速度*时间)
每当我们按下键时,就会启动一个计时器,然后我们通过将一个恒定速度变量乘以经过的时间来找到到当前位置的新距离added/subtracted。
这也应允许流畅的移动,而不是在每次按键时错开固定距离的移动。
理论上有两种方法:
- 循环请求输入,循环绘制动画
- 在计时器上执行动画步骤并导致重绘,并安装输入处理程序
第二种方法是当前操作系统中使用的方法,因为它不阻塞,不轮询,事件不会将不同的系统方面联系在一起。 DOS 则不然。
所以程序遵循更间接的事件驱动方法。