Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2013, 13:03   #1
Katerina_K
Пользователь
 
Регистрация: 11.05.2013
Сообщений: 19
Вопрос Рисование методом базовой точки в делфи

Здравствуйте!Подскажите,пожалуйста. Есть задание нарисовать движущийся объект.Хочу нарисовать меняющего некоторые элементы снеговика в движении,как будто бы танцует.Вот только ,отчетливо не видно что он меняет свои движения.Подскажите,что не так)

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   x,y,k: Integer;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if x<form1.Width then
begin
form1.Refresh;
x:=x+8;
Canvas.Pen.Color:=claqua;
Canvas.Pen.Width:=3;
Canvas.Brush.Color:=claqua;
canvas.Ellipse(x+25*k,y+32*k,x+35*k,y+42*k);  //верхний круг
canvas.Ellipse(x+20*k,y+40*k,x+40*k,y+60*k);   //средний
canvas.Ellipse(x+15*k,y+58*k,x+45*k,y+88*k); //нижний


Canvas.Brush.Color:=clblack;
canvas.Ellipse(x+27*k,y+34*k,x+29*k,y+36*k);//глаза
canvas.Ellipse(x+31*k,y+34*k,x+33*k,y+36*k);

canvas.Pen.Color:=clRed;   //нос
canvas.Brush.Color:=clRed;
canvas.Polygon([point(x+30*k,y+37*k),point(x+22*k,y+38*k),point(x+30*k,y+39*k)]);



Canvas.Pen.Width:=5;
canvas.Pen.Color:=clblack;    //руки подняты
canvas.MoveTo(x+25*k,y+45*k);
canvas.LineTo(x+10*k,y+35*k);
canvas.MoveTo(x+35*k,y+45*k);
canvas.LineTo(x+50*k,y+35*k);

if x<form1.Width then
begin
form1.Refresh;
x:=x+8;

form1.Refresh;

Canvas.Pen.Color:=claqua;
Canvas.Pen.Width:=3;
Canvas.Brush.Color:=claqua;
canvas.Ellipse(x+25*k,y+32*k,x+35*k,y+42*k);  //верхний круг
canvas.Ellipse(x+20*k,y+40*k,x+40*k,y+60*k);   //средний 
canvas.Ellipse(x+15*k,y+58*k,x+45*k,y+88*k); //нижний


Canvas.Brush.Color:=clblack;
canvas.Ellipse(x+27*k,y+34*k,x+29*k,y+36*k);//глаза
canvas.Ellipse(x+31*k,y+34*k,x+33*k,y+36*k);

Canvas.Pen.Width:=5;
canvas.Pen.Color:=clblack;    //нос в другую сторону
canvas.MoveTo(x+25*k,y+45*k);
canvas.LineTo(x+10*k,y+55*k);
canvas.MoveTo(x+35*k,y+45*k);
canvas.LineTo(x+50*k,y+55*k);


canvas.Pen.Color:=clRed;   //руки опущены
canvas.Brush.Color:=clRed;
canvas.Polygon([point(x+30*k,y+37*k),point(x+38*k,y+38*k),point(x+30*k,y+39*k)]);

end;

end
else
x:=0;
end;


procedure TForm1.FormActivate(Sender: TObject);
begin
x:=0;
y:=-180;
k:=10;
end;

end.
Katerina_K вне форума Ответить с цитированием
Старый 23.10.2013, 15:02   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так устроит?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x, y, k: Integer;
  UpHandsTickCount: integer;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
const CountTickOnePosition = 8;
begin
  form1.Refresh;
  x := x + 8;
  if x > (form1.Width - 250) then x := 0;

  inc(UpHandsTickCount);
  if UpHandsTickCount > 2 * CountTickOnePosition then UpHandsTickCount := 1;


  if UpHandsTickCount <= CountTickOnePosition then
  begin
    Canvas.Pen.Color := claqua;
    Canvas.Pen.Width := 3;
    Canvas.Brush.Color := claqua;
    canvas.Ellipse(x + 25 * k, y + 32 * k, x + 35 * k, y + 42 * k); //верхний круг
    canvas.Ellipse(x + 20 * k, y + 40 * k, x + 40 * k, y + 60 * k); //средний
    canvas.Ellipse(x + 15 * k, y + 58 * k, x + 45 * k, y + 88 * k); //нижний


    Canvas.Brush.Color := clblack;
    canvas.Ellipse(x + 27 * k, y + 34 * k, x + 29 * k, y + 36 * k); //глаза
    canvas.Ellipse(x + 31 * k, y + 34 * k, x + 33 * k, y + 36 * k);

    canvas.Pen.Color := clRed; //нос
    canvas.Brush.Color := clRed;
    canvas.Polygon([point(x + 30 * k, y + 37 * k), point(x + 22 * k, y + 38 * k), point(x + 30 * k, y + 39 * k)]);



    Canvas.Pen.Width := 5;
    canvas.Pen.Color := clblack; //руки подняты
    canvas.MoveTo(x + 25 * k, y + 45 * k);
    canvas.LineTo(x + 10 * k, y + 35 * k);
    canvas.MoveTo(x + 35 * k, y + 45 * k);
    canvas.LineTo(x + 50 * k, y + 35 * k);
  end
  else
  begin

    Canvas.Pen.Color := claqua;
    Canvas.Pen.Width := 3;
    Canvas.Brush.Color := claqua;
    canvas.Ellipse(x + 25 * k, y + 32 * k, x + 35 * k, y + 42 * k); //верхний круг
    canvas.Ellipse(x + 20 * k, y + 40 * k, x + 40 * k, y + 60 * k); //средний
    canvas.Ellipse(x + 15 * k, y + 58 * k, x + 45 * k, y + 88 * k); //нижний


    Canvas.Brush.Color := clblack;
    canvas.Ellipse(x + 27 * k, y + 34 * k, x + 29 * k, y + 36 * k); //глаза
    canvas.Ellipse(x + 31 * k, y + 34 * k, x + 33 * k, y + 36 * k);

    Canvas.Pen.Width := 5;
    canvas.Pen.Color := clblack; //нос в другую сторону
    canvas.MoveTo(x + 25 * k, y + 45 * k);
    canvas.LineTo(x + 10 * k, y + 55 * k);
    canvas.MoveTo(x + 35 * k, y + 45 * k);
    canvas.LineTo(x + 50 * k, y + 55 * k);


    canvas.Pen.Color := clRed; //руки опущены
    canvas.Brush.Color := clRed;
    canvas.Polygon([point(x + 30 * k, y + 37 * k), point(x + 38 * k, y + 38 * k), point(x + 30 * k, y + 39 * k)]);

  end;

end;


procedure TForm1.FormActivate(Sender: TObject);
begin
  x := 0;
  y := -180;
  k := 10;
  UpHandsTickCount := 0;
end;

end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.10.2013, 09:22   #3
Katerina_K
Пользователь
 
Регистрация: 11.05.2013
Сообщений: 19
По умолчанию

Спасибо большое!
Katerina_K вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компьютерная графика. Алгоритм построения окружности методом средней точки aiceman Фриланс 1 23.04.2013 14:13
уравнение x=f(x) методом касательный и методом хорд в делфи electrovolk Помощь студентам 0 30.12.2010 00:06
Рисование и перемещение точки на экране Aleks2215 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 09.12.2010 20:51
Рисование картинки методом Draw Nazar1994 Общие вопросы Delphi 2 21.11.2009 01:57
Рисование на форме. Движение точки. JDRaveN Общие вопросы Delphi 9 15.06.2009 18:03