Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 05.12.2014
Сообщений: 50
1

Нужно сделать анимацию движения нарисованного стула

19.01.2016, 13:16. Просмотров 1247. Ответов 3
Метки нет (Все метки)

Здравствуйте! Я написал программу, рисующую стул, и нужно сделать так, чтобы этот стул просто перемещался по форме слева направо. Я не знаю, как сделать эту анимацию. Собственно, вот сама программа:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
with form1.Canvas do
begin
pen.Color:=clBlack;
 
MoveTo(100,300); //основание
LineTo(150,250);
LineTo(250,250);
LineTo(200,300);
LineTo(100,300);
 
MoveTo(150,250); //спинка
LineTo(150,150);
LineTo(250,150);
LineTo(250,250);
LineTo(150,250);
 
MoveTo(140,300); //1 ножка
LineTo(140,350);
LineTo(150,350);
LineTo(160,340);
LineTo(160,300);
MoveTo(150,350);
LineTo(150,300);
 
MoveTo(250,250); //2 ножка
LineTo(250,350);
LineTo(240,360);
LineTo(230,360);
LineTo(230,270);
MoveTo(240,360);
LineTo(240,260);
 
MoveTo(210,290); //3 ножка
LineTo(210,390);
LineTo(200,400);
LineTo(190,400);
LineTo(190,300);
MoveTo(200,300);
LineTo(200,400);
 
MoveTo(100,300); //4 ножка
LineTo(100,400);
LineTo(110,400);
LineTo(120,390);
LineTo(120,300);
MoveTo(110,400);
LineTo(110,300);
 
end;
end;
end.
Помогите, пожалуйста!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.01.2016, 13:16
Ответы с готовыми решениями:

Сделать анимацию движения хвоста у мышки
сделать анимацию движения хвоста у мышки,вот есть код

Как сделать анимацию движения по трассе
Всем привет! Очень нужна консультацию по такому вопросу: нужно сделать анимацию движения, скажем,...

Как сделать анимацию движения велосипеда?
Не понимаю как сделать анимацию движения велосипеда. Вот мой проект(без анимации):

Сделать анимацию движения нескольких эллипсов
Нужно сделать анимацию движения 8-10 эллипсов в разных направлениях при загрузке формы с помощью...

3
3315 / 2860 / 774
Регистрация: 29.08.2013
Сообщений: 19,254
Записей в блоге: 1
19.01.2016, 13:45 2
перемещение это просто изменение координат
вместо своих координат вставь переменные и в цикле увеличивай\уменьшай их - тогда твой стул будет двигаться
0
Модератор
61218 / 45886 / 31672
Регистрация: 18.05.2008
Сообщений: 110,502
19.01.2016, 15:38 3
Стул нужно рисовать от одной точки, например координату смыкания спинки и сидения справа принять x,y, а остальные точки определить относительно нее.
По таймеру перемещать точку слева направо, и поочередно рисовать стул цветом фона и черным цветом.
0
586 / 453 / 147
Регистрация: 09.12.2013
Сообщений: 2,386
Записей в блоге: 2
19.01.2016, 16:23 4
Лучший ответ Сообщение было отмечено Tormentor как решение

Решение

Да. Кое-что поясню.

Всё пошагово, для новичков:
Код
type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure DrawMyChair(C: TCanvas; const X: Integer; const Y: Integer); // добавляем сюда вот это, ставим каретку на эту строку и нажимаем Ctrl+Shift+C
  public
    { Public declarations }
  end;
После Ctrl+Shift+C среда сама создаст фрагмент кода и перебросит на него:
Код
procedure TForm1.DrawMyChair(C: TCanvas; const X, Y: Integer);
begin

end;
В переводе: Draw - рисовать, My - мой, Chair - стул. Вот там занимаемся рисованием стула. Только стула. Только рисованием. Только на "C" и только в координатах X, Y.
Как-то так:
Код
procedure TForm1.DrawMyChair(C: TCanvas; const X, Y: Integer);
begin
C.Pen.Color:=clBlack;
C.MoveTo(X, Y);
C.LineTo(X+50,Y-50);
...
end;
Вызывать нужно только в OnPaint окна, предварительно заблокировав холст:
Код
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Lock;
DrawMyChair(Canvas, 100, 300);
Canvas.UnLock;
end;
И вот заготовка работает! Но надо же в разных координатах? Точнее пока только менять (передвигать)?
Ну раз так делаем дальше:
Код
type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    MyChairPos: TPoint; // добавили переменную "позиция стула", как поле класса, глобальную переменную было бы некорректно
    procedure DrawMyChair(C: TCanvas; const X: Integer; const Y: Integer);
  public
    { Public declarations }
  end;
Тогда надо при создании окна заполнять нашу переменную начальным значением, в OnCreate:
Код
procedure TForm1.FormCreate(Sender: TObject);
begin
MyChairPos.X:=100; // перенесли число из OnPaint
MyChairPos.Y:=300; // перенесли число из OnPaint
end;
А в самом OnPaint меняем так:
Код
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Lock;
DrawMyChair(Canvas, MyChairPos.X, MyChairPos.Y);
Canvas.UnLock;
end;
И в таймере просто меняем значения MyChairPos и вызываем Refresh;
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2016, 16:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Возможно-ли сделать анимацию траектории движения в Macromedia Flash?
Возможно-ли сделать анимацию траектории движения в Macromedia Flash? Как сделать,чтобы примитив...

нужно сделать анимацию, всплывающие гипперсылки
есть программа написанная на делфи! в этой программе нужно сделать анимацию, всплывающие...

Сделать анимацию движения "звёзд"
Как здесь сделать анимацию движения "звёзд" влево(да вообще в любую сторону)? uses graphabc; ...

Нужно сделать любую анимацию для кубика Рубика
Вот код uses graph; var x,y,w,h,i,j,x1,y1,x2,c:integer; begin x:=0; initgraph(x,y,'');...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.