现在我正在制作一个游戏,屏幕两侧有两块板(即左和右)。还有一个在屏幕上反弹的球。当它接触任何一个板时,它会反弹回来。但是如果它触及屏幕的左边缘或右边缘,那么它的游戏结束了。我们必须通过箭头键或标准(W,A,S,D)键控制印版。现在我的问题是当我按下W或任何移动键时它会移动一次然后停止。
我必须按多次才能移动它。当我按住任何一个移动键时,我想要连续移动。我在Windows 7 PC上使用带有Dev c ++的allegro 5。
答案 0 :(得分:0)
事件处理逻辑应响应按键并更新印版的速度,更新逻辑应根据速度移动印版。这是一些伪代码:
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
答案 1 :(得分:0)
您需要跟踪按键的状态。当您收到按键事件时,请将keydown设置为true。当您收到按键按下事件时,将keydown设置为false。
然后在更新功能中,检查按键是否按下然后再移动。
这样的事情很容易:
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收到按键事件与您执行按键事件之间的时间差,因此不能保证其准确性。
答案 2 :(得分:-1)
在伪代码中,如果事件按键(Allegro_event_key down)应该检测到按键按下并且在适当的键中将在 allegro_event_key_up 中执行其逻辑,则您应该停止逻辑执行操作。
例如,如果按下键做某事,当按下键时停止做某事。
希望有帮助。问候并感谢您。