Другие языки программирования и технологии
PascalABC.NET Графика, движение объекта после нажатия клавиши
Создаю программу, а надо так чтоб после нажатия на клавишу объект продолжал движение , а у мен я выходит так что нажал клавишу он сдвинулс я отпустил -остановился....USESCRT,ABCObjects, GraphABC ; var c:color; y,z,x,i: Integer; e: RectangleABC; w: char; procedure q; Begin SetWindowSize(900,600); {Размер окна} CenterWindow; {Окно в центре} c:=rgb(51,76,191); {Цвет - синий} ClearWindow(c); {Заливка окна} y:=100; i:=30; z:=15; x:=600; y:=300; x:=450; end; procedure w1; begin repeat e:= new RectangleABC(x,y,30,30,clred); Sleep(40); w := ReadKey; case w of 'w' : begin repeat y:=y-1; until 2<3 end; 's' : begin y:=y+1;end; 'a' : begin x:=x-1;end; 'd' : begin x:=x+1;end; end; e.Destroy; until (y<=0) or (y>=600) or (x<=0) or(x>=900); end; begin q;w1; End. Вот чатсь программы - сильно не сокращал. но проверил -запускается....-управление. незнаю почему но для того чтоб объект стал двигаться надо сменить раскладку клавиатуры один или несколько раз... клавиши -w -вперед, s-,назад a-влево,d-вправо,
Набросал тут примерчик - работает, проверено
Старайтесь не использовать CRT с Graph
speed - скорость перемещения в пикселях
Управление
ESC - выход
WASD и стрелки на нампаде - стандартные перемещения
QEZC и Home,PgUp,End,PgDn - диагонали
X и 5 на нампаде - стоп
Для простоты очищаю окно при стирании старого - это просто для примера,
лучше делать иначе, границы экрана не проверяются - сделаете сами.
uses GraphABC, Timers;
var
x,y: integer;
dx: integer;
dy: integer;
speed: integer;
procedure TimerProc;
begin
ClearWindow;
Inc(x, dx); Inc(y, dy);
Rectangle(x, y, x+30, y+30);
end;
procedure KeyDown(Key: integer);
begin
case Key of
VK_Escape: Halt;
VK_Left, VK_A: begin dx:=-speed; dy:=0; end;
VK_Right, VK_D: begin dx:=+speed; dy:=0; end;
VK_Up,VK_W: begin dy:=-speed; dx:=0; end;
VK_Down, VK_S: begin dy:=+speed; dx:=0; end;
VK_Home, VK_Q: begin dy:=-speed; dx:=-speed; end;
VK_End, VK_Z : begin dy:=+speed; dx:=-speed; end;
VK_PageUp, VK_E: begin dy:=-speed; dx:=+speed; end;
VK_PageDown, VK_C: begin dy:=+speed; dx:=+speed; end;
12, VK_X: begin dx:=0; dy:=0; end;
end;
end;
begin
SetWindowSize(900,600);
CenterWindow;
ClearWindow(rgb(51,76,191));
x:=600;
y:=300;
speed:= 4;
{Вешаем обработчик событий от кнопок}
OnKeyDown := KeyDown;
{Вешаем на таймер отрисовку}
var objTimer := new Timer(100, TimerProc);
objTimer.Start;
end.
Старайтесь не использовать CRT с Graph
speed - скорость перемещения в пикселях
Управление
ESC - выход
WASD и стрелки на нампаде - стандартные перемещения
QEZC и Home,PgUp,End,PgDn - диагонали
X и 5 на нампаде - стоп
Для простоты очищаю окно при стирании старого - это просто для примера,
лучше делать иначе, границы экрана не проверяются - сделаете сами.
uses GraphABC, Timers;
var
x,y: integer;
dx: integer;
dy: integer;
speed: integer;
procedure TimerProc;
begin
ClearWindow;
Inc(x, dx); Inc(y, dy);
Rectangle(x, y, x+30, y+30);
end;
procedure KeyDown(Key: integer);
begin
case Key of
VK_Escape: Halt;
VK_Left, VK_A: begin dx:=-speed; dy:=0; end;
VK_Right, VK_D: begin dx:=+speed; dy:=0; end;
VK_Up,VK_W: begin dy:=-speed; dx:=0; end;
VK_Down, VK_S: begin dy:=+speed; dx:=0; end;
VK_Home, VK_Q: begin dy:=-speed; dx:=-speed; end;
VK_End, VK_Z : begin dy:=+speed; dx:=-speed; end;
VK_PageUp, VK_E: begin dy:=-speed; dx:=+speed; end;
VK_PageDown, VK_C: begin dy:=+speed; dx:=+speed; end;
12, VK_X: begin dx:=0; dy:=0; end;
end;
end;
begin
SetWindowSize(900,600);
CenterWindow;
ClearWindow(rgb(51,76,191));
x:=600;
y:=300;
speed:= 4;
{Вешаем обработчик событий от кнопок}
OnKeyDown := KeyDown;
{Вешаем на таймер отрисовку}
var objTimer := new Timer(100, TimerProc);
objTimer.Start;
end.
Андрей Медведев
а можешь дать код простой проги которая двигает круг влево-вправо кнопками G J ?
чтобы объект ПРОДОЛЖАЛ движение, надо НАУЧИТЬ его ПРОДОЛЖАТЬ ДВИЖЕНИЕ. Трение не? Не слышал?
Посиди подумай (минут 10), придумай сам, так лучше будет.
Посиди подумай (минут 10), придумай сам, так лучше будет.
Как я понял, под нет пишешь.
Сделай таймер, который будет двигать объект и две клавиши
одна будет запускать другая останавливать.
А так выходит что у тебя действие один раз всего выполняется
------------------
Чтобы продолжал движение есть объект таймер http://msdn.microsoft.com/en-us/library/2x96zfy7.aspx#Y900
Сделай таймер, который будет двигать объект и две клавиши
одна будет запускать другая останавливать.
А так выходит что у тебя действие один раз всего выполняется
------------------
Чтобы продолжал движение есть объект таймер http://msdn.microsoft.com/en-us/library/2x96zfy7.aspx#Y900
Похожие вопросы
- PascalABC.NET Графика и анимация простейший уровень, не хочет выполняться процедура, (помогите новичку)
- Как создать компьютерного червя на PascalABC.NET и на других языках программирования или опишите структуру червя.
- Как сделать чтобы змейка продолжала путь без нажатия клавиш? C++
- Существует ли программа для перемещения курсора нажатием клавиши
- чем отличается Delphi 7 от PascalABC.net ???
- Хочу задать вопрос по множествам PascalABC.NET
- pascalabc.net все функцеи Напишите пожалуйста все функции Пример sqrt(x )
- Задача на PascalABC.NET. Помогите с решением, очень прошу!
- Нужна очень задача решеная по паскалю! PascalABC.NET
- Где ошибка в программе PascalABC.net