Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > PureBasic

PureBasic Мощный кросс-платформенный язык среднего уровня на основе BASIC. Подходит для решения широкого круга задач.

Ответ
 
Опции темы
Старый 10.03.2015, 01:49   #1
barsunduk
ПроЭктировщик
 
Аватар для barsunduk
 
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений
(для 271 пользователей)
Распаковка из архива-ресурса мимо файла

кто-нибудь в курсе, можно ли сообразить какой-то аналог разархиватора? только не в файл чтобы распаковывал нужное вхождение, а в память. если конкретно - хочу все ресурсы запаковать в архив zip и доставать по одному файлу. что-то типа этого кода (см. ниже), но вместо ExtractWhatEverWayPngFromZipToBuffer(some_paramete rs) - рабочая процедурка чтоб была:

UseZipPacker()
 
Procedure CatchPng(pngfilename.s)
  *
Buffer AllocateMemory(idunno_100500bytes)
  
PngSize ExtractWhatEverWayPngFromZipToBuffer(some_parameters)
  
res CatchImage(#PB_Any, *Buffer, PngSize)
  
ProcedureReturn res
EndProcedure
 
png 
CatchPng("imagefromzip.png")
Debug png
 
DataSection
  zipStart
:
  
IncludeBinary "data.zip"
  
zipEnd:
EndDataSection 
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
(Offline)
 
Ответить с цитированием
Старый 10.03.2015, 03:47   #2
barsunduk
ПроЭктировщик
 
Аватар для barsunduk
 
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений
(для 271 пользователей)
Ответ: Распаковка из архива-ресурса мимо файла

похоже, в пурике это делается только через файл. ну, можно сохранять его во временную папку.
как прикрутить архив к ресурсам EXE
barsunduk © 2015
UseZipPacker
()
архив с ресурсами
Enumeration
  
#Pack
EndEnumeration

прочитать текстовый файл из архива
Procedure
.s unzipTxt(filename.s)
  
res.""
  
Size #False
  
If ExaminePack(#Pack)
    
While NextPackEntry(#Pack)
      
If PackEntryName(#Pack) = filename
        
Size PackEntrySize(#Pack, #PB_Packer_UncompressedSize)
        
*Buffer AllocateMemory(Size)
        
Size UncompressPackMemory(#Pack, *Buffer, Size, filename)
        
res PeekS(*BufferSize#PB_UTF8)
      
EndIf
    
Wend
  
EndIf
  
ProcedureReturn res
EndProcedure

прочитать картинку из архива
Procedure unzipSprite
(filename.s)
  
res #False
  
Size #False
  
If ExaminePack(#Pack)
    
While NextPackEntry(#Pack)
      
If PackEntryName(#Pack) = filename
        
Size PackEntrySize(#Pack, #PB_Packer_UncompressedSize)
        
*Buffer AllocateMemory(Size)
        
Size UncompressPackMemory(#Pack, *Buffer, Size, filename)
        
res CatchSprite(#PB_Any, *Buffer, #PB_Sprite_AlphaBlending)
      
EndIf
    
Wend
  
EndIf
  
ProcedureReturn res
EndProcedure

примеры использования:
Procedure onCreate()
  ; 
создать файл архива и открыть его для загрузки из него ресурсов
  fn
.GetTemporaryDirectory() + "temparjfile"
  
If CreateFile(0fn)
    
WriteData(0, ?zipData, ?zipEnd - ?zipData)
    
CloseFile(0)
  Else
    
MessageRequester("ERROR""Не удаётся сохранить файл" Chr(13) + fn)
    
End
  
EndIf
  If 
OpenPack(#Pack, fn, #PB_PackerPlugin_Zip)
    
;
  Else
    
MessageRequester("ERROR""Не удаётся прочитать файл" Chr(13) + fn)
    
End
  
EndIf
  ; 
считываем атлас спрайтов
  strAtlas 
unzipTxt("atlas.atlas")
  ; 
считываем карту уровней
  strLevels 
unzipTxt("levels.txt")
  ; 
инициализация системы спрайтов и мыши
  InitSprite
()
  
InitMouse()
  
InitSound()
  ; 
создаём экран внутри нашего окна размером с основной десктоп
  dskt_cnt 
ExamineDesktops()
  
scr OpenWindowedScreen(WindowID(#Window), 0, 0, DesktopWidth(0), DesktopHeight(0), 0, 0, 0)
  
активируем мышь
  ReleaseMouse
(#True)
  
читаем картинки-спрайты из архива
  sprBg 
unzipSprite("bg.jpg")
  
sprAtlas unzipSprite("atlas.png")
  ; 
фильтры для спрайтов
  SpriteQuality
(#PB_Sprite_BilinearFiltering)
  
закрыть файл архива
  ClosePack
(#Pack)
EndProcedure

DataSection
  zipData
:
  
IncludeBinary "data/data.zip"
  
zipEnd:
EndDataSection 
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
(Offline)
 
Ответить с цитированием
Старый 11.03.2015, 23:51   #3
Пётр
Нуждающийся
 
Регистрация: 23.05.2007
Сообщений: 95
Написано 34 полезных сообщений
(для 53 пользователей)
Ответ: Распаковка из архива-ресурса мимо файла

Сообщение от barsunduk Посмотреть сообщение
похоже, в пурике это делается только через файл.
В справке можно найти функции AddPackMemory(), CompressMemory(), UncompressMemory() и UncompressPackMemory()

Можно также написать свою реализацию архива. http://purebasic.mybb.ru/viewtopic.php?id=210
(Offline)
 
Ответить с цитированием
Старый 12.03.2015, 19:42   #4
barsunduk
ПроЭктировщик
 
Аватар для barsunduk
 
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений
(для 271 пользователей)
Ответ: Распаковка из архива-ресурса мимо файла

Пётр, спасибо за информацию и ссылки.
но я изучил справку и проверил на практике. работа с атласами файлов осуществляется исключительно при работе с файлами. создавать собственный архиватор с атласом запакованных ресурсов желания нет. ибо пакую их именно затем, что на выходе получается архив с этой самой картой. а она то мне и нужна.
так что продолжу использовать свой вариант. пара секунд при загрузке не такая уж и глобальная потеря.
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
(Offline)
 
Ответить с цитированием
Старый 19.03.2015, 11:54   #5
Maxus
ПроЭктировщик
 
Регистрация: 17.02.2006
Сообщений: 144
Написано 13 полезных сообщений
(для 36 пользователей)
Сообщение Ответ: Распаковка из архива-ресурса мимо файла

Есть варианты не прибегая к файлам. Копайте в перехват WinAPI
(Offline)
 
Ответить с цитированием
Старый 19.03.2015, 13:49   #6
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Распаковка из архива-ресурса мимо файла

ОМГ!!! Максус - ты где пропадал?!!!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 19.03.2015, 13:51   #7
Maxus
ПроЭктировщик
 
Регистрация: 17.02.2006
Сообщений: 144
Написано 13 полезных сообщений
(для 36 пользователей)
Стрелка Ответ: Распаковка из архива-ресурса мимо файла

Работал, детей воспитывал.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Maxus за это полезное сообщение:
impersonalis (19.03.2015), SBJoker (19.03.2015)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 21:34.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com