Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мультфильмы, Как делать мультфильмы в Basic? 
:(
    Опции темы
korob2001
Дата 11.11.2004, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Может я ошибаюсь, но помоему вместо всех этих условий If....End If гораздо разумнее воспользоваться Select Case a ..... End Select.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
cardinal
Дата 11.11.2004, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Старуха, а не проще каждому img по индексу раздать? smile
Код

Dim a As Integer

Private Sub Command1_Click()
Timer1.Enabled = True
a = 19
Command1.Visible = False
End Sub

Private Sub Timer1_Timer()
a = a - 1
Image1.Picture = img(a).Picture
End Sub

Ну и таймер неплохо было бы выключить если он больше не нужен.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Staruha
Дата 11.11.2004, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 2
Всего: 27



Ну вот я думаю можно тему закрывать smile
(а тот код из обучалки ,для начинающих) smile


--------------------
Возмездие настигнет
PM MAIL   Вверх
korob2001
Дата 11.11.2004, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Меня интересует по данной теме ещё такой вопрос:
Каким способом лучше всего создавать анимацию? С помощью таймера или цикла с DoEvents?
У меня в одной книге написано что с циклом можно добиться большей скорости смены кадров, чем с таймером.

Модератору:
Извини что не создал отдельный топ для данной темы, просто вопрос вполне подходит под эту тему.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
-Mikle-
Дата 11.11.2004, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Да хоть че используй, смотря с какой скоростью тебе анимировать надо...
На таймер, больше чем 40 кадров в секунду не рассчитывай...
в цикле, можно и больше добиться...



--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
korob2001
Дата 11.11.2004, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Всё понял. Спасибо.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
cardinal
Дата 11.11.2004, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата(korob2001 @ 11.11.2004, 21:16)
Каким способом лучше всего создавать анимацию?

Прямым обращением к видео карте smile


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
-Mikle-
Дата 12.11.2004, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Цитата(cardinal @ 12.11.2004, 03:47)
Прямым обращением к видео карте

И напрямую из VB, минуя всякие там DirectX'ы smile


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Гость_Vladimir
Дата 17.2.2005, 12:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Кто нибудь знает как настроить Outlook Express на Yahoo.com
у меня нихрена не получается
что писать в строке сервера pop3 и smtp
  Вверх
cardinal
Дата 17.2.2005, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Модератор: Пожалуйста, один топик - один вопрос.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Exception
Дата 17.2.2005, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 7
Всего: 186



Цитата
Кто нибудь знает как настроить Outlook Express на Yahoo.com
у меня нихрена не получается
что писать в строке сервера pop3 и smtp

На топик посмотри! Хренась, "Анимация"!!!
При чем тут Outlook, Yahoo.com и pop3 с smtp???
Ты кажца заблудился smile

PM   Вверх
~FoX~
Дата 18.2.2005, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 10
Всего: 68



Вот если кому интересно, я тут статейку накатал.......

2D анимация.

И так приступим.

Для работы нам понадобиться API функция - BitBlt.

Функция BitBlt выполняет передачу битовых блоков данных о цвете, соответствующих прямоугольнику пикселей из заданного исходного контекста устройства в целевой контекст устройства. И лежит она в Gdi32.lib

А вот её С прототип:

Код


BOOL BitBlt(
HDC hdcDest, // дескриптор целевого контекста устройства
int nXDest,  // X-координата левого верхнего угла целевого прямоугольника
int nYDest,  // Y-координата левого верхнего угла целевого прямоугольника
int nWidth,  // ширина целевого прямоугольника
int nHeight, // высота целевого прямоугольника
HDC hdcSrc,  // дескриптор исходного контекста устройства
int nXSrc,   // X-координата левого верхнего угла исходного прямоугольника
int nYSrc,   // Y-координата левого верхнего угла исходного прямоугольника
DWORD dwRop  // код операции
);



А возвращает эта функция не ноль если все прошло успешно и ноль если в чем то проблема.

Жутко выглядит на первый взгляд, не правда ли?
Но не пугайтесь ни чего страшного в ней нет.

Переходим к практике.
Первым делам создаем новый проект. И объявляем в области General нашу функцию. А объявляется она следующим образом:

Код


Private Declare Function BitBlt Lib "gdi32" _
 (ByVal hDestDC As Long, _
  ByVal X As Long, _
  ByVal Y As Long, _
  ByVal nWidth As Long, _
  ByVal nHeight As Long, _
  ByVal hSrcDC As Long, _
  ByVal xSrc As Long, _
  ByVal ySrc As Long, _
  ByVal dwRop As Long) As Long



Дальше мы опишем несколько глобальных переменных необходимых нам для работы:

Код


Dim PicHeight As Single 'высота картинки
Dim PicWidth As Single,'ширина картинки
Dim SKadr As Integer 'счетчик кадров



Теперь будем рисовать smile
А нарисуем мы несколько картинок быстрый просмотр которых даст эффект движения (как кадры в мультиках).
Но этого недостаточно. Дабы на нашей картинки мы могли использовать прозрачный цвет (ну скажем что нарисовать бублик с дыркой в середине) нам необходимы маски наших картинок. Маска выглядят точно так же как и картинка, но все цвета не являющиеся цветом фона обращены в черный. Такое можно изобразить в любом граф. редакторе.

И так у меня получилось 6 изображений (кадров) и соответственно 6 изображений масок.
Дальше мы открываем нашу форму и устанавливаем свойство AutoRedraw в значение True. Теперь на понадобиться массив из 6 Image, в которые мы загрузим наши кадры и 6 Image, в которые мы загрузим наши маски. Внимательно следите что бы кадр и маска к этому кадру имели одинаковые индексы. Первый массив мы назовем Kadr(), а второй соответственно Msk(). Установим у всех Image свойства Visible=False, AutoRedraw=True, AutoSize=True.
Теперь бросаем на форму таймер и устанавливаем свойство Interval ну например 50.
И еще на понадобиться два PictureBox для вывода нашего изображения. Кстати их тоже сделаем невидимыми Visible=False.

Все приготовления завершены, приступаем к кодингу:

Первое что мы делаем это узнаем размер картинки которую мы будем показывать:


Код


Private Sub Form_Load()
Skadr=0
PicHeight = Kadr(SKadr).Width
PicWidth = Kadr(SKadr).Height
End Sub



Теперь добавим процедуру в наш таймер.

Код


Private Sub Timer1_Timer()

Me.Cls 'Очистим нашу форму

PictureBox1.Picture = Msk(i).Picture
PictureBox2.Picture = Kadr(i).Picture

'Приступим к рисованию
BitBlt Me.hDC, 0, 0, PicWidth, PicHeight, PictureBox1.hDC, 0, 0, vbMergePaint
BitBlt Me.hDC, 0, 0, PicWidth, PicHeight, PictureBox2.hDC, 0, 0, vbSrcAnd

'Обновимся
Me.Refresh

'Увеличиваем счетчик кадров
'и если счетчик превосходит количество кадров возвращаем его в 0
SKadr = SKadr + 1
If SKadr > (Kadr.Count - 1) Then SKadr = 0

End Sub



Все готово!!! Можете пробывать запускать проект и наблюдать как у вас на форме происходит невообразимой кросаты действо называемое анимацией

З.Ы.Статья не претендует на полноту изложения, она просто описывает один из вариантов воспроизведения анимации.

З.З.Ы. Надеюсь она кому ни будь поможет.



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
cardinal
Дата 18.2.2005, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Уже в FAQ'e smile

VB-ART-002308


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Voldemar2004
Дата 4.4.2005, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Вот посмотрите:
Timer.Index = 0,
2-a PictureBox

в General

Код

Const f_name = "mult.bmp"   ' имя файла, содержащего
                            ' кадры фильма
Const Nframe = 5           ' количество кадров в фильме
                            '(для данного файла)
Dim fW As Integer           ' ширина и высота кадра
Dim fH As Integer
Dim currentFrame As Integer ' номер текущего кадра



Код


Private Sub Form_Initialize()
   Picture2.Visible = False
   Picture2.AutoSize = True
   ' фильм загружается в Picture2 полностью, а затем
   ' по кадрам выводится в Picture1
   Picture2.Picture = LoadPicture(CurDir + "\" + f_name)
           
   fW = Round(Picture2.Width / Nframe)
   fH = Picture2.Height
   
   Picture1.Height = fH
   Picture1.Width = fW
   
   currentFrame = 1
   
   Timer1.Interval = 100
   Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
   ' если выводились все кадры -  переход к первому
   If currentFrame > Nframe Then currentFrame = 1
      
   ' вывод кадра
   Picture1.PaintPicture Picture2.Picture, _
   0, 0, , , fW * (currentFrame - 1), 0, fW, fH
   ' PaintPicture выводит часть Picture2.Picture в
   ' Picture1.Picture:
   ' 0, 0 - координаты левого верхнего угла области вывода,
   ' fW * (currentFrame - 1), 0 - координаты начала области,
   ' из которой будет копироваться изображение,
   ' fW, fH - размеры копируемой области
    
   currentFrame = currentFrame + 1
End Sub


Добавлено @ 21:19
ПРимер взял из "Освой на примерах", Никита Культин автор книги. В качестве фоток хотел использовать свой аватарчик (Осла из Фильма), но сделал Ogg Vorbis Fish.
ЧЕрт потерял у вас тут кнопку "присоединить файл" - послал бы mult.bmp c примерчиком.

Это сообщение отредактировал(а) Voldemar2004 - 4.4.2005, 21:20


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
~FoX~
Дата 5.4.2005, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 10
Всего: 68



Цитата(cardinal @ 18.2.2005, 19:33)
Уже в FAQ'e

Дякою smile


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.