Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2010, 13:55   #31
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Привет! Отдохнул и с новыми силами? Рад за тебя!!!

Я тут столкнулся теперь со следующим:
Совместил коды, и...
Получилось, что самолет из ресурса загруженный и мой самолет в виде кадровой анимации - это два разных самолета (ну это и понятно почему). Но вопрос собственно такой: Rin, ты не мог бы кинуть также такой код, чтобы там не просто самолет летел, а анимированный (анимация кадровая, фрагмент кода приводил выше), его (аним. кадр. объект), кстати, и из ресурса загрузить можно. А то я что-то не понял как это сделать. Лучше конечно, чтобы изображение в Имейдж поместить (не канвой на форму) - там им управлять легче (ну до этого я и сам дойду, просто для полной картины говорю).

А уже на этой основе и будет строиться дальнейшее проведение в жизнь моей разработки.

По поводу Зон ограничения перемещений я решил так:
Создам необходимое число динамических массивов (именно динамических, так как на каждую локацию нужны свои установки) - координаты Зоны ограничения перемещения (х и у). Перемещаться на эти значения нельзя, т.е., например так:
...
if Image1.Left < a[i] then
Image1.Left:= Image1.Left + 1;
ну и в таком роде далее...

Я тут какое-то время делал другие вещи, так что могу помочь с реестром (например автозагрузку или диспетчер задач отключать/включать и т.п.), WinApi - папки или файлы (любые) по указанному адресу открывать и что-либо делать с ними, или через ком-т TShellTreeView.
Эти функции можно очень и очень полезно использовать в своих программах.
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 30.08.2010, 14:59   #32
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Там всё то же, что и у тебя. Осталось написать лишь
Timer1.Interval:=150; и всё то же, что и в твоём коде.
Я просто не пойму, что тебе нужно*???????*
Код:
Film := TBitMap.Create;
Film.LoadFromFile(FILMFILE);
WKadr := Round(Film.Width/N_Kadr);                              *1*
HKadr := Film.Height;
Rect1 := Bounds(10,10,WKadr,HKadr);
Ckadr:=0;                                                                  *2*
Form1.Timerl.Interval := 150; // период обновления кадров — 0.15 с
Form1.Timerl.Enabled:=True; // запустить таймер
end
я 2 непонятные строки отметил: За Что такое N_Kadr ? Это количество блоков на форме что ли (проходимые, непроходимые)? Xто такое Ckadr? Это подсчёт кадров?
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 04.09.2010, 15:56   #33
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

NKadr - это количество кадров анимации;
СKadr - номер текущего кадра;
WKadr(ширина кадра) := Round(Film.Width/N_Kadr) - ширина всего фильма/кол-во кадров - показывать их по кругу, т.е.
if (CKadr = 10(всего 10 кадров))=True then CKadr:= 0;
CKadr:= 0 - это установить первый кадр;

Если детально, то так:
Представим себе полоску(TBitMap) - высотой 100 пкс и шириной 1000 пкс. Разделим ее по ширине на 10 частей, в каждом квадрате рисуем отдельный кадр, т.е. это похоже на диафильм. Потом по таймеру начинаем последовательно показывать только один квадрат за раз. Если нормально отрисовать кадры, то можно симулировать перемещение или анимацию. Разумеется не очень сложную, все зависит от индивидуальных способностей к рисованию.

А я бы хотел, что бы вывод анимации осуществлялся не в одном конкретном месте, а перемещался по форме (как тот самолет).

Пока писал, я понял как сделать: нужно в строке
Rect1:= Bounds(10,10,WKadr,HKadr);
вместо 10,10 установить переменные х,у и по сигналу второго таймера менять их значения. Только эту строку нужно тоже к обработке с таймера добавить, просто этот код на обработке кнопки стоит.

Как ты считаешь?

С компонентом TShellTreeView - как получать строковый адрес именно файла, а не папки? Есть код, но он для любого объекта (папки и файлы), а мне адрес папки не нужен.

И еще, сейчас занялся парсингом текста, как будут результаты, могу чем либо помогать по этой теме.
даешь высокое напряжение

Последний раз редактировалось Vova777; 04.09.2010 в 15:59.
Vova777 вне форума Ответить с цитированием
Старый 04.09.2010, 19:48   #34
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Смотрю тема еще актуальна.
Цитата:
не подскажете, как, например, если выводить канвой на форму изображение кадровой анимации (см. выше) стирать предыдущий кадр? И если стрелками сдвинуть координаты, чтобы на предыдущем месте ничего не осталось? Но чтобы нижний Image (это фон) не стирался?
Все это неплохо освещено в Журнале ПРОграммист в статье "Уроки графики в Дельфи". Но все же попробую объяснить простые принципы анимации.
Во-первых: быстрей всего компьютер работает с памятью. Поэтому вывод любых изображений следует производить не из непосредственно файлов или компонентов, а именно из памяти. Следовательно перед анимацией следует поместить в память все используемые изображения. Для этого используются объекты TBitMap или TJpgImage, в которые загружаются изображения, а затем уже эти объекты или часть их выводятся на экран.
Принцип здесь следующий:
Есть рисунок фона и рисунок (cпрайт), содержащий необходимое количество кадров движущегося объекта по фону.



Загружаем из файла фон в TBitMap_1 и спрайт в TBitMap_2.
Все построения следует делать вне экрана, что бы не было "мерцания", т.е. также в памяти на TBitMap_3 и только потом выводить на экран. (размеры TBitMap_3 д.б. = TBitMap_1)
1. В TBitMap_3 копируем фон (TBitMap_1).
2. Из спрайта (TBitMap_2) берем первый кадр и копируем его на TBitMap_3 в нужных координатах (X1,Y1).
3. Выводим TBitMap_3 (суммарное изображение фона и 1-го кадра спрайта) на экран (на форму). Делаем задержку (по таймеру или по Sleep) что бы увидеть картинку.
4.Теперь 1-й кадр спрайта надо убрать и вывести следующий кадр в новых координатах. Можно применять два способа:
а) 1-й - Копируем в TBitMap_3 опять фон из TBitMap_1, затем сюда же (в TBitMap_3) копируем следующий кадр в новых, смещенных координатах (X2,Y2) и
далее опять же пункт 3.
б) 2-й - Из TBitMap_1 берем часть фона в координатах X1,Y1 и размером одного кадра спрайта и копируем в TBitMap_3 в тех же координатах X1,Y1, затем сюда (в TBitMap_3) копируем следующий кадр в новых, смещенных координатах (X2,Y2) и
далее пункт 3.
При больших размерах фона 2-й способ более быстрый.
Дальше все повторяется с каждым последующим кадром - п3, п.4 п.3, п.4 и т.д., учитывая новые координаты. После последнего кадра из спрайта опять берется первый.
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 04.09.2010 в 19:51.
DeKot вне форума Ответить с цитированием
Старый 04.09.2010, 21:16   #35
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Ребята, если по парсингу помочь можете, зайдите плз, на "Общие вопросы - ВАРИАНТЫ ПАРСИНГА". А "+" я вам уже поставил.
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 04.09.2010, 22:44   #36
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

зачем второй таймер? Можно ведь отсчитывать по одному таймеру разные интервалы:

Код:
var 
i:integer; // глобальная переменная

FormCreate();
begin
timer1.Interval:=500;// то есть пол секунды
i:=0;
end;

Timer1Timer(senfer:TObject);
begin
i:=i+1;
if i mod 20 = 0  { если прошло десять секунд , т.к. interval= 500 , а делим на 20. (500*20=10000 миллисекунд или 10 секунд) }
then // то  
  begin
     // делаешь, что душе угодно и не надо никакой второй таймер
  end;
end;

используй компонент TFileListBox на вкладке windows 3.1
а тут про него почитай http://www.beluch.ru/progr/100comp/8_3.htm
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 04.09.2010 в 22:46. Причина: не допИсал
Rin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
беда Морячок Паскаль, Turbo Pascal, PascalABC.NET 3 05.06.2010 15:41
беда на форме lamerk Microsoft Office Access 2 29.11.2009 18:28
Беда не приходит одна! Tayfun Свободное общение 6 30.12.2007 07:58