![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 20.12.2009
Сообщений: 10
|
![]()
есть код с анимацией в виде падающих снежинок, я хотел сделать так чтобы до появления этих самых снежинок менялся фон, с задержкой, например, в 1 секунду, хотел использовать sleep,но прога просто запускается с этой задержкой(1 сек.), проблема куда правильно вставить эти стоки:
//---------------------------------------------- BitBlt(FBackBuffer->Canvas->Handle,0,0,FDesktop->Width,FDesktop->Height,FON1->Canvas->Handle,0,0,SRCCOPY); Sleep(1000); BitBlt(FBackBuffer->Canvas->Handle,0,0,FDesktop->Width,FDesktop->Height,FON2->Canvas->Handle,0,0,SRCCOPY); //------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { FBackBuffer=new Graphics::TBitmap(); FBackBuffer->Width=Screen->Width; FBackBuffer->Height=Screen->Height; FDesktop=new Graphics::TBitmap(); FDesktop->Width=Screen->Width; FDesktop->Height=Screen->Height; HDC hdc=GetDC(NULL); BitBlt(FDesktop->Canvas->Handle,0,0,FDesktop->Width,FDesktop->Height,hdc,0,0,SRCCOPY); ReleaseDC(NULL,hdc); FON1=new Graphics::TBitmap(); FON2=new Graphics::TBitmap(); FON1->LoadFromFile("C:\\Documents and Settings\\Администратор\\Рабочий стол\\vlad\\Cнегопад\\1.bmp") ; FON2->LoadFromFile("C:\\Documents and Settings\\Администратор\\Рабочий стол\\vlad\\Cнегопад\\2.bmp") ; FFlake=new Graphics::TBitmap(); FFlake->LoadFromFile(ExtractFilePath(Appli cation->ExeName)+"\\flake.bmp"); randomize(); for(int a=0;a<MAXF;++a) { FSnow[a].x=rand()%(FDesktop->Width-FFlake->Width); FSnow[a].y=-rand()%FDesktop->Height; } BorderStyle=bsNone; SetWindowPos(Handle,HWND_TOPMOST,0, 0,Screen->Width,Screen->Height,SWP_SHOWWINDOW); Application->OnIdle=OnIdle; FCount=0; FFPS=0.0; FTick=GetTickCount(); FStartCount=FTick; } //----------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { delete FFlake; delete FDesktop; delete FBackBuffer; Application->OnIdle=NULL; SetWindowPos(Handle,HWND_NOTOPMOST, Left,Top,Width,Height,SWP_SHOWWINDO W); } //---------------------------------------------------------- void __fastcall TForm1::OnIdle(TObject *Sender, bool &Done) { int R_M_X[7]={1,-1,0,1,2,0,-1}; int R_M_Y[5]={1,2,3,1,2}; AnsiString s; Done=false; if (GetTickCount()>=FTick+40) { BitBlt(FBackBuffer->Canvas->Handle,0,0,FDesktop->Width,FDesktop->Height,FON1->Canvas->Handle,0,0,SRCCOPY); BitBlt(FBackBuffer->Canvas->Handle,0,0,FDesktop->Width,FDesktop->Height,FON2->Canvas->Handle,0,0,SRCCOPY); for(int a=0;a<MAXF;++a) { FSnow[a].x+=R_M_X[rand()%6]; FSnow[a].y+=R_M_Y[rand()%5]; if (FSnow[a].y>FDesktop->Height) FSnow[a].y=-rand()%(FDesktop->Height/4); if (FSnow[a].x<0) FSnow[a].x=FDesktop->Width-FSnow[a].x; else if(FSnow[a].x+FFlake->Width>FDesktop->Width) FSnow[a].x=FSnow[a].x-FDesktop->Width+FFlake->Width; if(FSnow[a].y>=FFlake->Height) TransparentBlt(FBackBuffer->Canvas->Handle,FSnow[a].x,FSnow[a].y,FFlake->Width,FFlake->Height,FFlake->Canvas->Handle,0,0,FFlake->Width,FFlake->Height,FFlake->Canvas->Pixels[0][0]); } FCount++; if(GetTickCount()>=FStartCount+1000 ) { FFPS=(float)(GetTickCount()-FStartCount)*FCount/1000.0; FStartCount=GetTickCount(); FCount=0; } FBackBuffer->Canvas->TextOut(1,1,Format("FPS: %.3f",ARRAYOFCONST((FFPS)))); BitBlt(Canvas->Handle,0,0,FBackBuffer->Width,FBackBuffer->Height,FBackBuffer->Canvas->Handle,0,0,SRCCOPY); FTick=GetTickCount(); } } |
![]() |
![]() |
![]() |
#2 |
Студент, не
Старожил
Регистрация: 29.01.2009
Сообщений: 2,067
|
![]()
Оформите пожалуйста код через специальный тег [ CODE ] ... [ / CODE ]...
И объясните поподробнее что требуется получить... Объявления некоторых переменных нету... Обязательно делать в Билдере?
I am the First of Cyber Evolution...
I am the First to Program your Future... |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 20.12.2009
Сообщений: 10
|
![]() Код:
все переменные обьявлены, просто содержатся они в UNIT1.h? вот его содержимое: Код:
Да, делать нужно на с++ билдере 6, потому что проходим именно его((( |
![]() |
![]() |
![]() |
#4 | |
Студент, не
Старожил
Регистрация: 29.01.2009
Сообщений: 2,067
|
![]()
Билдера у меня нету, но Делфи практически то же самое...
![]() Переделал под Делфи - вроде что-то рисуется... Только следы от рисунка остаются (надо бы очищать форму) и иногда снежинки как бы "застревают" в правой части экрана... Да и новые появляются как-то слишком низко (думаю лучше их "появлять" где-нибудь вверху)... Цитата:
UpDate: А, понял... Не нужно очищать, просто у меня 1.bmp и 2.bmp были 64х64... ![]() Можно увидеть эти 1.bmp, 2.bmp и flake.bmp? Ещё можно сделать полупрозрачные снежинки... ^__^
I am the First of Cyber Evolution...
I am the First to Program your Future... Последний раз редактировалось DomiNick; 20.12.2009 в 12:29. Причина: UpDate |
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 20.12.2009
Сообщений: 10
|
![]()
на самом деле файлов фона больше, но мне хотя бы на примере этих 2-х, а прозрачность не надо, мне бы фон менять научиться...)
|
![]() |
![]() |
![]() |
#6 |
Студент, не
Старожил
Регистрация: 29.01.2009
Сообщений: 2,067
|
![]()
Нужно ли растягивать изображения под снежинками? У меня оно получается в углу, а остальная часть экрана получается в некрасивых разводах от снежинок...
Может так: FON1 (синий квадрат) растягивается на всю форму, а остальное уже просто рисуется в нужных координатах? Или всё растягивать... Нужно чтоб ёлочка то появлялась, то пропадала? ![]() А для чего нужен FDesktop? Он же фактически ничего не делает.....
I am the First of Cyber Evolution...
I am the First to Program your Future... Последний раз редактировалось DomiNick; 20.12.2009 в 13:44. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 20.12.2009
Сообщений: 10
|
![]()
в углу? ну у первого изображения можешь изменить разрешение , сделать его побольше, а с елкой которое, то я его так оставил, просто расчитал чтобы оно стояло снизу посередине.
"чтоб ёлочка то появлялась, то пропадала.." -я лично хотел заменить ее уже наряженной елочкой, т.е. фон3.bmp, но мне для примера пойдет любая анимация а FDesktop...ну раньше он копировал картинку с раб. стола, и я его оставил что много не переписывать... ![]() Последний раз редактировалось Гладиолус; 20.12.2009 в 14:00. Причина: очепятки |
![]() |
![]() |
![]() |
#8 |
Студент, не
Старожил
Регистрация: 29.01.2009
Сообщений: 2,067
|
![]()
Я бы просто растягивал изображение как нужно в самой программе...
Убрал этот FDesktop и сделал несколько мелких изменений (надеюсь в билдере у формы есть ClientWidth и ClientHeight)... Ввёл счётчик "int i;"... Пять кадров выводится первый фон, пять кадров второй, и так по кругу... ![]() Примерно так пойдёт (вариантов-то по идее можно много разных придумать)?: Код:
I am the First of Cyber Evolution...
I am the First to Program your Future... |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 20.12.2009
Сообщений: 10
|
![]()
ща потестил немнога, блин пасиб большое
![]() -это то что нужно, со снежинками тока чет не то - все разом идут, но думаю это устранимо :о) |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
анимация | shad0w | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 13.12.2020 11:02 |
Анимация | Belazur | Мультимедиа в Delphi | 3 | 09.12.2009 22:36 |
Анимация в С++ | Streb | Общие вопросы C/C++ | 28 | 07.06.2009 19:07 |
анимация | Juffin | Общие вопросы Delphi | 2 | 26.05.2009 20:04 |
Анимация | Rembo | Софт | 6 | 02.12.2007 18:31 |