Автор: Spinne 6.03.2004 18:13
Загадали мне тут такую задачку, для движения обьекта мышью. Сделать то я ёё сделал, но вот какая проблема - цикл работает слишком медленно, и при быстром движении мыши остаются следы. Если двигать медленно, но всё окей.
Вопрос вот в чём - можно-ли как-то ускорить цикл ? Или переделать его как-то по-другому ?
Код
program lab42;
uses mouse,graph;
var d,m,x,y:integer;
c,f,e:boolean;
procedure nlo(x,y:integer);
begin
fillellipse(x,y,50,20);
Ellipse (x,y-4,190,357,50,20);
Line (x+10,y-12,x+20,y-40);
Line (x-10,y-12,x-20,y-40);
Circle (x+10,y-12,2);
Circle (x-10,y-12,2);
line(x-10,y+20,x-20,y+40);
line(x+10,y+20,x+20,y+40);
line(x-25,y+40,x-15,y+40);
line(x+15,y+40,x+25,y+40);
end;
begin
d:=0;
initgraph(d,m,'');
getmousexy(x,y,c,f,e);
setxrange(50,580);
setyrangle(40,430);
repeat
setcolor(0);
nlo(x,y);
getmousexy(x,y,c,f,e);
setcolor(7);
nlo(x,y);
until c=true
end.
Автор: SKVOZNJAK 7.03.2004 19:12
Запустить не могу - неизветно происхождение модуля мышки. Посему, придётся тебе ускорять прогу самому Можешь попробовать не рисовать картинку заново, а скопировать область экрана, в graph есть для этого getimage putimage. Используемый модуль мышки также может хреново совмещаться с хрюшей.
Автор: Spinne 10.03.2004 0:20
Вот немного изменил код, теперь следов не остаётся, но моргать стало еще круче. И почему-то при разворачивания окна на полный экран русский шрифт отображается иероглифами, а в маленьком окне всё нормально.
Код
program lab42;
uses graph, mouse, crt;
var d,m,x,y:integer;
c,f,e:boolean;
g:char;
procedure nlo(x,y:integer);
begin
fillellipse(x,y,50,20);
Ellipse (x,y-4,190,357,50,20);
Line (x+10,y-12,x+20,y-40);
Line (x-10,y-12,x-20,y-40);
Circle (x+10,y-12,2);
Circle (x-10,y-12,2);
line(x-10,y+20,x-20,y+40);
line(x+10,y+20,x+20,y+40);
line(x-25,y+40,x-15,y+40);
line(x+15,y+40,x+25,y+40);
end;
begin
repeat
TextMode(2);
writeln('Данная программа выводит на экран НЛО');
writeln('Управление осуществляется мышкой');
writeln('Для выхода из программы нажмите левую клавишу мыши');
writeln('Для продолжения нажмите Enter');
g:=readkey;
until g=#13;
d:=0;
initgraph(d,m,'');
getmousexy(x,y,c,f,e);
setxrange(50,580);
setyrangle(40,430);
repeat
getmousexy(x,y,c,f,e);
setcolor(7);
nlo(x,y);
SetBkColor(0);
ClearDevice;
until c=true
end.
Автор: Spinne 10.03.2004 0:24
Кстати, совсем забыл - уважаемый ZKVOZNJAK, если есть желание, могу выслать mouse.tpu и mouse.pas.
Автор: SKVOZNJAK 11.03.2004 14:34
Оно у тебя просто обязано моргать По другому и быть не должно. Комп изначально работает рывками, а у тебя всё плавно. Соотношение времени отведённое кадру статическому и кадру рисующемуся должно быть в пользу первого. После того как картинка нарисуется - поставь паузу. И спасибо за модуль ;)