1. Мегаконкурс в апреле "Приведи друзей на codeby". Дарим деньги, подписку на журнал хакер и выдаем статус "Paid Access". Подробнее ...

    Скрыть объявление

анимация в Delphi 7

Тема в разделе "Delphi - Multimedia, Графика, Игры", создана пользователем ignessa, 12 июн 2010.

Наш партнер Genesis Hackspace
  1. ignessa

    ignessa Гость

    Помогите,пожалуйста!!Нужно полное описание действий при создании анимации на языке программирования в Delphi 7.
     
  2. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    665
    Симпатии:
    0
    Какая конкретнно анимация?
    Вывод картинки? Полет самолета... Езда машины ...........................

    Добавлено :
    Незаметил <_< ,
    а отрисовку рыбок и фона в ручную делать или брать с рисунка(так красивей будет), и какой размер анимации, и вовесь экран или нет?
     
  3. ignessa

    ignessa Гость

    анимацию нужно вбивать вручную...мне как раз и нужен весь текст построения анимации полностью...во весь экран желательно....можно машинку,можно рыбок,можно божью коровку...все равно
     
  4. ignessa

    ignessa Гость

    я вот сделала божью коровку,но что-то не получается.наверно с расчетами напутала...посмотрите,пожалуйста:



    unit unit1;
    interface
    uses
    windows,messages sys units,classes,graphics,controls,forms,dialogs;
    type
    TForm1=class(TForm)
    private(private declarations)
    public(public declarations)
    end;
    var
    Form1:TForm;
    implementation
    ($r*.DFM)
    procedure insect(x,y integer);
    begin
    with Form1.canvas do
    begin
    pen.color:=rgb(3,3,3);
    тело
    pen width:=1;
    brush.color:=rgb(300,3,3);
    pie(x-40,y-30,x+40,y+30,x+40,y,x-40,y);
    голова
    brush.color:=clblack;
    pie(x+40,y-10,x-50,y+9,x+50,y-5,x+40,y-5);

    brush.color:=rgb(3,3,3);
    ellipse(x-7,y-17,x+7,y+17);

    усик
    pen.color:rgb(66,0,66);
    moveto(x+37,y-7);
    lineto(x+50,y-15);
    brush.color:=rgb(3,3,3);
    ellipse(x+40,y-15,x+45,y-9);
    end;
    end;

    procedure TForm1.Formpaint(sender:Tobject);
    begin
    y:=round(clientheight/2);
    x:=100;
    ветка
    canvas.pen.color:=rgb(3,130,3);
    canvas.pen.width:=12
    canvas.moveto(0,y+17);
    canvas.lineto(clientwidth,y+7);
    Form1.color:=clskyblue;
    canvas.pen.mode:=pmnotxor;
    insect(x,y);
    end;
    procedure TForm1.timer1timer(sender:Tobject);
    begin
    insect(x,y);
    x:=x+22
    insect(x,y);
    end;
    end;
     
  5. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Мда... Самое сложное, это просчитать координаты... В случае с вашей божьей коровкой, советую: взять лист бумаги в клеточку, разметить по полям пиклесы,
    нарисовать коровку, а уж потом переносить в код... муторное доложу я вам занятьице... ;)
    Да, нужно еще учесть, что перед рисованием "новой коровки", нужно "старую" сначала закрасить цветом фона...

    Вот, (если Вас устроит что нибудь попроще) код анимации плывущего кораблика
    Код (Delphi):
    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 FormCreate(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;
    x, y: integer; // координаты опорной точки
    implementation

    {$R *.dfm}
    procedure Insert(x, y: integer);
    begin
    // контук кораблика
    Form1.Canvas.MoveTo(x, y);
    Form1.Canvas.LineTo(x, y - 10);
    Form1.Canvas.LineTo(x + 50, y - 10);
    Form1.Canvas.LineTo(x + 55, y - 15);
    Form1.Canvas.LineTo(x + 85, y - 15);
    Form1.Canvas.LineTo(x + 70, y);
    Form1.Canvas.LineTo(x, y);
    // палубные надстройки
    Form1.Canvas.MoveTo(x + 15, y - 10);
    Form1.Canvas.LineTo(x + 20, y - 15);
    Form1.Canvas.LineTo(x + 20, y - 20);
    Form1.Canvas.LineTo(x + 65, y - 20);
    Form1.Canvas.LineTo(x + 65, y - 15);
    Form1.Canvas.MoveTo(x + 25, y - 15);
    Form1.Canvas.LineTo(x + 45, y - 15);
    Form1.Canvas.Rectangle(x + 40, y - 20, x + 55, y - 25);
    // труба
    Form1.Canvas.Rectangle(x + 35, y - 20, x + 40, y - 35);
    // иллюминаторы
    Form1.Canvas.Ellipse(x + 55, y - 10, x + 60, y - 5);
    Form1.Canvas.Ellipse(x + 65, y - 10, x + 70, y - 5);
    // мачта
    Form1.Canvas.MoveTo(x + 50, y - 25);
    Form1.Canvas.LineTo(x + 50, y - 60{50});
    // флажок на мачте
    Form1.Canvas.LineTo(x + 30, y - 60);
    Form1.Canvas.LineTo(x + 40, y - 58);
    Form1.Canvas.LineTo(x + 30, y - 55);
    Form1.Canvas.LineTo(x + 50, y - 55);
    // тросы
    Form1.Canvas.MoveTo(x + 85, y - 15);
    Form1.Canvas.LineTo(x + 50, y - 50);
    Form1.Canvas.LineTo(x, y - 10);
    end;


    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    // Стираем старый кораблик
    Form1.Canvas.Pen.Color := Form1.Color;
    Insert(x,y);

    // Смещаем координаты опорной точки
    if (Form1.ClientWidth > x) then
    Inc(x,5)
    else
    begin
    // Если вышли за границы экрана,
    // назначаем новые начальные координаты
    x := 0;
    y := Random(100) + 100;
    end;

    // Рисуем новый кораблик
    Form1.Canvas.Pen.Color := clYellow;
    Insert(x,y);
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Form1.Width := 300;
    Form1.Height := 300;
    x := 0;
    y := Random(100) + 100;
    Form1.Color := clNavy;
    Timer1.Interval := 50;
    end;

    end.
     
  6. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    665
    Симпатии:
    0
    Извените что не писал, просто времени небыло(сдавал экзамены).
    Недавно делал на Паскале анимацию загрузки винды(бег. полоса), заначок и полоска там отрисововались в ручную.
    Вот для паскаля
     

    Вложения:

    • WIN_ANIM.PAS
      Размер файла:
      5,7 КБ
      Просмотров:
      42
  7. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    665
    Симпатии:
    0
    Вот отрисовуется только ЛОГОТИП, На Делфи
    Код (Delphi):
    procedure DrawArc(ACanvas: TCanvas; x,y,start_angle,end_angle,rx,ry:integer);
    var s_a,e_a:real;
    begin
    s_a:=(start_angle-90)*pi/180;
    e_a:=(end_angle-270)*pi/180;
    ACanvas.Arc(x-rx,y-ry,x+rx,y+ry,x-round(sin(s_a)*rx),y-round(cos(s_a)*ry),x+round(sin(e_a)*rx),y+round(cos(e_a)*ry));
    end;

    procedure drawwin(Canvas:TCanvas; x,y:integer);
    var r,h,r2:integer;
    i,k:integer;
    begin
    r:=100;
    h:=100;
    r2:=50;
    //////////////////fon
    with canvas do
    begin

    ///////////////red
    pen.Width:=3;
    for k:=0 to h do
    for i:=1 to 16 do
    begin
    case i of
    0..3: pen.Color:=rgb(165,0,0);
    4..6: pen.Color:=rgb(255,0,0);
    7..9: pen.Color:=rgb(255,66,0);
    10..12: pen.Color:=rgb(255,123,0);
    13..15: pen.Color:=rgb(255,66,0);
    end;
    DrawArc(canvas,r-(((h-k) div 3))+h div 3+x - r+1 -r2,h+r-k+y-1-r -r2,45+i*5,45+(i+1)*5,r,r);

    end;

    pen.Width:=3;
    for k:=h-2 to h do
    for i:=1 to 16 do
    begin
    case i of
    0..3: pen.Color:=rgb(165,0,0);
    4..6: pen.Color:=rgb(255,0,0);
    7..9: pen.Color:=rgb(255,66,0);
    10..12: pen.Color:=rgb(255,123,0);
    13..15: pen.Color:=rgb(255,66,0);
    end;
    DrawArc(canvas,r-(((h-k) div 3))+h div 3+x - r+1 -r2,h+r-k+y-1-r -r2,45+i*5,45+(i+1)*5,r,r);

    end;
    /////////////////////////////

    ///////////////blue
    pen.Width:=3;
    for k:=0 to h do
    for i:=1 to 16 do
    begin
    case i of
    0..3: pen.Color:=rgb(0,0,165);
    4..6: pen.Color:=rgb(0,0,255);
    7..9: pen.Color:=rgb(0,66,255);
    10..12: pen.Color:=rgb(0,123,255);
    13..15: pen.Color:=rgb(0,66,255);
    end;
    DrawArc(canvas,r-(((h-k) div 3))+x-r-r2,2*h+r+r div 10-k+y-r-r2,45+i*5,45+(i+1)*5,r,r);
    end;

    pen.Width:=1;
    for k:=h-2 to h do
    for i:=1 to 16 do
    begin
    case i of
    0..3: pen.Color:=rgb(0,0,165);
    4..6: pen.Color:=rgb(0,0,255);
    7..9: pen.Color:=rgb(0,66,255);
    10..12: pen.Color:=rgb(0,123,255);
    13..15: pen.Color:=rgb(0,66,255);
    end;
    DrawArc(canvas,r-(((h-k) div 3))+x-r-r2,2*h+r+r div 10-k+y-r-r2,45+i*5,45+(i+1)*5,r,r);
    end;
    /////////////////////////////

    ///////////////green
    pen.Width:=3;
    for k:=h downto 0 do
    for i:=1 to 16 do
    begin
    case i of
    0..3: pen.Color:=rgb(0,115,0);
    4..6: pen.Color:=rgb(0,165,0);
    7..9: pen.Color:=rgb(0,255,0);
    10..12: pen.Color:=rgb(82,255,82);
    13..15: pen.Color:=rgb(0,255,0);
    end;
    DrawArc(canvas,r+(((h-k) div 3))+r+h div 3+x-r - r div 4-5-r2,k-r div 2+y+r-r+r div 10+2-r2,270-45+i*5,270-45+(i+1)*5,r,r);
    end;

    pen.Width:=1;
    for k:=h-2 to h do
    for i:=1 to 16 do
    begin
    case i of
    0..3: pen.Color:=rgb(0,115,0);
    4..6: pen.Color:=rgb(0,165,0);
    7..9: pen.Color:=rgb(0,255,0);
    10..12: pen.Color:=rgb(82,255,82);
    13..15: pen.Color:=rgb(0,255,0);
    end;
    DrawArc(canvas,r+(((h-k) div 3))+r+h div 3+x-r - r div 4-5-r2,k-r div 2+y+r-r+r div 10+2-r2,270-45+i*5,270-45+(i+1)*5,r,r);
    end;
    /////////////////////////////

    ///////////////yellow
    pen.Width:=3;
    for k:=0 to h do
    for i:=1 to 16 do
    begin
    case i of
    0..3: pen.Color:=rgb(165,82,0);
    4..6: pen.Color:=rgb(255,189,0);
    7..9: pen.Color:=rgb(255,255,0);
    10..12: pen.Color:=rgb(255,255,82);
    13..15: pen.Color:=rgb(255,255,0);
    end;
    DrawArc(canvas,r+(((h-k) div 3))+r+h div 3+x-r + r div 10-3-r2,k-r div 2+y+r-r+r div 10-r-10-r2,270-45+i*5,270-45+(i+1)*5,r,r);

    end;

    pen.Width:=1;
    for k:=h-2 to h do
    for i:=1 to 16 do
    begin
    case i of
    0..3: pen.Color:=rgb(165,82,0);
    4..6: pen.Color:=rgb(255,189,0);
    7..9: pen.Color:=rgb(255,255,0);
    10..12: pen.Color:=rgb(255,255,82);
    13..15: pen.Color:=rgb(255,255,0);
    end;
    DrawArc(canvas,r+(((h-k) div 3))+r+h div 3+x-r + r div 10-3-r2,k-r div 2+y+r-r+r div 10-r-10-r2,270-45+i*5,270-45+(i+1)*5,r,r);
    end;
    end;
    /////////////////////////////
    end;




    procedure TForm6.Button1Click(Sender: TObject);
    begin
    drawwin(image1.Canvas, 200,200);
    ///центр задаётся примерно
    end;
     
  8. YarlikovaE

    YarlikovaE Гость

    Шикарный логотип!
     
  9. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    665
    Симпатии:
    0
    Я знаю, мне за него 12 из 12 поставили(это было сделано на паскале, не на делфи), фишка в том что 256 цветов вместо 16.
     
  10. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    665
    Симпатии:
    0
    Тут есть редактор, с выводом кода.
     
  11. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.433
    Симпатии:
    31
    можно мне картинкой? ну т.е. скрином.
     
  12. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    665
    Симпатии:
    0
    Можно ;) :facepalm:
     

    Вложения:

    • анимация в Delphi 7
      Untitled_2.jpg
      Размер файла:
      82,5 КБ
      Просмотров:
      113
  13. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.433
    Симпатии:
    31
    спасибо) Просто было очень инетерсно что там. Но смотреть в кодом - никакого желания, прости=) Действительно классно)
     
  14. Бота

    Бота New Member

    Регистрация:
    7 дек 2013
    Сообщения:
    1
    Симпатии:
    0
    Помогите пожалуйста... мне Нужно полное описание действий при создании анимации на языке программирования в Delphi 7 полет самолета...
     
  15. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Это можно делать 128-ю способами.
    Уточните какие темы фигурируют в задании? Что главное? рисование на канве, расчет траекторий движения или что?... может у Вас тема по OpenGL? :)
     
Загрузка...

Поделиться этой страницей