|
Основной форум Сюда все проблемы связанные с программированием. |
27.06.2012, 14:46
|
#16
|
Оператор ЭВМ
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Анимация "салют"
Тебе спасибо, мне хоть нашлось чем заняться
Заодно навыки свои повысил в MP, только начал его изучать.
Правда тебе еще надо сделать фейерверк разноцветным и т.д., а в моем коде черт ногу сломит...Не завидую)
Завтра может продолжу работу над этим кодом, сделаю чтобы фейерверк был разноцветным, сделаю чтобы он гасил скорость со временем и разберусь почему он квадратный(не сильно заметно но все же, видать из-за округления...)
|
(Offline)
|
|
27.06.2012, 15:11
|
#17
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Анимация "салют"
Код подогнал под себя:
Program explosions; Var dlina,i,skorost:integer; x2:array[0..50] of integer; y2:array[0..50] of integer; x1:array[0..50] of integer; y1:array[0..50] of 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.
или вот:
Program explosions; Var dlina,i,skorost:integer; x2:array[0..50] of integer; y2:array[0..50] of integer; x1:array[0..50] of integer; y1:array[0..50] of 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, циклов и тп. Рисуются белые линии, их надо бы убрать. И ещё раз большое спасибо.
|
(Offline)
|
|
27.06.2012, 15:18
|
#18
|
Оператор ЭВМ
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Анимация "салют"
Спасибо за замечания. Как раз занимаюсь кодом, добавил параметр "кол-во" и сделал чтобы скорость регулировалась не "чем меньше, тем быстрее" да и за цветом уже занялся. Сейчас сделаю чтобы можно было выбрать цвет фона. =)
|
(Offline)
|
|
27.06.2012, 15:46
|
#19
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Анимация "салют"
Вот так-то лучше)
Program explosions; Var dlina,i,skorost:integer; si:array[0..50] of integer; co:array[0..50] of integer; x2:array[0..50] of integer; y2:array[0..50] of integer; x1:array[0..50] of integer; y1:array[0..50] of 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(255, 255, 255); FillRect(0, 0, GetWidth, GetHeight); 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.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.06.2012, 15:51
|
#20
|
Оператор ЭВМ
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Анимация "салют"
Ну да, лучше, намного) Сейчас тогда цветной фейерверк буду по твоему коду делать
|
(Offline)
|
|
27.06.2012, 16:00
|
#21
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Анимация "салют"
Надобы ещё, чтобы скорость зависила не от delay.
|
(Offline)
|
|
27.06.2012, 16:04
|
#22
|
Оператор ЭВМ
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Анимация "салют"
Вот он, вот он фейерверк моей мечты!!!
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
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.06.2012, 16:18
|
#23
|
Разработчик
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений (для 319 пользователей)
|
Ответ: Анимация "салют"
Вот еще вариант.
С эффектом "Блюр" сильно тормозно, можно и без него :В
ColorBoom.rar
__________________
Мечта программиста: запрограммировать процесс программирования.
Всё гениальное - просто.
http://passcall.ucoz.com
|
(Offline)
|
|
27.06.2012, 16:22
|
#24
|
Оператор ЭВМ
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Анимация "салют"
Сейчас займусь тем чтобы начальная скорость распространения была большая и постепенно гасла, что он не был бесконечным и не улетал за края, а так же что бы он под "силой притяжения" смещался вниз по оси y.
По идее должно получится реалистичнее чем в исходном коде, от которого мы отталкивались.
PassCall, красиво реализовано)
|
(Offline)
|
|
27.06.2012, 16:31
|
#25
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Анимация "салют"
Вообще мне нужен был взрыв... А "под "силой притяжения" смещался вниз по оси y" уж очень геморойно.
Кстати проблема осталась в том, что скорость зависит от длины линии. А ещё как сделать чтоб цвет линий менял прозрачность, те со временем линии исчезали?
|
(Offline)
|
|
27.06.2012, 16:39
|
#26
|
Оператор ЭВМ
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Анимация "салют"
Ты игру что ли делаешь? Если, то этот код не годится, надо чтобы взрыв составляли спрайты, и тем более нужно будет учитывать физику, учитывать столкновения и т.д.)) Ну а если тебе просто украсить текст тогда этого достаточно В MP если мне не изменяет память нет инструментов для работы с прозрачностью, нужно раскуривать библиотеки.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.06.2012, 16:39
|
#27
|
Разработчик
Регистрация: 27.01.2011
Адрес: Афипский
Сообщений: 419
Написано 100 полезных сообщений (для 182 пользователей)
|
Ответ: Анимация "салют"
Год назад PassCall предлагал устроить конкурс по мидлет паскалю - http://forum.boolean.name/showthread.php?t=14612 . Тогда, правда, ничего не получилось. А тут сейчас, я вижу, уже 3 участника точно есть (я четвертым буду). Мб оформим это все-таки именно как конкурс?
|
(Offline)
|
|
27.06.2012, 16:40
|
#28
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Анимация "салют"
Мне нужно для игры. Да всё нормально, у меня кубик, когда врезается должен взрываться)
|
(Offline)
|
|
27.06.2012, 16:45
|
#29
|
Оператор ЭВМ
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Анимация "салют"
Сообщение от AVL
Год назад PassCall предлагал устроить конкурс по мидлет паскалю - http://forum.boolean.name/showthread.php?t=14612 . Тогда, правда, ничего не получилось. А тут сейчас, я вижу, уже 3 участника точно есть (я четвертым буду). Мб оформим это все-таки именно как конкурс?
|
Какой из меня конкурент? =D Я только начал изучать MP, даже толком не знаю, что такое двумерный массивы и зачем они, а тут конкурс...Ну попробовать можно, у меня с математикой отлично все, да и делать нечего днем(перешел в 11-ый, каникулы). Игру для себя делаешь что ли от скуки? Кубик, да еще и таким образом взрываться будет.
|
(Offline)
|
|
27.06.2012, 16:45
|
#30
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Анимация "салют"
Сообщение от Yadro
А ещё как сделать чтоб цвет линий менял прозрачность, те со временем линии исчезали?
|
А может использовать спрайты ввиде пиксельных квадратиков и уже потом менять прозрачность.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:14.
|