Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.27;
Скачать: CL | DM;

Вниз

Эффект падающих цифр   Найти похожие ветки 

 
datorn ©   (2009-07-17 19:57) [0]

Добрового времени суток, мастера! Подскажите, пожалуйста, как реализовать эффект падающих цифр ("дождь из цифр")? Этот эффект реализован в фильме "Матрица".
Вот реализовал один столбик "дождя", но как их сделать много и независимыми?

var
y_old:integer;
s:string;
c1,c2:TColor;
begin
c1:=$002FFF6D;
c2:=$00008800;
canvas.Font.Color:=c1;
//setbkmode(form1.canvas.Handle,Transparent);

s:=inttostr(random(2))+inttostr(random(2));

 y_old := y-canvas.TextHeight(s);
 canvas.TextOut(x,y,s);
 canvas.Font.Color:=c2;
 canvas.TextOut(x,y_old,s1);
 s1:=s;
end;


 
@!!ex ©   (2009-07-17 19:58) [1]

ви цикле.


 
Сергей М. ©   (2009-07-17 20:06) [2]

На лабу, вроде, не похоже ..


 
datorn ©   (2009-07-17 20:09) [3]

В цикле - всё будет одновременно происходить. Идеально было бы для каждой процедуры организовать свой таймер со случайным х, но не размещу же я 50 таймеров на форме!


 
datorn ©   (2009-07-17 20:16) [4]

Вот здесь есть похожий эффект -
http://softsearch.ru/programs/179-568-dos-matrix-2003-download.shtml


 
datorn ©   (2009-07-17 20:16) [5]

Вот здесь есть похожий эффект -
http://softsearch.ru/programs/179-568-dos-matrix-2003-download.shtml


 
Сергей М. ©   (2009-07-17 20:21) [6]

Ну точно не лаба)..


 
datorn ©   (2009-07-17 20:22) [7]

Та не лаба)) Просто захотелось сделать такой эффект, а мозгов, по ходу, не хватает:"(


 
@!!ex ©   (2009-07-17 20:24) [8]

> [3] datorn ©   (17.07.09 20:09)

Не нужно 50 таймеров.


> [7] datorn ©   (17.07.09 20:22)

Не мозгов, а базовых знаний.


 
datorn ©   (2009-07-17 20:26) [9]

Ну а как??? Я пытался через цикл, использовал sleep, изменял икс и игрек, а всё равно не тот эффект!


 
Anatoly Podgoretsky ©   (2009-07-17 20:28) [10]

> Сергей М.  (17.07.2009 20:21:06)  [6]

Не лаба, но лучше делом заняться.


 
Сергей М. ©   (2009-07-17 20:29) [11]


> не лаба. Просто захотелось


Мож лучше "сникерснуть" ?


 
datorn ©   (2009-07-17 20:31) [12]

))) Та уже три батончика съел))


 
Сергей М. ©   (2009-07-17 20:32) [13]


> пытался через цикл, использовал sleep, изменял икс и игрек,
>  а всё равно


Мдя ..
Не видать тебе, Данила-мастер, цветка каменного как своих ушей ..


 
@!!ex ©   (2009-07-17 20:35) [14]

> [9] datorn ©   (17.07.09 20:26)

Простой совет. Обычно он тем кому я преподаю помогает:
попробуй расписать задачу на человеческом языке. В виде алгоритма.


 
sniknik ©   (2009-07-17 20:36) [15]

> В цикле - всё будет одновременно происходить. Идеально было бы для каждой процедуры организовать свой таймер со случайным х,
> но не размещу же я 50 таймеров на форме!
таймер должен быть только один! © Дункан Маклауд
с минимальным интервалом, и массив из 50ти х выраженных в этих интервалах, полученных естественно рандомно. кончились интервалы - сработало, получай новый, не кончились - пропускай. все.

> Ну а как??? Я пытался через цикл, использовал sleep, изменял икс и игрек, а всё равно не тот эффект!
а по колесу пинать пробовал?


 
datorn ©   (2009-07-17 20:37) [16]

Пробовал пинать, не катится.


 
Сергей М. ©   (2009-07-17 20:39) [17]


> Пробовал пинать, не катится.


Карбюратор, наверно, не сосает..


 
datorn ©   (2009-07-17 20:41) [18]

Сергей М, очень важные советы, демонстрирующие ваше мастерство в кодинге! Спасибо.


 
Сергей М. ©   (2009-07-17 20:42) [19]

На здоровье.
Носи не стаптывай.


 
Сергей М. ©   (2009-07-17 20:53) [20]


> Обычно он ...помогает:.. попробуй


Лучше уж "джага-джага"


 
datorn ©   (2009-07-17 22:49) [21]

sniknik ©   (17.07.09 20:36) [15]
По описанному алгоритму каждая из колонок цифр опускается синхронно с другой (потому что скорость определяется интервалом таймера), а надо, чтоб каждая из "струек" цифр падала отдельно.


 
sniknik ©   (2009-07-17 23:18) [22]

datorn ©   (17.07.09 22:49) [21]
читай "алгоритм" еще, ты не "врубился".

> потому что скорость определяется интервалом таймера
скорость там определяется интервалом таймера * на рандомное значение из массива x для каждой строчки.


 
Германн ©   (2009-07-18 00:56) [23]


> datorn ©   (17.07.09 20:26) [9]
>
> Ну а как??? Я пытался через цикл, использовал sleep, изменял
> икс и игрек, а всё равно не тот эффект!

Интересно как ты "пытался через цикл, использовал sleep, изменял
икс и игрек"?


> Сергей М. ©   (17.07.09 20:21) [6]
>
> Ну точно не лаба)..
>

Но всё лучше, чем "падающие шары". :)


 
Художник   (2009-07-18 06:43) [24]

Мх а если ченить типа

type
TSuperPuperTipoZapis= packed record
 x,y,speed:integer;
end;

...
ar:array [0..49] of TSuperPuperTipoZapis;

...

inc(ar[x].y,ar[x].speed)


 
datorn ©   (2009-07-18 08:58) [25]

Германн ©   (18.07.09 00:56) [23]


procedure TForm1.m(var x,y:integer);
var
y_old:integer;
s:string;
c1,c2:TColor;
begin
c1:=$002FFF6D;
c2:=$00008800;
canvas.Font.Color:=c1;
//setbkmode(form1.canvas.Handle,Transparent);

s:=inttostr(random(2))+inttostr(random(2));

y_old := y-canvas.TextHeight(s);
canvas.TextOut(x,y,s);
canvas.Font.Color:=c2;
canvas.TextOut(x,y_old,s1);
s1:=s;
end;

...

for y:=1 t0 10 do
begin
for x:=1 to 10 do
 m(x,y);
 sleep(500);
end;


 
Германн ©   (2009-07-19 01:57) [26]


> datorn ©   (18.07.09 08:58) [25]
>
> Германн ©   (18.07.09 00:56) [23]
>

Арифметика меня не интересует (пока).
Где в программе ты использовал циклы с процедурой m?


 
KilkennyCat ©   (2009-07-19 02:14) [27]

А я бы создал битмап на всю необходимую экрану, смещал бы в нем стоблцы букв, дорисовывая в верх новую и регулируя яркость необходимых участков, после чего делал бы флип на экран.


 
KilkennyCat ©   (2009-07-19 02:16) [28]


> Где в программе ты использовал циклы с процедурой m?


> for y:=1 t0 10 do
> begin
> for x:=1 to 10 do
>  m(x,y);
>  sleep(500);
> end;


 
Германн ©   (2009-07-19 02:23) [29]


> KilkennyCat ©   (19.07.09 02:16) [28]
>
>
> > Где в программе ты использовал циклы с процедурой m?
>

Не смеши. Лучше иди спать. :)


 
turbouser ©   (2009-07-19 14:11) [30]

а цифры все падали и падали...


 
AlexDan ©   (2009-07-19 23:59) [31]

если есть один дождь, то какая проблемма сделать много..? один цикл в другом или что-то вроде)..


 
Dennis I. Komarov ©   (2009-07-20 11:59) [32]


> а цифры все падали и падали...

Не, ну я могу понять девушку, у которой падали, но тут (судя по анкете) - уже все совсем запущено. Да, она со статическими массивами то сделала :) надо у нее уточнить как...
;)


 
KilkennyCat ©   (2009-07-20 13:45) [33]


> надо у нее уточнить как...

можешь у меня уточнить ;) хотя, для этого придется старую почту поднимать...


 
Dennis I. Komarov ©   (2009-07-20 13:52) [34]


> можешь у меня уточнить ;)

не, не интересно будет... ;)


 
datorn ©   (2009-07-20 18:54) [35]

Dennis I. Komarov, до сих пор веришь анкетам? Наивный...


 
V   (2009-07-20 21:34) [36]

Я скорее всего неправильно понял смысл эффекта матрицы, а посему вопрос: по какому принципу подсвечиваются светлозеленым циферки, и должны ли падающие цифры меняться?
Ну вот у меня получилось вот это http://www.filehoster.ru/files/dd5920


 
datorn ©   (2009-07-20 21:44) [37]

to V   (20.07.09 21:34) [36]
О, огромное спасибо! Хоть один хороший человек предложил готовый код. Почти желаемый эффект. Тока еслиб цифры ещё как бы спускались сверху вниз как вот здесь -
http://softsearch.ru/programs/179-568-dos-matrix-2003-download.shtml ваще было бы именно то!


 
KilkennyCat ©   (2009-07-20 22:48) [38]


> Хоть один хороший человек предложил готовый код

А остальные все плохие. Потому что хотели, чтоб ты сам научился.
Ну, это нормально...


 
datorn ©   (2009-07-20 23:00) [39]

to KilkennyCat ©   (20.07.09 22:48) [38]
Да нет, не значит, что все остальные плохие. Просто из всех хороших только один предложил код)
Уже мозги себе все проимел с этой матрицей, а конечный результат не достигнут, даже несмотря на советы мастеров(. А тут готовый код, ещё раз спасибо. Почитал, разобрался, допетрил, как надо. Сам бы ещё неделю "учился".


 
turbouser ©   (2009-07-20 23:51) [40]


> datorn ©   (20.07.09 23:00) [39]

Опыт-сын ошибок трудных


 
Германн ©   (2009-07-21 01:28) [41]


> Уже мозги себе все проимел с этой матрицей, а конечный результат
> не достигнут, даже несмотря на советы мастеров(. А тут готовый
> код, ещё раз спасибо. Почитал, разобрался, допетрил, как
> надо.

Если тебе это помогло, - "В добрый путь".


 
V   (2009-07-21 06:37) [42]

datorn, этот код вообще бредовый, за основу его брать не надо, наоборот, так делать НЕ нужно :)
как я понял, надо чтобы расстояние по вертикали между цифрами постоянное было, только столбцы ползли по-разному, а еще желательно чтобы это все плавно происходило..


 
brother ©   (2009-07-21 09:10) [43]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls;

const
 UnVisibleSymbol="!";

type
 TFlySym = record
   X, Y: Integer;
   Symb: string[1];
   IncSize: integer;
 end;

 TForm1 = class(TForm)
   Timer1: TTimer;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
 private
   { Private declarations }
   FlySym: array of TFlySym;
 public
   { Public declarations }
   ActiveColor,
   PassiveColor: TColor;
   Image: TBitmap;
   procedure Draw;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function GetRMDSymb:string;
begin
//  33-126
// 65-90
 result:= chr(random(25)+65);
end;

procedure TForm1.FormCreate(Sender: TObject);
var x,y, n: integer;
begin
 Randomize;
 ActiveColor:=$002FFF6D;
 PassiveColor:=$00008800;

 Image:= TBitmap.Create;
 Image.Width:= ClientWidth;
 Image.Height:= ClientHeight;
 Image.PixelFormat:= pf32bit;

 SetLength(FlySym, Image.Width div 13);

 for n:= 0 to length(FlySym)-1 do
 begin
   FlySym[n].X:= random( Image.Width div 13) * 13 ;
   FlySym[n].Y:= random( Image.Height div 13) * 13;
   FlySym[n].Symb:= GetRMDSymb;
   FlySym[n].IncSize:= random(13-8)+8;
 end;

 Image.Canvas.Brush.Color:= clBlack;
 PatBlt(Image.Canvas.Handle, 0, 0, Image.Width, Image.Height,  BLACKNESS);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 Image.Free;
end;

procedure TForm1.Draw;
var n: integer;
begin
 for n:= 0 to length(FlySym)-1 do
 begin
   Inc(FlySym[n].Y, FlySym[n].IncSize);
   if FlySym[n].Y >= Image.Height then
   begin
     FlySym[n].IncSize:= random(13-8) + 8;
     FlySym[n].X:= random(Image.Width div 13) * 13 ;
     FlySym[n].Y:= 0;
     if random(3)<> 0 then
       FlySym[n].Symb:= GetRMDSymb
     else
       FlySym[n].Symb:= UnvisibleSymbol;
   end;

   if FlySym[n].Symb<>UnVisibleSymbol then
     FlySym[n].Symb:= GetRMDSymb;

   if FlySym[n].Symb<>UnVisibleSymbol then
   begin
     PatBlt(Image.Canvas.Handle, FlySym[n].X, FlySym[n].Y - FlySym[n].IncSize,
       13, 13,  BLACKNESS);
     Image.Canvas.Font.Color:= PassiveColor;
     Image.Canvas.TextOut(FlySym[n].X , FlySym[n].Y - 13, FlySym[n].Symb);
     Image.Canvas.Font.Color:= ActiveColor;
     Image.Canvas.TextOut(FlySym[n].X , FlySym[n].Y, FlySym[n].Symb);
   end
   else
     PatBlt(Image.Canvas.Handle, FlySym[n].X, FlySym[n].Y - FlySym[n].IncSize,
       13, 13*2,  BLACKNESS);
 end;

 Form1.Canvas.Draw(0,0, Image);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Draw;
end;

end.
как то так... там идей реализации до дури...)


 
brother ©   (2009-07-21 09:21) [44]

WMZ жду на кошелек)


 
Dennis I. Komarov ©   (2009-07-21 14:08) [45]


> datorn ©   (20.07.09 18:54) [35]

Ну допустим и что с того? Мне от этого ни горячо ни холодно, а вот по какой причине решили обманывать людей, от которых просите помощь - не понятно. Наверное есть что скрывать или чего стесняться :-Р


 
Andy BitOff ©   (2009-07-21 15:51) [46]

а цифры все падали и падали...


 
MacroDenS ©   (2009-07-22 10:23) [47]

<<<OFFTOP>>>>
судя по всему следующим вопросом будет "как заставить цифери вращаться".

так со временем дойдем до темы: как написать свою собственную матрицу и найти в ней Нео (или Морфеуса)
:-)


 
Andy BitOff ©   (2009-07-22 10:54) [48]


> MacroDenS ©   (22.07.09 10:23) [47]

Как узнать коды доступа к компьютеру Зеона


 
brother ©   (2009-07-22 10:58) [49]

> Как узнать коды доступа к компьютеру Зеона

как всегда - перебором)


 
Anatoly Podgoretsky ©   (2009-07-22 11:57) [50]

> Andy BitOff  (22.07.2009 10:54:48)  [48]

Когда цифры прекратят падать.


 
macrodens ©   (2009-07-22 14:13) [51]

to Andy BitOff ©
А не агент ли ты?


 
brother ©   (2009-07-22 15:11) [52]

Matrix have as)


 
turbouser___   (2009-07-22 15:28) [53]


> brother ©   (22.07.09 15:11) [52]

Одной буквы не хватает :)


 
brother ©   (2009-07-23 04:15) [54]

> Одной буквы не хватает :)

кому - что, видится)


 
Художник   (2009-07-23 06:49) [55]


> brother ©   (21.07.09 09:10) [43]


нее нада весь ряд 0..255 ;)


 
brother ©   (2009-07-23 08:16) [56]

затейник однако )



Страницы: 1 2 вся ветка

Текущий архив: 2009.09.27;
Скачать: CL | DM;

Наверх




Память: 0.61 MB
Время: 0.014 c
2-1248034498
tcler
2009-07-20 00:14
2009.09.27
Как организовать scripting host плагин на делфи?


2-1248444020
martb1n
2009-07-24 18:00
2009.09.27
Перехват и эмулирование нажатия клавиш


1-1217481040
TNT
2008-07-31 09:10
2009.09.27
OleContainer и приложение


1-1216112189
Трин
2008-07-15 12:56
2009.09.27
Нет эффекта от переключения раскладки


2-1248451922
Альберт
2009-07-24 20:12
2009.09.27
Работа с time_t