连续的键盘移动
Continuous keyboard movements
现在我正在制作一个游戏,在屏幕的两侧(即左和右)有两个盘子。还有一个在屏幕上弹跳的球。当它接触到其中一个盘子时,它会反弹回来。但如果它触及屏幕的左边缘或右边缘,那么游戏就结束了。我们必须通过箭头键或标准(W、A、S、D)键来控制盘子。现在我的问题是当我按下 W 或任何移动键时它移动一次然后停止。
我得按很多次才能让它动起来。当我按住任何移动键时,我想要连续移动。我在 windows 7 PC 上使用带有 Dev c++ 的 allegro 5。
事件处理逻辑应响应按键并更新板的速度,更新逻辑应根据速度移动板。这是一些伪代码:
while running:
# event processing
for event in queue:
if event is keypress:
if key is W:
velocityY -= 10
if key is S:
velocityY += 10
if event is keyrelease:
if key is W:
velocityY += 10
if key is S:
velocityY -= 10
# update
posY += velocityY * elapsedTime
您需要跟踪按键的状态。当您收到按键按下事件时,将 keydown 设置为 true。当您收到按键事件时,将 keydown 设置为 false。
然后在你的update函数中,检查按键是否按下然后移动。
这样的事情使它变得非常容易:
bool keys[ALLEGRO_KEY_MAX] = {0};
/// In event loop
if (ev.type == ALLEGRO_EVENT_KEY_DOWN) {
keys[ev.keyboard.keycode] = true;
}
else if (ev.type == ALLEGRO_EVENT_KEY_UP) {
keys[ev.keyboard.keycode] = false;
}
if (ev.type == ALLEGRO_EVENT_TIMER) {
if (keys[ALLEGRO_KEY_W]) {
player.y -= YSPEED;
}
if (keys[ALLEGRO_KEY_S]) {
player.y += YSPEED;
}
}
您也可以使用al_get_keyboard_state来监控键盘状态,但由于 allegro 收到按键事件的时间与您收到按键事件的时间不同,无法保证准确无误。
hi 在伪代码中,如果事件按键(Allegro_event_key 按下)应该检测到按键,并且在适当的键中将在 allegro_event_key_up 中执行其逻辑,您应该停止逻辑执行操作.
例如,如果按键被按下做某事,当按键向上时停止做某事。
希望对您有所帮助。问候和谢谢。
现在我正在制作一个游戏,在屏幕的两侧(即左和右)有两个盘子。还有一个在屏幕上弹跳的球。当它接触到其中一个盘子时,它会反弹回来。但如果它触及屏幕的左边缘或右边缘,那么游戏就结束了。我们必须通过箭头键或标准(W、A、S、D)键来控制盘子。现在我的问题是当我按下 W 或任何移动键时它移动一次然后停止。
我得按很多次才能让它动起来。当我按住任何移动键时,我想要连续移动。我在 windows 7 PC 上使用带有 Dev c++ 的 allegro 5。
事件处理逻辑应响应按键并更新板的速度,更新逻辑应根据速度移动板。这是一些伪代码:
while running:
# event processing
for event in queue:
if event is keypress:
if key is W:
velocityY -= 10
if key is S:
velocityY += 10
if event is keyrelease:
if key is W:
velocityY += 10
if key is S:
velocityY -= 10
# update
posY += velocityY * elapsedTime
您需要跟踪按键的状态。当您收到按键按下事件时,将 keydown 设置为 true。当您收到按键事件时,将 keydown 设置为 false。
然后在你的update函数中,检查按键是否按下然后移动。
这样的事情使它变得非常容易:
bool keys[ALLEGRO_KEY_MAX] = {0};
/// In event loop
if (ev.type == ALLEGRO_EVENT_KEY_DOWN) {
keys[ev.keyboard.keycode] = true;
}
else if (ev.type == ALLEGRO_EVENT_KEY_UP) {
keys[ev.keyboard.keycode] = false;
}
if (ev.type == ALLEGRO_EVENT_TIMER) {
if (keys[ALLEGRO_KEY_W]) {
player.y -= YSPEED;
}
if (keys[ALLEGRO_KEY_S]) {
player.y += YSPEED;
}
}
您也可以使用al_get_keyboard_state来监控键盘状态,但由于 allegro 收到按键事件的时间与您收到按键事件的时间不同,无法保证准确无误。
hi 在伪代码中,如果事件按键(Allegro_event_key 按下)应该检测到按键,并且在适当的键中将在 allegro_event_key_up 中执行其逻辑,您应该停止逻辑执行操作.
例如,如果按键被按下做某事,当按键向上时停止做某事。
希望对您有所帮助。问候和谢谢。