Я новичок в Pascal и работаю над небольшой игрой для WIngraph. В какой-то момент игры персонаж (который является блоком) должен лечь (блок получает половину своей первоначальной высоты). Я хочу, чтобы это произошло, удерживая клавишу со стрелкой вниз, но способ, которым я это реализовал, на самом деле не работает. Еще одна проблема, с которой я столкнулся, заключается в том, что я не знаю, как читать ключи одновременно (это может понадобиться, например, при беге вправо и прыжках).
Вот как я это пытался написать:
procedure joystick;
begin
key:=readkey;
case key of
#0:begin
key:=readkey;
case key of
#80:with block do
begin
y1:=y2-100; //make it get half of its height
repeat
moveblock; //these are the drawing routines.
moveball; //they are in another procedure, which is the 'main loop'
collisioncheck;
draw; //i expected the code to run inside here with the block's
alternateball; //height changed, and as soon as the arrow key gets released
updateGraph(updateNow); //it should go back to the 'main loop'
killball;
delay(10);
until keypressed = false; //<--thats what i think is not working
y1:=y2-200; //this would make the block get normal again
end;
end;
end;
end;
Я ожидал, что код будет работать нормально, пока нажата клавиша, и как только он будет отпущен, блок должен получить свою нормальную высоту, а затем программа будет работать на основе своего основного цикла, но вне этой процедуры.
Все работает, кроме ключа с зажатой клавишей.
KeyPressed
иReadKey
для достижения желаемого. Это руководство (документ Word) о том, как создать обработчик клавиатуры в Паскале, может быть хорошая отправная точка. Подозреваю, что вокруг должно быть много готовых модулей с исходным кодом, но мне удалось наткнуться только на этот сайт на русском языке (с некоторыми частями на английском), где вы можете скачать рабочие примеры с исходниками (не все они то, что вам нужно!). - person Andriy M   schedule 01.06.2012"turbo pascal" keyboard handler
в своей любимой поисковой системе и посмотрите, удастся ли вам найти то, что вам подходит. - person Andriy M   schedule 01.06.2012freepascal
. Я добавил это сейчас. - person Andriy M   schedule 02.06.2012