Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Движение обьекта мышкой

Автор: 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

Запустить не могу - неизветно происхождение модуля мышки. Посему, придётся тебе ускорять прогу самому smile.gif Можешь попробовать не рисовать картинку заново, а скопировать область экрана, в 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

Оно у тебя просто обязано моргать smile.gif По другому и быть не должно. Комп изначально работает рывками, а у тебя всё плавно. Соотношение времени отведённое кадру статическому и кадру рисующемуся должно быть в пользу первого. После того как картинка нарисуется - поставь паузу. И спасибо за модуль ;)