в паскале при нажатии кнопки считывал символ так: if KeyPressed then ch:=ReadKey; В делфи такое что то не катит пишет Undeclared identifier... Как мне реализовать это в Делфях подскажите.
Что мне делать если в бесконечном цикле , я должен при нажатии калвиши либо выйти из цикла либо изминить какие то переменные?
Чесно говоря пишу игру. Грубо говоря у меня идет процесс падения какогото "шарика". В процесс падения я хочу поменять фон (использую TImage) при нажатии стрелочек на клавиатуре.
procedure TForm1.KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of vk_down: if napravl<>nup then napravl:=ndown; vk_up: if napravl<>ndown then napravl:=nup; vk_left: if napravl<>nright then napravl:=nleft; vk_right: if napravl<>nleft then napravl:=nright; end; end;
то есть при нажатии стрелки менялось направление змейки. мне кажется, тебя что-то подобное должно устроить... но это все равно обработчик события.
--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует. На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
procedure TForm1.KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of vk_down: if napravl<>nup then napravl:=ndown; vk_up: if napravl<>ndown then napravl:=nup; vk_left: if napravl<>nright then napravl:=nleft; vk_right: if napravl<>nleft then napravl:=nright; end; end;
это меня утраивает есть только одно НО.
У меня в прецессе игры идет бесконечный цикл падения "шариков" и в процессе его выполнения я не могу обработать событие KeyDown.
Подскажите либо как мне обработку клвиатуры сделать внутри цикла либо как сделать так чтобы шарики падали сами по себе, в то время как я мог бы выполнять другие действия.
а как цикл реализован? может, сделать привязку к таймеру?
--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует. На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
Application.ProcessMessages помогло. Только я теперь из цикла выйти не могу и из програмы тоже пока не нажму Еsc(k:=5) и только потом могу выйти.
procedure TForm1.N2Click(Sender: TObject); var i,g:word; //откуда падают яйца и жизни begin randomize; o:=0;k:=1;g:=3; Image1.Picture.LoadFromFile(FonFile(k));
repeat i:=random(3)+1; repeat
Image1.Picture.LoadFromFile(FonFile(k)); нарисовать яйцо преместить его координаты Application.ProcessMessages; until яйцо дошло доконца; if i=k then inc(o) else dec(g); until g=0; end;
Что там нащет Таймера?.
Кому интересно что я вообще намучил можете скачать посмотреть тут может что посоветуете.
что НЕ понравилось: момент первый - принципиальный. мерзкое мерцание. сделай так:
procedure TForm1.FormCreate(Sender: TObject); begin DoubleBuffered:=true;<-----добавь эту строку k:=0; Image1.Picture.LoadFromFile(FonFile(k)); end;
и будет замечательно
момент второй - менее значительный. пользователю незаметный....
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if GameOver=false then begin case Key of 39: if (k<>2)and(k<>4) then k:=k+1; 37: if (k<>1)and(k<>3)and(k<>0) then k:=k-1; 38: if (k<>4)and(k<>3) then k:=k+2; 40: if (k<>1)and(k<>2)and(k<>0) then k:=k-2; end; Image1.Picture.LoadFromFile(FonFile(k)); Image1.Canvas.Ellipse(x-5,y-5,x+5,y+5); end; end;
немножко смущает выбор по кодам (39, 40...). может, это я дура, но коды всех клавиш не помню. напиши лучше vk_down, vk_up... имхо, будет лучше читаться. или у твоего варианта есть преимущества, просто я не знаю?
Таймеров, я так понимаю, уже сам понапихал, на вопрос ("Что там нащет Таймера?") можно не отвечать?
вообще игра порадовала... воспоминания из раннего-раннего детства
--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует. На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!