purebasic.info

PureBasic forum
Текущее время: Пн сен 16, 2019 1:30 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Анимация
СообщениеДобавлено: Вт сен 03, 2019 6:16 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 882
Благодарил (а): 95 раз.
Поблагодарили: 26 раз.
Пункты репутации: 5
вот такой вариант, непробовал, но вроде музыку тоже можно
этим же спосом загружал комбобокс
незабудьте, Data и Read var должны быть одного типа, иначе реад по диагоноли будет читать
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
DataSection
IncludePath "pics/"
sav1: :IncludeBinary "save1.png"
sav2: :IncludeBinary "save2.png"
sav3: :IncludeBinary "save3.png"
sav4: :IncludeBinary "save4.png"
 
inSave:
; если одинаковая межкадровая задержка
;Data.i ?sav1, ?sav2, ?sav3, ?sav4
 
; или с разной межкадровой задержкой
Data.i ?sav1, 100, ?sav2, 200, ?sav3, 300, ?sav4, 400
 
EndDataSection
 
Procedure aGet(a)
ProcedureReturn ImageID(CatchImage(#PB_Any, a))
EndProcedure
 
 
ImageGadget(23, 9, 9, 0, 0, 0)
For j=1 To 5; количество повторов, если оно нужно
Restore inSave; становимся на метку нужных данных
; здесь не важны цифры, шаг и направление, важно только количество циклов
For k=1 To 4; крутим анимацию
Read f; картинка
Read t; время, только если требуется разное межкадровое время
Debug ""+t+pb+f
SetGadgetState(23, aGet(f))
Delay(t)
Next
Next
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Анимация
СообщениеДобавлено: Вт сен 03, 2019 7:46 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11515
Благодарил (а): 4 раз.
Поблагодарили: 470 раз.
В справке есть такой пример.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
; Включаем GIF декодер
UseGIFImageDecoder()
 
; Загружаем GIF файл
If LoadImage(0, #PB_Compiler_Home+"Examples/Sources/Data/PureBasicLogo.gif")
 
  OpenWindow(0, 100, 100, ImageWidth(0), ImageHeight(0), "GIF просмотрщик")
 
  CanvasGadget(0, 0, 0, ImageWidth(0), ImageHeight(0))
 
  ; Добавить таймер для анимации GIF, сразу начинает отображать первый кадр без задержки
  AddWindowTimer(0, 0, 1)
 
  Repeat
    Event = WaitWindowEvent()
   
    If Event = #PB_Event_Timer
      SetImageFrame(0, Frame)
     
      ; Каждый кадр GIF может иметь свою собственную задержку, поэтому измените таймер соответственно
      ;
      RemoveWindowTimer(0, 0)
      AddWindowTimer(0, 0, GetImageFrameDelay(0))
     
      If StartDrawing(CanvasOutput(0))
        DrawImage(ImageID(0), 0, 0)
        StopDrawing()
      EndIf
     
      ;Переход к следующему кадру
      Frame+1
      If Frame >= ImageFrameCount(0) ; Переход к первому кадру для воспроизведения в цикле
        Frame = 0
      EndIf
    EndIf
   
  Until Event = #PB_Event_CloseWindow
Else
  Debug "Невозможно загрузить файл: " + Filename$
EndIf
 


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Анимация
СообщениеДобавлено: Вт сен 03, 2019 8:32 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 890
Благодарил (а): 2 раз.
Поблагодарили: 45 раз.
Пункты репутации: 9
У него нужен пнг декодер,а таймер даёт постоянную велечину времени цикла а так можно задать к примеру ходьбу бег и разбег торможение. :roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
 
UsePNGImageDecoder()
Structure animaciy
  kartinka.i
  time.i
EndStructure
 
Procedure anime()
 
EndProcedure
Procedure.i potokOUT(*Interval)
  Protected *animaciy.animaciy
Repeat  
  For i=0 To 40 Step 8
    *animaciy.animaciy=?strukturaanime+i
   
   SetGadgetState(0,ImageID(CatchImage(#PB_Any,*animaciy\kartinka)))
   Delay(*animaciy\time)
  Next
  ;Delay(*Interval)
 ForEver
EndProcedure
 
 
OpenWindow(0,200,100,700,600,"")
If OpenWindow(0,0,0,500,500,"Rectangle Selection Demo",#PB_Window_SystemMenu| #PB_Window_SizeGadget | #PB_Window_MinimizeGadget| #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered)
ImageGadget(0, 200, 200,200,200, 0)
ButtonGadget(1,0,0,40,20,"пуск")
ButtonGadget(2,0,40,40,20,"стоп")
 
 
Global thread.i
 
 
Repeat
  Event = WaitWindowEvent()
    If Event=#PB_Event_Gadget
     Select EventGadget()
       Case 1
      thread = CreateThread(@potokOUT(),10)
       If thread
        ThreadPriority(thread,5)
      EndIf
 
     
       Case 2  
         KillThread(thread)
 
     EndSelect
    EndIf
 Until Event = #PB_Event_CloseWindow
 EndIf
 DataSection
IncludePath "/"
sav1: :IncludeBinary "1.png"
sav2: :IncludeBinary "2.png"
sav3: :IncludeBinary "3.png"
sav4: :IncludeBinary "5.png"
sav5: :IncludeBinary "4.png"
sav6: :IncludeBinary "6.png"
strukturaanime:
Data.i ?sav1,100,?sav2,100,?sav3,1000,?sav4,100,?sav5,100,?sav6,100
EndDataSection
 
 
 
 
 
 
 
 
 
 



Вложения:
Новая сжатая ZIP-папка.zip [19.42 KiB]
Скачиваний: 6
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Анимация
СообщениеДобавлено: Вт сен 03, 2019 9:05 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн мар 02, 2009 3:46 pm
Сообщений: 215
Откуда: РФ Тверская область
Благодарил (а): 7 раз.
Поблагодарили: 8 раз.
Пункты репутации: 0
Сергейчик писал(а):
У него нужен пнг декодер,а таймер даёт постоянную велечину времени цикла а так можно задать к примеру ходьбу бег и разбег торможение. :roll:

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

_________________
Жизнь коротка. Потерпи немножко.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Анимация
СообщениеДобавлено: Вт сен 03, 2019 9:42 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11515
Благодарил (а): 4 раз.
Поблагодарили: 470 раз.
Сергейчик писал(а):
У него нужен пнг декодер,а таймер даёт постоянную велечину
1500 файлов лучше одного? И в каждом кадре хранится его длительность чего нет в png.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Анимация
СообщениеДобавлено: Ср сен 04, 2019 6:41 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6545
Благодарил (а): 29 раз.
Поблагодарили: 220 раз.
Пункты репутации: 59
ALEXix писал(а):
Думаю, разность в скоростях подобных вещей лучше регулировать количеством кадров, а цикл игрового таймера держать постоянным.

Абсолютно верно!
Но не думаю, что newJS этот кусок кода написал для игры. Скорее всего маленькая анимация где то в программке. Тем более, в игровом цикле проигрывать анимацию внутри FOR-NEXT это плохая идея, как и использование анимации GIF.
В Пурике есть GrabImage, GrabSprite и ClipSprite. Позволяет загрузить только 1 файл с нужными изображениями и использовать их как вздумается.

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Анимация
СообщениеДобавлено: Ср сен 04, 2019 8:22 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 882
Благодарил (а): 95 раз.
Поблагодарили: 26 раз.
Пункты репутации: 5
да это просто ещё один вариант анимации, плюс возможность не только анимацию крутить
да Виталя, в момент сохранения файла диск крутится, можно и в поток засунуть когда будет надо
возможно сделать в виде функции которой передавать метку и количество повторов
тут вариантов как тараканов в многоэтажке :D
с Петром абсолютно согласен, одна большая картинка должна весить немного меньше, но в каждом случае нужно соизмерять количество писанины и количество полученного кода с маленькими картинками и простым кодом
надеюсь ни кто не думает что ради этих иконок я декодер подключил
ну и вопрос, а уже у всех верия РВ с гиф декодером?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot] и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB