Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 27.06.2012, 16:47   #31
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Ответ: Анимация "салют"

Сообщение от AntiRock Посмотреть сообщение
Игру для себя делаешь что ли от скуки? Кубик, да еще и таким образом взрываться будет.
Клон вот этой игры The Impossible Game
(Offline)
 
Ответить с цитированием
Старый 27.06.2012, 17:00   #32
AntiRock
Оператор ЭВМ
 
Аватар для AntiRock
 
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений
(для 9 пользователей)
Ответ: Анимация "салют"

Так как для прозрачности нужно курить либы сделал так
Program explosions;
Var
  
dlina,i,skorost,koli4estvo,trololo:integer;
  
si:array[1..50of integer;
  
co:array[1..50of integer;
  
x2:array[1..50of integer;
  
y2:array[1..50of integer;
  
x1:array[1..50of integer;
  
y1:array[1..50of integer;
  
r:array[1..50of integer;
  
g:array[1..50of integer;
  
b:array[1..50of 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,trololotrololo);


repeat
SetColor
(255255255);
FillRect(00GetWidthGetHeight);
  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
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Анимация "салют"

не совсем понял, зачем там клиппинг. Ну а если горишь желанием получить "неквадратный" клиппинг - юзай маску прозрачности. Это, конечно, не совсем клиппинг, но, потанцевав с бубном, с помощью маски можно делать удивительные вещи.
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 27.06.2012, 17:11   #34
AntiRock
Оператор ЭВМ
 
Аватар для AntiRock
 
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений
(для 9 пользователей)
Ответ: Анимация "салют"

Чтобы фейерверк этот самый не был бесконечным. Сейчас покопаюсь в либах, может что придумаю.
(Offline)
 
Ответить с цитированием
Старый 27.06.2012, 17:14   #35
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Ответ: Анимация "салют"

Сообщение от AntiRock Посмотреть сообщение
Чтобы фейерверк этот самый не был бесконечным. Сейчас покопаюсь в либах, может что придумаю.
Нужно просто ограничить x, y: если x больше n или меньше n2 то x=n или x=n2 соответственно.
(Offline)
 
Ответить с цитированием
Старый 27.06.2012, 19:24   #36
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Анимация "салют"

Ято бы не был бесконечным? Как это? То есть, что бы не улетал за пределы экрана? Или чтобы "угасал"?
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 27.06.2012, 19:45   #37
AntiRock
Оператор ЭВМ
 
Аватар для AntiRock
 
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений
(для 9 пользователей)
Ответ: Анимация "салют"

Вообще хотелось бы чтобы когда один из отрезков долетит до краев окружности(центр которой - "начало" фейерверка) он бы начал резко набирать прозрачность, таким образом поидее был бы эффект исчезновения, но к сожаления такого стандартного инструментария с прозрачностью нету.
(Offline)
 
Ответить с цитированием
Старый 27.06.2012, 19:47   #38
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Анимация "салют"

Господа, используйте массив записей, а не кучу разных.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 27.06.2012, 20:19   #39
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Анимация "салют"

Разве что налаживать поферх экрана картинку, у которой в центре дырка, и края сглаженные. Опять же - маска прозрачности :В Можно соорудить программным путем
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 27.06.2012, 21:27   #40
AntiRock
Оператор ЭВМ
 
Аватар для AntiRock
 
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений
(для 9 пользователей)
Ответ: Анимация "салют"

Мне кто-нибудь поможет вот с этим Это =)
(Offline)
 
Ответить с цитированием
Старый 28.06.2012, 18:12   #41
AntiRock
Оператор ЭВМ
 
Аватар для AntiRock
 
Регистрация: 23.06.2012
Сообщений: 31
Написано 9 полезных сообщений
(для 9 пользователей)
Ответ: Анимация "салют"

От нечего делать решил поработать над этим кодом. Оптимизировал, убрал циклический rnd цвета, так как жрет много процессорного времени и нам этого не нужно, все массивы собрал в один ,благодаря чему, дальнейшая работа с кодом просто невозможна, добавил таймер.
=)
Program explosions;
Var
  
dlina,i,m,t,skorost,koli4estvo,rndx,rndy:integer;
  
p:array[1..9,1..50of 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
(000);
FillRect(00GetWidthGetHeight);
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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Yadro (28.06.2012)
Старый 28.06.2012, 19:15   #42
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Ответ: Анимация "салют"

Program explosions
Var 
  
dlina,i,t,skorost,koli4estvo,rndx,rndy:integer
  
p:array[1..9,1..50of 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
(000); 
FillRect(00GetWidthGetHeight); 
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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
AntiRock (28.06.2012)
Старый 29.06.2012, 07:11   #43
AntiRock
Оператор ЭВМ
 
Аватар для AntiRock
 
Регистрация: 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..300of 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
(RfGfBf);   ///цвет фона
FillRect(00GetWidthGetHeight);   ///очищаем экран для генерации новых линий.
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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Yadro (29.06.2012)
Старый 29.06.2012, 10:50   #44
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Радость Ответ: Анимация "салют"

Сообщение от AntiRock Посмотреть сообщение
Думаю с этого кода хватит, столько времени ему уделили...
Да уж с него точно хватит. А draw line надо чтобы был первым в цикле, чтоб салют летел из одной точки)
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com