|
Основной форум Сюда все проблемы связанные с программированием. |
27.06.2012, 16:47
|
#31
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Анимация "салют"
Сообщение от AntiRock
Игру для себя делаешь что ли от скуки? Кубик, да еще и таким образом взрываться будет.
|
Клон вот этой игры The Impossible Game
|
(Offline)
|
|
27.06.2012, 17:00
|
#32
|
Оператор ЭВМ
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Анимация "салют"
Так как для прозрачности нужно курить либы сделал так
Program explosions; Var dlina,i,skorost,koli4estvo,trololo: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:=35; /// от 1 до 50. trololo:=300; ///ограничитель фейерверка. Хоть он и квадратный, но не столь заметно. //внимание все параметры должны быть записаны целыми числами! 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); setClip(x1[1]-trololo/2,y1[1]-trololo/2,trololo, trololo); 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]); drawline(x1[i]-1,y1[i]-1,x2[i]-1,y2[i]-1); end; repaint; delay(100/skorost); until (false); end.
жаль что setclip есть только квадратный
|
(Offline)
|
|
27.06.2012, 17:04
|
#33
|
Разработчик
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений (для 319 пользователей)
|
Ответ: Анимация "салют"
не совсем понял, зачем там клиппинг. Ну а если горишь желанием получить "неквадратный" клиппинг - юзай маску прозрачности. Это, конечно, не совсем клиппинг, но, потанцевав с бубном, с помощью маски можно делать удивительные вещи.
__________________
Мечта программиста: запрограммировать процесс программирования.
Всё гениальное - просто.
http://passcall.ucoz.com
|
(Offline)
|
|
27.06.2012, 17:11
|
#34
|
Оператор ЭВМ
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Анимация "салют"
Чтобы фейерверк этот самый не был бесконечным. Сейчас покопаюсь в либах, может что придумаю.
|
(Offline)
|
|
27.06.2012, 17:14
|
#35
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Анимация "салют"
Сообщение от AntiRock
Чтобы фейерверк этот самый не был бесконечным. Сейчас покопаюсь в либах, может что придумаю.
|
Нужно просто ограничить x, y: если x больше n или меньше n2 то x=n или x=n2 соответственно.
|
(Offline)
|
|
27.06.2012, 19:24
|
#36
|
Разработчик
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений (для 319 пользователей)
|
Ответ: Анимация "салют"
Ято бы не был бесконечным? Как это? То есть, что бы не улетал за пределы экрана? Или чтобы "угасал"?
__________________
Мечта программиста: запрограммировать процесс программирования.
Всё гениальное - просто.
http://passcall.ucoz.com
|
(Offline)
|
|
27.06.2012, 19:45
|
#37
|
Оператор ЭВМ
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Анимация "салют"
Вообще хотелось бы чтобы когда один из отрезков долетит до краев окружности(центр которой - "начало" фейерверка) он бы начал резко набирать прозрачность, таким образом поидее был бы эффект исчезновения, но к сожаления такого стандартного инструментария с прозрачностью нету.
|
(Offline)
|
|
27.06.2012, 19:47
|
#38
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: Анимация "салют"
Господа, используйте массив записей, а не кучу разных.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
|
(Offline)
|
|
27.06.2012, 20:19
|
#39
|
Разработчик
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений (для 319 пользователей)
|
Ответ: Анимация "салют"
Разве что налаживать поферх экрана картинку, у которой в центре дырка, и края сглаженные. Опять же - маска прозрачности :В Можно соорудить программным путем
__________________
Мечта программиста: запрограммировать процесс программирования.
Всё гениальное - просто.
http://passcall.ucoz.com
|
(Offline)
|
|
27.06.2012, 21:27
|
#40
|
Оператор ЭВМ
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Анимация "салют"
Мне кто-нибудь поможет вот с этим Это =)
|
(Offline)
|
|
28.06.2012, 18:12
|
#41
|
Оператор ЭВМ
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Анимация "салют"
От нечего делать решил поработать над этим кодом. Оптимизировал, убрал циклический rnd цвета, так как жрет много процессорного времени и нам этого не нужно, все массивы собрал в один ,благодаря чему, дальнейшая работа с кодом просто невозможна, добавил таймер.
=)
Program explosions; Var dlina,i,m,t,skorost,koli4estvo,rndx,rndy:integer; p:array[1..9,1..50] of integer; begin dlina:=30; ///от 3 до 20. skorost:=100; /// от 1 до 100. koli4estvo:=50; /// от 1 до 50. t:=2; ///время(в секундах), через которое наш фейерверк умирает. //внимание все параметры должны быть записаны целыми числами!
rndx:=random(getwidth); rndy:=random(getheight); for i:= 1 to koli4estvo do begin p[1,i]:=random(360); p[2,i]:=random(360); p[3,i]:=random(255); p[4,i]:=random(255); p[5,i]:=random(255); p[6,i]:=rndx; p[7,i]:=rndy; end; repeat SetColor(0, 0, 0); FillRect(0, 0, GetWidth, GetHeight); for i:= 1 to koli4estvo do begin setcolor(p[3,i],p[4,i],p[5,i]); p[6,i]:=(p[8,i]+p[6,i])/2; p[7,i]:=(p[9,i]+p[7,i])/2; p[8,i]:=p[6,i]+trunc(sin(p[1,i])*dlina); p[9,i]:=p[7,i]+trunc(cos(p[2,i])*dlina); drawline(p[6,i],p[7,i],p[8,i],p[9,i]); drawline(p[6,i]-1,p[7,i]-1,p[8,i]-1,p[9,i]-1); end; repaint; m:=m+100/skorost; delay(100/skorost); until (m>t*50); end.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
28.06.2012, 19:15
|
#42
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Анимация "салют"
Program explosions; Var dlina,i,t,skorost,koli4estvo,rndx,rndy:integer; p:array[1..9,1..50] of integer; begin dlina:=30; ///от 3 до 20. skorost:=1; /// от 1 до 150. koli4estvo:=50; /// от 1 до 50. t:=3; ///время(в секундах), через которое наш фейерверк умирает. //внимание все параметры должны быть записаны целыми числами! rndx:=20+random(getwidth-40); rndy:=20+random(getheight-40); for i:= 1 to koli4estvo do begin p[1,i]:=random(360); //угол p[2,i]:=random(360); //угол p[3,i]:=random(255); //цвет p[4,i]:=random(255); //цвет p[5,i]:=random(255); //цвет p[6,i]:=rndx; //1я точка x p[7,i]:=rndy; //1я точка y p[8,i]:=p[6,i]+trunc(sin(p[1,i])*dlina); //2я точка x p[9,i]:=p[7,i]+trunc(cos(p[2,i])*dlina); //2я точка y end; repeat SetColor(0, 0, 0); FillRect(0, 0, GetWidth, GetHeight); for i:= 1 to koli4estvo do begin setcolor(p[3,i],p[4,i],p[5,i]); drawline(p[6,i],p[7,i],p[8,i],p[9,i]); drawline(p[6,i]-1,p[7,i]-1,p[8,i]-1,p[9,i]-1); p[6,i]:=(p[8,i]+p[6,i])/2; p[7,i]:=(p[9,i]+p[7,i])/2; p[8,i]:=p[6,i]+trunc(sin(p[1,i])*dlina); p[9,i]:=p[7,i]+trunc(cos(p[2,i])*dlina); end; if keyToAction(getKeyClicked) = GA_FIRE then //если нажать 5 перерисовка begin rndx:=random(getwidth); rndy:=random(getheight); for i:= 1 to koli4estvo do begin p[1,i]:=random(360); p[2,i]:=random(360); p[3,i]:=random(255); p[4,i]:=random(255); p[5,i]:=random(255); p[6,i]:=rndx; p[7,i]:=rndy; p[8,i]:=p[6,i]+trunc(sin(p[1,i])*dlina); p[9,i]:=p[7,i]+trunc(cos(p[2,i])*dlina); end; end; repaint; delay(100/skorost); until false; end.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
29.06.2012, 07:11
|
#43
|
Оператор ЭВМ
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений (для 9 пользователей)
|
Ответ: Анимация "салют"
Украсить текст сойдет)
Program explosions; Var dlina,i,m,t,skorost,koli4estvo,rndx,rndy,Rf,Gf,Bf:integer; p:array[1..9,1..300] of integer; begin Rf:=0; ///цвет фона R(0-255) Gf:=38; ///цвет фона G(0-255) Bf:=100 ; ///цвет фона B(0-255) dlina:=30; ///от 3 до 50. skorost:=100; /// от 1 до 100(по сути мы не ускоряем, а уменьшаем задержку). koli4estvo:=300; /// от 1 до 300(чем больше число, тем больше времени уходит на обработку массивов!!). t:=3; ///время через которое наш фейерверк умирает и появляется новый(работает коряво, не могу сообразить как сделать=)). //внимание все параметры должны быть записаны целыми числами!
repeat rndx:=random(getwidth); ///рэндомно выбираем на экране координату X для эпицентра фейерверка. rndy:=random(getheight); ///рэндомно выбираем на экране координату Y для эпицентра фейерверка. for i:= 1 to koli4estvo do begin p[1,i]:=random(360); ///задаем рэндомно угол. p[2,i]:=random(360); ///задаем рэндомно угол. p[3,i]:=random(255); ///задаем цвет R. p[4,i]:=random(255); ///задаем цвет G. p[5,i]:=random(255); ///задаем цвет B. p[6,i]:=rndx; ///перемещаем координаты X. p[7,i]:=rndy; ///перемещаем координаты Y. p[8,i]:=0; ///присваеваем координате X, второй точки значение 0. p[9,i]:=0; ///присваеваем координате Y, второй точки значение 0. end; repeat SetColor(Rf, Gf, Bf); ///цвет фона FillRect(0, 0, GetWidth, GetHeight); ///очищаем экран для генерации новых линий. for i:= 1 to koli4estvo do begin setcolor(p[3,i],p[4,i],p[5,i]); ///присваеваем цвет. p[6,i]:=(p[8,i]+p[6,i])/2; ///расчитываем координату X. p[7,i]:=(p[9,i]+p[7,i])/2; ///расчитываем координату Y. p[8,i]:=p[6,i]+trunc(sin(p[1,i])*dlina); ///расчитываем координату X2. p[9,i]:=p[7,i]+trunc(cos(p[2,i])*dlina); ///расчитываем координату Y2. drawline(p[6,i],p[7,i],p[8,i],p[9,i]); ///чертим линию по заданным координатам. drawline(p[6,i]-1,p[7,i]-1,p[8,i]-1,p[9,i]-1); ///чертим линию по (заданным координатам-1), таким образом они становятся толще, визуально. end; repaint; ///выводим на экран наше художество. m:=m+100/skorost; ///считаем время. delay(100/skorost); ///пауза. until (m>t*50); ///прерываем цикл. m:=0; ///сбрасываем время. until (false); end.
Думаю с этого кода хватит, столько времени ему уделили...
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
29.06.2012, 10:50
|
#44
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Анимация "салют"
Сообщение от AntiRock
Думаю с этого кода хватит, столько времени ему уделили...
|
Да уж с него точно хватит. А draw line надо чтобы был первым в цикле, чтоб салют летел из одной точки)
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:21.
|