анимация в Delphi 7

  • Автор темы ignessa
  • Дата начала
I

ignessa

Гость
#1
Помогите,пожалуйста!!Нужно полное описание действий при создании анимации на языке программирования в Delphi 7.
 
09.11.2009
665
1
23
Киев
#2
Какая конкретнно анимация?
Вывод картинки? Полет самолета... Езда машины ...........................

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

ignessa

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

ignessa

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



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;
 

sinkopa

Well-Known Member
#5
я вот сделала божью коровку,но что-то не получается.наверно с расчетами напутала...
Мда... Самое сложное, это просчитать координаты... В случае с вашей божьей коровкой, советую: взять лист бумаги в клеточку, разметить по полям пиклесы,
нарисовать коровку, а уж потом переносить в код... муторное доложу я вам занятьице... ;)
Да, нужно еще учесть, что перед рисованием "новой коровки", нужно "старую" сначала закрасить цветом фона...

Вот, (если Вас устроит что нибудь попроще) код анимации плывущего кораблика
Код:
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.
 
09.11.2009
665
1
23
Киев
#6
Извените что не писал, просто времени небыло(сдавал экзамены).
Недавно делал на Паскале анимацию загрузки винды(бег. полоса), заначок и полоска там отрисововались в ручную.
Вот для паскаля
 

Вложения

09.11.2009
665
1
23
Киев
#7
Вот отрисовуется только ЛОГОТИП, На Делфи
Код:
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;
 

vital

Больной Компом Детектед
29.01.2006
2 432
40
codeby.net
#13
спасибо) Просто было очень инетерсно что там. Но смотреть в кодом - никакого желания, прости=) Действительно классно)
 

Бота

New Member
07.12.2013
1
0
22
Алматы
#14
Помогите пожалуйста... мне Нужно полное описание действий при создании анимации на языке программирования в Delphi 7 полет самолета...
 

sinkopa

Well-Known Member
#15
Помогите пожалуйста... мне Нужно полное описание действий при создании анимации на языке программирования в Delphi 7 полет самолета...
Это можно делать 128-ю способами.
Уточните какие темы фигурируют в задании? Что главное? рисование на канве, расчет траекторий движения или что?... может у Вас тема по OpenGL? :)