forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Загрузка (http://forum.boolean.name/showthread.php?t=4494)

AndruXa 19.09.2007 19:48

Загрузка
 
Подскажите пжалста как сделать путевую загрузку.:SOS: Вот допустим грузится большой город некоторое время, все это время мы видим черный экран, а как сделать ползущую линию, или надпись Пожалуйста подождите:) Ну я надеюсь вы поняли, что я имею ввиду:)

Данил 19.09.2007 19:50

Re: Загрузка
 
хм... так.. щас отвечу

*отвечаю*

в общем, если город по частям загружается, то перед опр загрузкой части ставь:
[blitz]
Cls
Pr = /процент загрузки, или ширина. /
Text GraphicsWidth /2 , GraphicsHeight /2 , "Пожалуйста, подождите"
Rect GraphicsWidth /2 - 50 , GraphicsHeight /2 + 100 , pr, 30 , 1
Flip
[/blitz]

Пример.

[blitz]
Global Pr
Color 255,0,0



*загрузка карты*

Cls
Pr = 20
Text GraphicsWidth /2 , GraphicsHeight /2 , "Пожалуйста, подождите"
Rect GraphicsWidth /2 - 50 , GraphicsHeight /2 + 100 , pr, 30 , 1
Flip

*загрузка карты*

Cls
Pr = 30
Text GraphicsWidth /2 , GraphicsHeight /2 , "Пожалуйста, подождите"
Rect GraphicsWidth /2 - 50 , GraphicsHeight /2 + 100 , pr, 30 , 1
Flip
*загрузка карты*
и так далее
[/blitz]

А если не по частям, то просто

[blitz]
Cls
Text GraphicsWidth /2 , GraphicsHeight /2 , "Пожалуйста, подождите"
Flip
[/blitz]

Кстати, формула для процентов : (GraphicsWidth / общая ширина) / 100 * процент загрузки

AndruXa 19.09.2007 19:59

Re: Загрузка
 
Огроменное спасибище, все оказалось проще, чем я думал. Ща буду разбираться в коде.!

H@NON 19.09.2007 20:52

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

ЛысыЙ_Чук-Иванчук 19.09.2007 23:10

Re: Загрузка
 
Неее
Полоска рулит!!!!
И када её реалезовываеш чече понимаеш то дольше держит блиц на загрузке;)

IGR 20.09.2007 14:29

Re: Загрузка
 
to Данил, это не оптимальный способ !!
и не обезательно карта загрузится когда у тебя полоска станет в 100% !!
или наоборот !!
Ты понемаеш о чем Я ??

надо зделать так:
загрузить карту, засекти время сколько она грузится, а потом делаеш такую же полоску, только двигаться она будет уже по времени которое ты засек !! так будет точнее !!

Noah 20.09.2007 14:55

Re: Загрузка
 
жаль только расхождения от производительности разных машин могут быть. Я бы остановился либо на поэтапной загрузке - если так уж долго, и на "картинке"(всё что угодно полезное что можно почитать, да хоть детали механики игры ala "от дэвов") с сообщением о том чтоб подождали.. загрузка займёт секунд 10 (человек натура ленивая сама и ненавидящая лень в других - поэтому всегда хочет как минимум знать сколько ему надо ждать, даже если это всего секунд 5 - комфорт играющего - много стоит)

IGR 20.09.2007 14:57

Re: Загрузка
 
Цитата:

жаль только расхождения от производительности разных машин могут быть
полоску пустить на второй круг, а если чё, то на третий !!
ну пока не загрузится !!

Noah 20.09.2007 15:02

Re: Загрузка
 
) да, это тоже частый вариант. Я просто такого рода полоски "с детства не люблю" (не больше чем имхо)
По этому поводу гдето ((((( флэшка в сети валяется.. про полоску.. культовая вещь я считаю, жаль не сохранил в своё время: показывается полоска загрузки.. она бежит бежит.. долго так.. уже почти закончилась, вдруг! вопреки ожиданиям она со скрёжетом проламывается через левую границу отведённого ей пространства и продолжает предательски упорно шагать дальше.. а когда и экран заканчивается.. она начинает двигаться вниз экрана по кромке ) вообщем я чуть не уписался от смеха :-D когда она вниз поползла.. не дождался момента пока она весь экран заполнит.. (ползла оч долго)

Вообщем то )) чем не идея такую полоску реализовать прям игре :-D думаю играющие срузу по достоинству оценят юмор программеров )

IGR 20.09.2007 15:12

Re: Загрузка
 
да, согласен, прикольно !!

dimanche13 20.09.2007 15:29

Re: Загрузка
 
Я написал статью о полосках загрузки, которая применима и к LoadingBar. Как тока журнал обновится, Матвей обещал опубликовать.

jimon 20.09.2007 15:35

Re: Загрузка
 
у мну просто есть функция которая вызывается после каждой загрузки
ресурса .... и есть общее количество етих ресурсов
и все :)

IGR 20.09.2007 15:37

Re: Загрузка
 
jimon, показывай !! :)

Damp 20.09.2007 16:03

Re: Загрузка
 
Если бы блиц мог создавать таймеры (например как у визуальных языков), былобы все просто...
А так прийдется разделить загрузку на части, чтобы создать строку статуса, допустим зарузил все кубики обновил статус - это 50% остались еще шарики, и т.д.
Я бы просто вывел картинку, текст и музыку (допустим миди чтоб не тратить цпу).

IGR 20.09.2007 16:05

Re: Загрузка
 
Цитата:

Если бы блиц мог создавать таймеры
таймер на блице = прямые руки !!
самому можно же зделать таймеры !!

Damp 20.09.2007 16:11

Re: Загрузка
 
Ты недочитал - (например как у визуальных языков).
Имеется ввиду таймер-прерывание. Ставишь ему интервал скажем 1000мс и его функция (в д. случае обновление статуса) вызывается независимо ни от каких процессов 1 раз в секунду, на блице таких нет, а жаль...

Noah 20.09.2007 16:31

Re: Загрузка
 
а что кто может кратко рассказать о программировании для двух потоков? (можем отступить от B3D, но тогда только пинципы, а то с семантикой языков бедновато)

Damp 20.09.2007 16:54

Re: Загрузка
 
Принципы просты - объектно ориентированное программирование :)
Если в блице программа идет от строчки к строчке, то в ооп делаются прерывания на какие-то события.
Блиц тоже частично ооп, но не так продвинут по этой части как допустим его коллега вижуал бэйсик.
Где-то даж тема была, что есть dll позоляющая грузить ресурсы отдельным потоком, но ограничений много и неудобств.

Noah 20.09.2007 17:02

Re: Загрузка
 
"в ооп делаются прерывания на какие-то события" сокраментальная для меня фраза, вот где мезаханизм то )) thnks

dimanche13 20.09.2007 18:32

Re: Загрузка
 
При чем здесь прерывания на какие-то события? Бмакс ООП язык, а Б3Д - не ООП. вот и всё.

IGR 20.09.2007 18:35

Re: Загрузка
 
Noah, юзай goto !! :)

Noah 20.09.2007 18:41

Re: Загрузка
 
Кстати goto ) никогда не пользовал

Я о прнципиальной схеме выполнния кода:
не ООП - последовательное выполнение
ООП - есть контролирующая процесс оболочка реализцющая возможность прерываний
(на сколько понял; поправьте если что или отошлите к инфе раскрывающей этот вопрос)

IGR 20.09.2007 18:48

Re: Загрузка
 
http://ru.wikipedia.org/wiki/Объектн...ограммирование

jimon 20.09.2007 18:55

Re: Загрузка
 
блин, "идиоты !"
возможность программы работать с несколькими потоками
ну скажите мне хоть одну вещь которая относится здесь К ООП ?!
блин, ваще ... в блице3д просто нету встроенных средств
управления мультипоточностью
а так мультипоточность не зависит от возможностей языка на прямую :)

что у меня :
в TGui запихан такой код :
Код:

        Field LoadingCurrentState%
        Field LoadingMaxState% = 130
        Field LoadingCountStates% = 0
        Field LoadingBarGui:TGuiProgressBar
        Field LoadingImage:TResourceImage
       
        Function LoadingBarInit()'draw first loading screen
                SetClsColor 0,155,208
                Cls
                Flip 0
        End Function
       
        Method LoadingBar(StateValues% = 1)'work with loading screen

                'if loading bar isnt ever created - please create them
                If LoadingBarGui = Null Then
                        LoadingBarGui = TGuiProgressBar.Create(GraphicsWidth() / 2 - 100,GraphicsHeight() / 2 + 32,200,20)
                End If
               
                If LoadingImage = Null Then
                        LoadingImage = GetResImage("Menu_PleaseWaitLoading")
                End If
               
                'add states
                LoadingCurrentState:+StateValues
               
                'check if max states < current states .. them recalculate max states
                If LoadingCurrentState > LoadingMaxState Then
                        LoadingMaxState = LoadingCurrentState
                End If
               
                'setup progress bar values
                LoadingBarGui.SetValue(LoadingCurrentState,LoadingMaxState)
               
                'update gui module
                Gui.Update()
               
                'draw loading screen
                SetClsColor 0,155,208
                Cls
                DrawImage LoadingImage.Image(),GraphicsWidth() / 2,GraphicsHeight() / 2
                Gui.Draw()
                Flip
               
                'If KeyHit(key_f6) Game.ScreenShot()
        End Method
        Method LoadingBarClose() 'close loading bar
                'free loading bar
                LoadingBarGui.Free()
                LoadingImage = Null
               
                'if we need to calculate this shit - get fuck out message
                If LoadingCountStates = 1 Then
                        RuntimeError "LoadingBar Maximum up to "+LoadingMaxState+" !!!"
                End If
               
                'clear screen
                Cls
                Flip 0
        End Method

потом загрузка :
1) Инит екрана
2) создает ресур манагер
3) грузит ресурсы нужные для ядра :)
4) создает гуи
5) создает екран загрузки
6) все остальное

просто при каждой загрузке ресурса стоит вызов Gui.LoadingBar()
и все

mr.DIMAS 20.09.2007 19:29

Re: Загрузка
 
Цитата:

блин, "идиоты !"
что то смахивает на флейм

HolyDel 21.09.2007 01:07

Re: Загрузка
 
ну блин, есть же либа для б3д - для мультиипоточности.
авоторы чо, зря ночами неспали разрабатывая сие чудо?
и уже в отдельной, выведенной в отдельной поток ф-ии пишеш чо те нада.

Damp 21.09.2007 10:12

Re: Загрузка
 
" При чем здесь прерывания на какие-то события? "
Как причем...? Привсем. Это главный принцип ооп. Есть событие - есть работа, нет - цпу простаивает.
В ооп все функции (окна, кнопки, поля ввода и .т.д.) явл. грубо говоря отдельными прогами (объектами) делящими между собой цпу и общие переменные, и вызываемые ТОЛЬКО по событию (нажатие кнопки, открытие сдрома, истечение интервала таймера).
Прерываение.. не имею ввиду int , и на самом-то деле ни каких параллельных потоков нет... просто время проца делится между всеми поочереди.

IGR 21.09.2007 11:11

Re: Загрузка
 
to HolyDel, что за лыба ??
дай ссылу плиз !!

Noah 21.09.2007 11:57

Re: Загрузка
 
:) Хотя бы название

всёж не спроста у меня голова на плечах )

dimanche13 21.09.2007 13:49

Re: Загрузка
 
Цитата:

Сообщение от Damp
" При чем здесь прерывания на какие-то события? "
Как причем...? Привсем. Это главный принцип ооп. Есть событие - есть работа, нет - цпу простаивает.

Это не главный принцип ООП, да и не принцип ООП вовсе. Работу с таймерами и прерваниями можно сделать и "процедурно программируя". Почитай про ООП. Вот его основные принципы: инкапсуляция, наследование и полиморфизм. http://licrym.org/samouch/7/36/gl10/gl10_1.html

HolyDel 22.09.2007 03:53

Re: Загрузка
 
блин, была такая либа. что то вроде BlitzThreads или BlitzMultiThreads или вообще не Blitz. Но я ее потерял, щаз поискал в нети и не нашел :(. Кто знает где, скажите. Или куда нить залейте если у вас она есть.

H@NON 22.09.2007 12:18

Re: Загрузка
 
Вложений: 2
ВОт, вроде оно. Названия совпадают.

Damp 24.09.2007 10:01

Re: Загрузка
 
dimanche13, ок, это принцип событийного ооп (имел ввиду визуальные языки).
А вот про то как сделать таймер в блице - это уже интересно.
Такая задача (есть мысль написать что-то типа муз. секвенсора):
- у меня есть кусок музыки, он скажем 1627мс времени проигрывания.
- нужно крутить его покругу, петлей, причем +- 5..15 мс портит все воспроизведение, петля звучит прерывисто.
Вопрос как сделать таймер на блице чтоб он вызывался каждые 1627мс?

dimanche13 24.09.2007 11:31

Re: Загрузка
 
Function LoadSound:TSound( url:Object,loop_flag=False ) посмотри еще другие функции в модуле Audio и в хелпе. Может обойдешься и без таймера. Function CreateTimer:TTimer( hertz#,event:TEvent=Null ) а вот и таймер, смотри модуль Timer и снова Хелп.

Damp 24.09.2007 13:41

Re: Загрузка
 
Не.. с саунд функциями только если с wav семплами можно, мп3 дает паузы на концах, с ними только вручную мс указывать.
А вот модуль Timer, чего-то несталкивался - это отдельная длл.
Чего-то в хэлпе не нахожу...?

dimanche13 24.09.2007 13:45

Re: Загрузка
 
я говорю о BlitzMax там ищи Help/Modules/Events/Timers]
ах да и еще, если пишешь какую-то функцию и она подсвечена желтым, то есть ключевая, то единожды нажав на Ф1 получаешь ее протатип снизу, а при вторичном нажатии в первой вкладке Хелп открывается помощь по ней.

Damp 24.09.2007 14:18

Re: Загрузка
 
А... я BlitzMax-то не использую, только Blitz3D и там мне вот больше всего не хватает таймера.
Интересно можно длл написать такую допустим пишешь:
Function UpdateStatus()
Print current_job
End Function ;всеравно ведь тут return наверно нет разници кто фызывает д. функцию сам блиц или из длл?
потом типа:
addr = GetAddr (UpdateStatus);взять адрес фн.
CallOnTimer(addr,interval=1000); и повесить на какой-то таймер
Вот кто бы написал...

IGR 24.09.2007 14:23

Re: Загрузка
 
to Damp: не вижу особой потребности в написании этой dll !!
это вполне можно реализовать на blitz3D, но естественно немного другим способом !!

dimanche13 24.09.2007 14:27

Re: Загрузка
 
А я вот не пользуюсь Б3Д... Но уверен, что там есть нечто подобное, поищи внимательнее. Полазь по оруму и зайди на пп http://blitz.pp.ru

IGR 24.09.2007 14:31

Re: Загрузка
 
в blitz3D нет таймера ??
Ух !!
http://blitzetc.boolean.name/code_lib/other-timers.htm

Damp 24.09.2007 14:42

Re: Загрузка
 
Неа, нет таймеров все просмотрел уж не раз...
---
Может кто знает как в блиц3д получить адрес функции? Это мне сложнее всего, а остальное может и сам бы написал.

IGR 24.09.2007 14:44

Re: Загрузка
 
Цитата:

Неа, нет таймеров
как это нет ?? иди по ссылке !! :)

Damp 24.09.2007 14:51

Re: Загрузка
 
Да... это несовсем таймеры, как обычно их понимают.
Там просто вызываемые из цикла функции которые сверяются по часам, но в какой момент они вызываются ни кто не гарантирует...
Смотри, допустим прога стала грузить большой файл LoadMesh, и грузит его 10сек, вот и хана всем тем таймерам, они получат управление только через 10сек, а за это время... вся музыка уж похерится :)

IGR 24.09.2007 14:56

Re: Загрузка
 
Цитата:

а за это время... вся музыка уж похерится
в смысле ??
выше ж написали что музыка идет другим потоком и с ней ничего не случится !!

Damp 24.09.2007 15:02

Re: Загрузка
 
Дык я же типа мини фрутилупса хочу написать :)
Этоб реально была экономия 50% тафика игры, т.к. сэмплы очень маленькие, а вот миксы огогоооо...

dimanche13 24.09.2007 15:04

Re: Загрузка
 
IGR, Damp имеет в виду систему прерываний

IGR 24.09.2007 15:11

Re: Загрузка
 
ясно, ссори, сразу не врубил !! :)

avel 05.10.2007 01:24

Re: Загрузка
 
у меня только один совет: читай раздел FAQ! все, что ты спрашиваешь давно уже описано не один раз. ты видимо новичек. так вот специально для тебя умные люди форума сего написали много всего хорошего. и тебе не мешало бы это почитать прежде чем постить кучу постов.
если же после прочтения у тебя все же остануться вопросы, то можешь стучаться мне в аську или на мыло. я тебе все разъясню, как думаю и любой другой проггер со стажем.


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

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