forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Как ускорить загрузку ресурсов если их много (http://forum.boolean.name/showthread.php?t=13385)

YaLAS 17.11.2010 09:51

Ответ: Как ускорить загрузку ресурсов если их много
 
vladpol1, ИМХО включи картинку заставку с надписью типа "Ожидайте...", можешь включить музычку пользователю (в лупе, если время загрузки намного длиннее музыки), а если уж хочеться прогресс бар, то можно не особо морочась выводить полоску не рассчитываемую дикими методами а с дискретными значениями после прохождения разных блоков загрузки, например:

Код:

вывели заставку, включили музыку
прогресс=0: вывести прогресс_бар
зарузили шрифты
прогресс=2: вывести прогресс_бар
зарузили картинки
прогресс=15: вывести прогресс_бар
....
зарузили последние ресурсы
прогресс=100: вывести прогресс_бар

показали главное меню


vladpol1 17.11.2010 20:49

Ответ: Как ускорить загрузку ресурсов если их много
 
YaLAS, по моему в посте 10 уже есть подобный код с
прогреесом 5 - 10 - 15 ... 100

Прилагаю мой 100% рабочий код загрузки любых файлов с полосой загрузки.
Для проверки скиньте в папку C:\gr\ любые 5 *.jpg фото большого размера
и назовите их 1,2,3,4,5. Для наглядности: вначале прогресс бар будет показывать
медленно загрузку этих изображений, затем быстро пробежит до конца.


Код:

;зогрузко
Graphics 640,480,0,2
fArial=LoadFont("Arial",24,1,1)
SetFont fArial
Color 250,170,190: Text 310,250,"З  А  Г  Р  У  З  К  А",True

Color 70,40,70: Rect 45,210,555,35,1
Const pr=25

For n=50 To 575 Step pr
        Color 255,200,130: Rect n,215,20,25,1
                Local a=n/pr
                        gr1=LoadImage("C:\gr\"+a+".jpg")
                        gr2=LoadImage("C:\gr\"+a+1+".jpg")
                        gr3=LoadImage("C:\gr\"+a+2+".jpg")
                        gr4=LoadImage("C:\gr\"+a+3+".jpg")
                        gr5=LoadImage("C:\gr\"+a+4+".jpg")               
                Delay 1
Next
Delay 300
Color 250,170,190: Text 310,275,"З А В Е Р Ш Е Н А",True
Text 310,300,"нажмите любую клавишу",True
WaitKey ()


moka 17.11.2010 21:08

Ответ: Как ускорить загрузку ресурсов если их много
 
Цитата:

Сообщение от vladpol1 (Сообщение 169072)
Код:

;зогрузко
Graphics 640,480,0,2
fArial=LoadFont("Arial",24,1,1)
SetFont fArial
Color 250,170,190: Text 310,250,"З  А  Г  Р  У  З  К  А",True

Color 70,40,70: Rect 45,210,555,35,1
Const pr=25

For n=50 To 575 Step pr
    Color 255,200,130: Rect n,215,20,25,1
        Local a=n/pr
            gr1=LoadImage("C:\gr\"+a+".jpg")
            gr2=LoadImage("C:\gr\"+a+1+".jpg")
            gr3=LoadImage("C:\gr\"+a+2+".jpg")
            gr4=LoadImage("C:\gr\"+a+3+".jpg")
            gr5=LoadImage("C:\gr\"+a+4+".jpg")       
        Delay 1
Next
Delay 300
Color 250,170,190: Text 310,275,"З А В Е Р Ш Е Н А",True
Text 310,300,"нажмите любую клавишу",True
WaitKey ()


Ужас! :4to:
Давайте, заDelay'им вообще везде, просимулируем всякую задержку. Сделаем загрузку в 5 раз дольше...

vladpol1 17.11.2010 21:16

Ответ: Как ускорить загрузку ресурсов если их много
 
Цитата:

Давайте, заDelay'им вообще везде, просимулируем всякую задержку. Сделаем загрузку в 5 раз дольше...
Если такой умный, попробуй без Delay 1, считай это для наглядности

baton4ik 17.11.2010 21:17

Ответ: Как ускорить загрузку ресурсов если их много
 
Цитата:

Сообщение от MoKa (Сообщение 169077)
Ужас! :4to:
Давайте, заDelay'им вообще везде, просимулируем всякую задержку. Сделаем загрузку в 5 раз дольше...

Да, оригинальный подход. Не выходит сделать "правдивой" загрузки, что б точно отражала ход процесса, так сделаем задержку специально, пусть игроки думают, что всё "по-взрослому", даже задержка в загрузке есть!

vladpol1 17.11.2010 21:24

Ответ: Как ускорить загрузку ресурсов если их много
 
Цитата:

Да, оригинальный подход. Не выходит сделать "правдивой" загрузки, что б точно отражала ход процесса
Как я писал выше это
Для наглядности: вначале прогресс бар будет показывать
медленно загрузку этих изображений, затем быстро пробежит до конца,
чтобы была ЛУЧШЕ видна загрузка, а расчитать чтобы загрузка
была по всей длинне прогресс бара не проблема

vladpol1 17.11.2010 21:35

Ответ: Как ускорить загрузку ресурсов если их много
 
Пожалуйста без Delay, конечно было верней поставить Flip для отображения прогресса

Код:


;зогрузко
Graphics 640,480,0,2
fArial=LoadFont("Arial",24,1,1)
SetFont fArial
Color 250,170,190: Text 310,250,"З  А  Г  Р  У  З  К  А",True

Color 70,40,70: Rect 45,210,555,35,1
Const pr=25

For n=50 To 575 Step pr
    Color 255,200,130: Rect n,215,20,25,1
        Local a=n/pr
            gr1=LoadImage("C:\gr\"+a+".jpg")
            gr2=LoadImage("C:\gr\"+a+1+".jpg")
            gr3=LoadImage("C:\gr\"+a+2+".jpg")
            gr4=LoadImage("C:\gr\"+a+3+".jpg")
            gr5=LoadImage("C:\gr\"+a+4+".jpg")       
        Flip
Next
Color 250,170,190: Text 310,275,"З А В Е Р Ш Е Н А",True
Text 310,300,"нажмите любую клавишу",True
WaitKey ()


moka 17.11.2010 22:05

Ответ: Как ускорить загрузку ресурсов если их много
 
Код:

Const pr=25
For n=50 To 575 Step pr

Код:

Local a=n/pr
Да ёмаё! Если ты пишешь код в помощь кому-то пиши его нормально..

Сперва определи количество ресурсов (файлов), предположим их 44, далее примерно такой код:

Код:

Const loadingBarHeight=20
Rect 0,graphicsHeight-loadingBarHeight,graphicsWidth,loadingBarHeight,0
resourceFiles=44
For n=0 to resourceFiles
  Rect 2,graphicsHeight-(loadingBarHeight-2),((graphicsWidth-4)/Float(resourceFiles))*n,(loadingBarHeight-4),1
  ... Load[n] Whatever ...
Next

Раздели стадию загрузки на отдельные стадии, одна сбор списка ресурсов которые нужно загрузить (имена файлов), и запиши их в класс или массив. И только потом загружай.
И то это говнокодерство, никто не будет так грузить информацию, должны быть файлы форматов уровней или т.п. которые содержат списки и информацию о медии, где она и для чего должна быть..

vladpol1 17.11.2010 22:32

Ответ: Как ускорить загрузку ресурсов если их много
 
Цитата:

Да ёмаё! Если ты пишешь код в помощь кому-то пиши его нормально
MoKa мой код нормально работает и прост для понимания начинающим,
в твоём коде 6 знаков минус, умножить, разделить, столько расчётов!
Это считается нормальным кодом!? Хорошо отразится на скорости загрузки...

moka 18.11.2010 02:15

Ответ: Как ускорить загрузку ресурсов если их много
 
Иди учи мат часть!
20 вычитаний и 5 умножений каждый цикл... Знаешь сколько нужно просчётов чтобы в RealTime из камеры с 30 fps, разрешением в 1960х1080, используя нейронные сети, распозновать объекты машин, определять перед/зад её (по цвету знака, белый/жёлтый), и далее уже распознавать саму информацию со знака, затем эти данные посылаются на сервер, и там с невиданной частотой будут проверки в базах данных, например въезжала ли эта машина уже в центр города, или не в розыске ли она и т.п.
Это учитывая что таких камер тысячи.
Так вот теперь к теме: оптимизировать на мелочи и ровном месте, где 1мс на протяжении 3 секунд загрузки (что есть 3000мс), это много? Да темболее там и 1 мс в попу не будет.
В третьих, я предоставил код в котором есть возможность настроить высоту полосы загрузки.
И чем легко читаемый код плохой?

УЧИСЬ ПРОГРАММИРОВАТЬ.
Давай, школота будет учить жизни дедушек...

Ладно, чего я тут, не мне же потом с таким кодом работать, просто неприятно, когда по работе приходиться работать с говнокодом, от какого-то зазработчика, который "профи", и работает в своей сфере уже более 5 лет, это говорит о том, что дурные привычки, и программировать нужно учиться правильно с ранних начинаний.

Конкретнее по некорректности твоего кода:
1. "Const pr=25", хорошо, константа, число 25, а что это простите? pr - много о чём говорит.
2. "For n=50 To 575 Step pr", тоесть у нас если посчитать 21 итераций, учитывая что это потому что pr=25. А почему именно 25? Ладно забей, идём дальше:
3. "Color 255,200,130: Rect n,215,20,25,1", установка цвета каждый цикл, это вызов функции, перелокация памяти (надеюсь знаком с областями памяти, локальные/приватные переменные и т.п.?). Вызов функции установки цвета. Учитывая что это 2D, и отрисовка происходит по вызову, то установка также, произойдёт по вызову, или надеюсь Сибли просто присваивает значения 3 переменным, которые используются после (хотя учитывая что miniB3D - это полный говнокод, то страшно подумать что есть Blitz3D внутри..). Почему не вынести установку цвета прямо перед вызовом цикла? Религия не позволяет?
4. "Local a=n/pr" - простите, получать индекс таким образом? Благо я смекалистый, понимаю что a - выступает далее в роли "типо индекса", я изменю длину Step'а или колличество циклов, индекс пойдёт лесом, и всё в цикле на нём основонное тоже пойдёт дебрями.. Далее длина полосы загрузки, привязана именно к данному случаю, и "магическому" набору чисел. В моём же примере, неважно сколько медии, она всегда будет корректно отображать именно позицию, от левой части экрана до правой.
5. "gr1=LoadImage("C:\gr\"+a+".jpg")" и такие же дублежи далее, ты не смекнул что во первых это можно было обернуть в ещё один цикл, ну это так, а во вторых, проследи за "a": первая итерация а=2, вторая итерация а=3, последняя а=23. Это у нас таки номера файлов нужны: 2, 21, 22, 23, 24, 3, 31, 32, 34, 4 ..... 23, 231, 232, 233, 234

Думаю комментарии излишни..

Для пущей твоей практики, задачка (если конечно ты хочешь учиться, и прислушаешься к советам):
есть файлы, список имён файлов храниться в виде строк в текстовом файле:
Код:

ui_compass_base.png
ui_compass_glass.png
st_building_house_1.b3d
veg_tree_palm_2.b3d
veg_tree_palm_2_diffuse.jpg
veg_tree_palm_2_alpha.png
veg_tree_palm_2_normal.png
prop_case_wooden_1.b3d
prop_case_wooden_diffuse.jpg
prop_case_wooden_normal.png

Как видишь тут 10 строк. каждая разного имени, это моделька, или текстурка.
Пробегаешься по всем строкам, записываешь их в массив. Теперь у тебя "level_resources$[11]" массив, нужно загрузить эту медию, предположим она в одной папке, неважно в какой.
Напиши код который нарисует на экране полосу загрузки, при этом полоса будет иметь рамку красного цвета, затем внутрь маленький отступ (1 пиксель), и там сама полоска.
Эта полоса должна пройти во время загрузки от начала, и до конца.
Эта полоса должна иметь лёгкую возможность менять позицию, например я хочу сделать её разной длины (разные разрешения экрана), и в разной позиции на экране тоже (снова разные разрешения).
Экран чёрный, рамка оранжевая (255,128,0), а полоса голубая (0,128,255)

Всё просто тут, пишеться менее чем в 10 строк (используя только объявление переменных в одной строке, а остальное без ":").

Randomize 18.11.2010 09:34

Ответ: Как ускорить загрузку ресурсов если их много
 
MoKa, тебя конкретно задели. Капитально ответил! Но не напрасно ли? Поймут ли?

Касательно загрузки ресурсов. Я в бородатые времена писал менеджер ресурсов. Ф-ция создания принимала на вход либо папку с файлами либо архив. После этого я вызывал ф-цию RM_Prepare() которая генерила список, a тип загружаемого ресурса брался из расширения (не надёжно, но для себя писал же). Отдельные от моделей текстуры лежали в отдельных папках. После этого я брал кол-во ресурсов во временную переменную и вызывал цикл, в котором каждый пробег вызывал ф-цию RM_LoadNextResource. После чего нужный ресурс можно было получить ф-цией RM_GetResouce(FileName$). Работало довольно удобно. Будет время - могу выложить если найду.

St_AnGer 18.11.2010 13:06

Ответ: Как ускорить загрузку ресурсов если их много
 
Абалдеть... МоКа, первый раз вижу тебя таким. Вот что бывает когда не слушают старших по уму товарищей...

impersonalis 18.11.2010 13:20

Ответ: Как ускорить загрузку ресурсов если их много
 
Цитата:

Сообщение от St_AnGer (Сообщение 169147)
Абалдеть... МоКа, первый раз вижу тебя таким. Вот что бывает когда не слушают старших по уму товарищей...

да нет: на свой статус и опыт MoKa не давил, всё правильно он откомменитл без ейджизма и по делу :super:
Я когда говнокод увидел аж в осадок выпал, хотел откомментить, но тут уже: не убавить не прибавить

Gector 18.11.2010 14:02

Ответ: Как ускорить загрузку ресурсов если их много
 
Полезно.:super: Учтем.

vladpol1 18.11.2010 14:17

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

Только что же никто не помог Colossus'у нормальным кодом когда он спрашивал как огранизовать полосу загрузки??
Или только можем обсуждать и кичиться?


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot