forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Анимация "салют" (http://forum.boolean.name/showthread.php?t=16944)

AntiRock 27.06.2012 14:46

Ответ: Анимация "салют"
 
Тебе спасибо, мне хоть нашлось чем заняться :-D
Заодно навыки свои повысил в MP, только начал его изучать.
Правда тебе еще надо сделать фейерверк разноцветным и т.д., а в моем коде черт ногу сломит...Не завидую)
Завтра может продолжу работу над этим кодом, сделаю чтобы фейерверк был разноцветным, сделаю чтобы он гасил скорость со временем и разберусь почему он квадратный(не сильно заметно но все же, видать из-за округления...)

Yadro 27.06.2012 15:11

Ответ: Анимация "салют"
 
Код подогнал под себя:
PHP код:

Program explosions;
Var
  
dlina,i,skorost:integer;
  
x2:array[0..50of integer;
  
y2:array[0..50of integer;
  
x1:array[0..50of integer;
  
y1:array[0..50of integer;
 

procedure main;

begin

repeat
  
for i:= 0 to 50 do
    
begin
    setcolor
(255,255,255);
    
drawline(x1[i],y1[i],x2[i],y2[i]);
    
setcolor(0,0,0);
    
x1[i]:=2*x2[i]-x1[i];
    
y1[i]:=2*y2[i]-y1[i];
    
x2[i]:=2*x1[i]-x2[i];
    
y2[i]:=2*y1[i]-y2[i];
    
drawline(x1[i],y1[i],x2[i],y2[i]);
    
end;
repaint;
delay(skorost);
until (false);

end;

begin
dlina
:=20;
skorost:=50;
for 
i:= 0 to 50 do
  
begin
  x1
[i]:=getwidth/2;
  
y1[i]:=getheight/2;
  
x2[i]:=x1[i]+trunc(sin(random(360))*dlina);
  
y2[i]:=y1[i]+trunc(cos(random(360))*dlina);
  
drawline(x1[i],y1[i],x2[i],y2[i]);
  
end;

main;
end


или вот:
PHP код:

Program explosions;
Var
  
dlina,i,skorost:integer;
  
x2:array[0..50of integer;
  
y2:array[0..50of integer;
  
x1:array[0..50of integer;
  
y1:array[0..50of integer;

begin
dlina
:=20;
skorost:=50;
for 
i:= 0 to 50 do
  
begin
  x1
[i]:=getwidth/2;
  
y1[i]:=getheight/2;
  
x2[i]:=x1[i]+trunc(sin(random(360))*dlina);
  
y2[i]:=y1[i]+trunc(cos(random(360))*dlina);
  
drawline(x1[i],y1[i],x2[i],y2[i]);
  
end;

//***********************************
repeat
  
for i:= 0 to 50 do
    
begin
    setcolor
(255,255,255);
    
drawline(x1[i],y1[i],x2[i],y2[i]);
    
setcolor(0,0,0);
    
x1[i]:=2*x2[i]-x1[i];
    
y1[i]:=2*y2[i]-y1[i];
    
x2[i]:=2*x1[i]-x2[i];
    
y2[i]:=2*y1[i]-y2[i];
    
drawline(x1[i],y1[i],x2[i],y2[i]);
    
end;
repaint;
delay(skorost);
until (false);
//***********************************
end


AntiRock, у тебя получается много ненужных repaint, циклов и тп. Рисуются белые линии, их надо бы убрать. И ещё раз большое спасибо.:)

AntiRock 27.06.2012 15:18

Ответ: Анимация "салют"
 
Спасибо за замечания. Как раз занимаюсь кодом, добавил параметр "кол-во" и сделал чтобы скорость регулировалась не "чем меньше, тем быстрее" да и за цветом уже занялся. Сейчас сделаю чтобы можно было выбрать цвет фона. =)

Yadro 27.06.2012 15:46

Ответ: Анимация "салют"
 
Вот так-то лучше)
PHP код:

Program explosions;
Var
  
dlina,i,skorost:integer;
  
si:array[0..50of integer;
  
co:array[0..50of integer;
  
x2:array[0..50of integer;
  
y2:array[0..50of integer;
  
x1:array[0..50of integer;
  
y1:array[0..50of integer;
 


begin
dlina
:=20;
skorost:=10;
for 
i:= 0 to 50 do
  
begin
  x1
[i]:=getwidth/2;
  
y1[i]:=getheight/2;
  
si[i]:=random(360);
  
co[i]:=random(360);
  
x2[i]:=x1[i]+trunc(sin(si[i])*dlina);
  
y2[i]:=y1[i]+trunc(cos(co[i])*dlina);
  
drawline(x1[i],y1[i],x2[i],y2[i]);
  
end;
repaint;
delay(skorost);

//***********************************
repeat
SetColor
(255255255);
FillRect(00GetWidthGetHeight);
  for 
i:= 0 to 50 do
    
begin
    x1
[i]:=x2[i];
    
y1[i]:=y2[i];
    
x2[i]:=x1[i]+trunc(sin(si[i])*dlina);
    
y2[i]:=y1[i]+trunc(cos(co[i])*dlina);
    
setcolor(0,0,0);
    
drawline(x1[i],y1[i],x2[i],y2[i]);
    
end;
    
repaint;
delay(skorost);
until (false);
//***********************************
end


AntiRock 27.06.2012 15:51

Ответ: Анимация "салют"
 
Ну да, лучше, намного) Сейчас тогда цветной фейерверк буду по твоему коду делать :super:

Yadro 27.06.2012 16:00

Ответ: Анимация "салют"
 
Надобы ещё, чтобы скорость зависила не от delay.

AntiRock 27.06.2012 16:04

Ответ: Анимация "салют"
 
Вот он, вот он фейерверк моей мечты!!!
Код:

Program explosions;
Var
  dlina,i,skorost,koli4estvo:integer;
  si:array[1..50] of integer;
  co:array[1..50] of integer;
  x2:array[1..50] of integer;
  y2:array[1..50] of integer;
  x1:array[1..50] of integer;
  y1:array[1..50] of integer;
  r:array[1..50] of integer;
  g:array[1..50] of integer;
  b:array[1..50] of integer;
begin

dlina:=10;  ///от 3 до 20
skorost:=150;  /// от 1 до 150
koli4estvo:=20; /// от 1 до 50
//įIJнимание все параметры должны быть записаны целыми числами!

for i:= 1 to koli4estvo do
  begin
  x1[i]:=getwidth/2;
  y1[i]:=getheight/2;
  si[i]:=random(360);
  co[i]:=random(360);
  x2[i]:=x1[i]+trunc(sin(si[i])*dlina);
  y2[i]:=y1[i]+trunc(cos(co[i])*dlina);
  drawline(x1[i],y1[i],x2[i],y2[i]);
  end;

repaint;
delay(150/skorost);

repeat
SetColor(255, 255, 255);
FillRect(0, 0, GetWidth, GetHeight);
  for i:= 1 to koli4estvo do
    begin
    r[i]:=random(255);
    g[i]:=random(255);
    b[i]:=random(255);
    setcolor(r[i],g[i],b[i]);
    x1[i]:=x2[i];
    y1[i]:=y2[i];
    x2[i]:=x1[i]+trunc(sin(si[i])*dlina);
    y2[i]:=y1[i]+trunc(cos(co[i])*dlina);
    drawline(x1[i],y1[i],x2[i],y2[i]);
    end;

repaint;
delay(100/skorost);
until (false);
end.


Вот только лучше будет вынести рэндом цвета из repeat, так как много времени уходит только на то, чтобы дать каждой переменной каждой линии цвет...считай 3*50 и rnd

PassCall 27.06.2012 16:18

Ответ: Анимация "салют"
 
Вложений: 2
Вот еще вариант.

С эффектом "Блюр" сильно тормозно, можно и без него :В

Вложение 17098
Вложение 17099

AntiRock 27.06.2012 16:22

Ответ: Анимация "салют"
 
Сейчас займусь тем чтобы начальная скорость распространения была большая и постепенно гасла, что он не был бесконечным и не улетал за края, а так же что бы он под "силой притяжения" смещался вниз по оси y.
По идее должно получится реалистичнее чем в исходном коде, от которого мы отталкивались.

PassCall, красиво реализовано)

Yadro 27.06.2012 16:31

Ответ: Анимация "салют"
 
Вообще мне нужен был взрыв... :-D А "под "силой притяжения" смещался вниз по оси y" уж очень геморойно.

Кстати проблема осталась в том, что скорость зависит от длины линии. А ещё как сделать чтоб цвет линий менял прозрачность, те со временем линии исчезали?

AntiRock 27.06.2012 16:39

Ответ: Анимация "салют"
 
Ты игру что ли делаешь? Если, то этот код не годится, надо чтобы взрыв составляли спрайты, и тем более нужно будет учитывать физику, учитывать столкновения и т.д.)) Ну а если тебе просто украсить текст тогда этого достаточно ;) В MP если мне не изменяет память нет инструментов для работы с прозрачностью, нужно раскуривать библиотеки.

AVL 27.06.2012 16:39

Ответ: Анимация "салют"
 
Год назад PassCall предлагал устроить конкурс по мидлет паскалю - http://forum.boolean.name/showthread.php?t=14612 . Тогда, правда, ничего не получилось. А тут сейчас, я вижу, уже 3 участника точно есть (я четвертым буду). Мб оформим это все-таки именно как конкурс?

Yadro 27.06.2012 16:40

Ответ: Анимация "салют"
 
Мне нужно для игры. Да всё нормально, у меня кубик, когда врезается должен взрываться)

AntiRock 27.06.2012 16:45

Ответ: Анимация "салют"
 
Цитата:

Сообщение от AVL (Сообщение 231637)
Год назад PassCall предлагал устроить конкурс по мидлет паскалю - http://forum.boolean.name/showthread.php?t=14612 . Тогда, правда, ничего не получилось. А тут сейчас, я вижу, уже 3 участника точно есть (я четвертым буду). Мб оформим это все-таки именно как конкурс?

Какой из меня конкурент? =D Я только начал изучать MP, даже толком не знаю, что такое двумерный массивы и зачем они, а тут конкурс...Ну попробовать можно, у меня с математикой отлично все, да и делать нечего днем(перешел в 11-ый, каникулы). Игру для себя делаешь что ли от скуки? :-D Кубик, да еще и таким образом взрываться будет.

Yadro 27.06.2012 16:45

Ответ: Анимация "салют"
 
Цитата:

Сообщение от Yadro (Сообщение 231635)
А ещё как сделать чтоб цвет линий менял прозрачность, те со временем линии исчезали?

А может использовать спрайты ввиде пиксельных квадратиков и уже потом менять прозрачность.


Часовой пояс GMT +4, время: 03:52.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot