![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Собственно сабж. Использовать нужно элемент Canvas.
Даже не представляю как это можно выполнить. Помогите пожалуйста. Последний раз редактировалось fuzo, 11.11.2010 в 17:06. |
|
#2
|
||||
|
||||
|
Что-бы это заработало, вам надо сделать простейшую трансформацию. Скажем линия в координатах 50,50,60,100 должна быть перемещена в новые координаты 50,50,90,100 за 10 шагов. Вы разбиваете траекторию перемещения на 10 шагов, для каждого из шагов получаете новое положение линии. Последовательно выводите линию в новых координатах убирая ее из старых.
Вот когда вы сделаете это, тогда уже все остальное сделать будет элементарно. Последний раз редактировалось Страдалецъ, 11.11.2010 в 16:35. |
|
#3
|
|||
|
|||
|
а как правильно задать эти кординаты для конваса?
какой командой Последний раз редактировалось fuzo, 11.11.2010 в 16:57. |
|
#4
|
||||
|
||||
|
Код:
Рисование на канвасе? Canvas.MoveTo - переместить по нужным координатам. Canvas.LieTo - нарисовать линию. |
|
#5
|
|||
|
|||
|
вот с горем пополам нарисовал этого человечка
Код:
Canvas.Brush.Color:=clRed; Canvas.Ellipse(15,15,50,50); Canvas.MoveTo(30,50); Canvas.LineTo(30,130); Canvas.MoveTo(30,130); Canvas.LineTo(20,170); Canvas.MoveTo(30,130); Canvas.LineTo(40,170); Canvas.MoveTo(10,80); Canvas.LineTo(50,80); Но как его заставить двигаться без понятия ![]() |
|
#6
|
||||
|
||||
|
посмотри вот этот код, в качестве примера:
man_walk.zip |
|
#7
|
|||
|
|||
|
что то этот пример не запускается, а в коде не очень понятен ход работы..
|
|
#8
|
||||
|
||||
|
Цитата:
Цитата:
Код:
MoveTo(X1, 50); // рисуется туловище LineTo(X1, 100); переменная Х2 определяет положение рук и ног относительно туловища: Код:
//рисуются руки: MoveTo(X1 - X2, 100); //левая LineTo(X1, 50); LineTo(X1 + X2, 100); //правая, аналогично с ногами Последний раз редактировалось ryderx34, 13.11.2010 в 12:21. |
|
#9
|
|||
|
|||
|
создаю новый проект копирую код, добавляю таймер. Но почемуто на форме ничег оне происходит
![]() Сделал по своему, пока без движения ног только руки. Но почемуто цикл не выполняется. В чём ошибка? ( вернее он выполняется но только в 2 шага, а затем по кругу с добавлением шага не идёт, а просто повторяетя). Код:
procedure TForm1.Timer2Timer(Sender: TObject); var i,n,h:integer; begin with PaintBox1 do begin h:=0; n:=1; for i:=1 to n do h:=h+1; n:=n+1; Canvas.Brush.Color:=clRed; Canvas.Ellipse(15+h,15,50+h,50); Canvas.MoveTo(30+h,50); Canvas.LineTo(30+h,130); Canvas.MoveTo(30+h,130); Canvas.LineTo(20+h,170); Canvas.MoveTo(30+h,130); Canvas.LineTo(40+h,170); Canvas.MoveTo(10+h,80); Canvas.LineTo(50+h,80); i:=2; Sleep(400); refresh; i:=3; Canvas.Brush.Color:=clRed; Canvas.Ellipse(25+h,15,60+h,50); Canvas.MoveTo(40+h,50); Canvas.LineTo(40+h,130); Canvas.MoveTo(40+h,130); Canvas.LineTo(30+h,170); Canvas.MoveTo(40+h,130); Canvas.LineTo(50+h,170); Canvas.MoveTo(40+h,80); Canvas.LineTo(20+h,100); Canvas.MoveTo(40+h,80); Canvas.LineTo(60+h,100); Sleep(400); refresh; end; end; |
|
#10
|
||||
|
||||
|
Цитата:
Вот я сделал всё в виде одной процедуры, так будет проще: Код:
procedure WalkingMan(Canvas: TCanvas; Width: Integer; var X1, X2, I: Integer);
begin
if X1 < Width then
X1 := X1 + 20
else
X1 := 20;
if I < 7 then
Inc(I)
else
I := 0;
case I of
0:X2 := 20;
1:X2 := 15;
2:X2 := 10;
3:X2 := 5;
4:X2 := 0;
5:X2 := 5;
6:X2 := 10;
7:X2 := 15;
end;
with Canvas do
begin
FillRect(Canvas.ClipRect);
Ellipse(X1 - 20, 10, X1 + 20, 50);
MoveTo(X1, 50);
LineTo(X1, 100);
MoveTo(X1 - X2, 100);
LineTo(X1, 50);
LineTo(X1 + X2, 100);
MoveTo(X1 - X2, 150);
LineTo(X1, 100);
LineTo(X1 + X2, 150);
end;
end;Код:
var Form1: TForm1; A, B, C: Integer; Код:
procedure TForm1.Timer1Timer(Sender: TObject); begin WalkingMan(Form1.Canvas, Form1.Width, A, B, C); end; Последний раз редактировалось ryderx34, 13.11.2010 в 15:43. |
|
#11
|
|||
|
|||
|
Всё СПАСИБО. Разобрался
![]() |