forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ и уроки (http://forum.boolean.name/forumdisplay.php?f=110)
-   -   FAQ (http://forum.boolean.name/showthread.php?t=9113)

Matt Merkulov 10.09.2009 10:32

FAQ
 
Эта тема предназначена для постов в стиле "вопрос-ответ". После того, как вопросов-ответов наберется достаточно много - несколько десятков (если это случится), в Blitz Et Cetera будет создан соотв. раздел и посты будут перенесены в него.

ABTOMAT 10.09.2009 17:16

Ответ: FAQ
 
Но ведь такая тема уже была?

NitE 10.09.2009 17:57

Ответ: FAQ
 
http://forum.boolean.name/showthread.php?t=7886&page=15

Randomize 11.09.2009 08:02

Ответ: FAQ
 
Но тут какбы рздел BlitzMax.
Такчто топик имеет право существовать.

G.A.D 27.10.2009 18:56

Ответ: FAQ
 
Я первый с вопросами!
Strict и SuperStrict-в чем разница?
Что такое TList ?
Что такое Method?
Зачем FastImage если и так BM 2d графический движок?
_______
а теперь вопрос не в тему
Squall он же изначально для GameMaker так?
П.С Вот только гасить не надо написано же для сайта
Чтоб тольковые ответы были всем понятные а не ссылки просто или кривые переводы
И ответы понятные всем!
Булка не в обиду!
Но просто перевод от WAVE переведен не человеком и читать мягко говоря трудно а понять(новичкам) ещё тяжелее!

jimon 27.10.2009 19:20

Ответ: FAQ
 
G.A.D,
Цитата:

Strict и SuperStrict-в чем разница?
SuperStrict заставляет декларировать тип переменной, когда Strict не обязывает
а Strict обязывает декларировать зону видимости переменной (глобальная или локальная)
программирование в SuperStrict режиме заставляет программиста писать более чистый и грамотный код

Цитата:

Что такое TList ?
Это двусвязный список, типы в blitz3d имеют его по умолчанию в языке (не понимаю зачем), а в blitzmax такого нету, потому список надо делать ручками

Цитата:

Что такое Method?
это "функция" в классе, представь что у тебя есть функция которая обрабатывает тип (по аналогии с blitz3d) и ты туда передаёшь нужный тебе объект типа, то метод это такая функция в которую объект типа передаётся автоматически и ты можешь работать с полями объекта напрямую, метод вызывается из объекта, потому без объекта вызвать метод нельзя

G.A.D 09.12.2009 15:12

Ответ: FAQ
 
В каких ситуация лучше использовать TileImage,а в каких писать тайловую систему самому?

jimon 09.12.2009 15:33

Ответ: FAQ
 
G.A.D
а какая собственно разница ? посмотри исходник TileImage и если нравится то используй, не нравится - измени как тебе нужно

G.A.D 17.12.2009 21:29

Ответ: FAQ
 
Не работает ф-ия Apptitle !что делать?

Knightmare 17.12.2009 21:38

Ответ: FAQ
 
Негодуй!
Юзаешь ты ее не так, вот и не работает (правда хз как ее можно не так юзать-то).

G.A.D 17.12.2009 21:50

Ответ: FAQ
 
Перекомпилил модули заработала хД

JeanWinters 28.07.2010 16:11

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

Randomize 30.07.2010 16:04

Ответ: FAQ
 
Именно!
Из хелпа:
Цитата:

If sync is 0, then the flip occurs as soon as possible. If sync is 1, then the flip occurs on the next vertical blank.

If sync is -1 and the current graphics object was created with the Graphics command, then flips will occur at the graphics object's refresh rate, unelss the graphics object was created with a refresh rate of 0 in which case flip occurs immediately.

If sync is -1 and the current graphics object was NOT created with the Graphics command, then the flip will occur on the next vertical blank.

JeanWinters 30.07.2010 20:37

Ответ: FAQ
 
"спасибо", я это уже читал, по этой причине и возникли вопросы относительно значения со знаком "минус".

Randomize 31.07.2010 01:08

Ответ: FAQ
 
Переводчиком не воспользоватся?

JeanWinters 31.07.2010 12:18

Ответ: FAQ
 
Я понимаю английский язык, не понятно, что такое "graphics object" и "graphics command" .. и вообще смысла не понятно в использовании "минусового значения"..

Arton 31.07.2010 12:34

Ответ: FAQ
 
Цитата:

Сообщение от DTamaturg (Сообщение 156825)
Я понимаю английский язык, не понятно, что такое "graphics object" и "graphics command" .. и вообще смысла не понятно в использовании "минусового значения"..

Ы, "графический объект", "графическая команда", Ы, "минус один" - отрицательное значение, чего непонятно?

Это правда из справки Blitz3D, но по смыслу аналогично:

Команда Flip меняет местами FrontBuffer() и BackBuffer().

Эта команда должна применяться, когда Вы используете двойную буферизацию. Двойная буферизация - методика, используемая, чтобы гарантировать, что обновления экрана не заметны для пользователя. Если Вы выводите изображение непосредственно в FrontBuffer, на экране могут появляться неприятные эффекты, поскольку обновления происходят непосредственно на экране. Если Вы выводите графику в BackBuffer, обновления происходят в памяти. Когда происходит обмен буферов, BackBuffer превращается в FrontBuffer и, следовательно, обновление на экране происходит практически мгновенно. В то же самое время, FrontBuffer становится BackBuffer-ом, позволяя Вам снова рисовать в BackBuffer-е следующий кадре до следующего "переворота" буферов.

Параметр vwait определяет, будет ли видеоплата ждать пробела по вертикали перед обменом буферов. Пробел по вертикали - событие, которое происходит в процессе регенерации изображения на экране монитора, и соответствует моменту времени, когда последняя (нижняя) линия развертки экрана была отображена, а первая (верхняя) линия еще не выводится. Когда программа ждет пробела по вертикали, то гарантируется гладкое обновление экрана, поскольку изображение, выводимое монитором изменится только тогда, когда оно полностью занимает весь экран, и он должен начать обновление.

Заметьте, однако, что это относится только к видеоплате, и некоторые видеоплаты позволяют пользователю отключать синхронизацию по вертикали. Поэтому, если Вы полагаетесь только на одну команду Flip, изображение может быть нарушено при определенных настройках. В этом случае Вам может быть полезна команда VWait, поскольку она вынуждает центральный процессор ждать пробела по вертикали (в противоположность видеоплате), и это не может быть заблокировано. Следовательно, действительно плавные обновления экрана могут быть достигнуты при использовании сочетания "VWait: Flip False".

P.S. Предупреждаю, я мог и напутать всё!

JeanWinters 31.07.2010 13:54

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

Arton 31.07.2010 14:56

Ответ: FAQ
 
Цитата:

Сообщение от DTamaturg (Сообщение 156842)
так "по-хорошему" нужна вертикальная синхронизация? дело в том, что когда ее использую, то получается слишком медленно и даже изображение не поспевает за координатами мыши, а если не использую, то изображения "дрожат", "рвутся"..

По разному, иногда эта синхронизация только ресурсы за зря жрёт, надо просто стабилизацию FPS ставить. Как не спрашивай, я BlitzMax в руках не держал...
И не забывай, я смотрю со стороны Блица!

JeanWinters 31.07.2010 15:52

Ответ: FAQ
 
Пусть тогда ответит тот, кто знает. Ведь эта ветка форума предназначена именно для предоставления ответов, касающихся BlitzMax'а.

Arton 31.07.2010 19:06

Ответ: FAQ
 
Цитата:

Сообщение от DTamaturg (Сообщение 156859)
Пусть тогда ответит тот, кто знает. Ведь эта ветка форума предназначена именно для предоставления ответов, касающихся BlitzMax'а.

Ну вертикальная синхронизация везде одинаковая.

JeanWinters 21.12.2010 13:42

Ответ: FAQ
 
Хотел спросить, есть ли разница между:
Код:

global obj1:TType = new TType
global obj2:TType = obj1

и:

PHP код:

global obj1:TType = new TType
global obj2:TType = new TType
obj2 
obj1 

Где-то читал, что в одном случае не происходит удаление "сборщиком"..

SBJoker 21.12.2010 14:58

Ответ: FAQ
 
Давай читать код вместе,
"глобальная переменная obj1 типа TType равна новому экземпляру класса TType
глобальная переменная obj2 типа TType равна переменной obj1"
что из этого следует? Что мы создали две глобальных переменных, в одну поместили объект, вторую сделали псевдонимом первой. Т.е. в сухом остатке у нас 1 объект и две переменных по которым его можно получить.

Второй код:
"глобальная переменная obj1 типа TType равна новому экземпляру класса TType
глобальная переменная obj2 типа TType равна новому экземпляру класса TType
переприсвоить значение переменной obj2 на значение переменной obj1"
Как результат создано два разных объекта и сохранены в разных переменных. Потом одна из переменных переприсвоена на первый объект.
Т.е. тот объект что был в ней теперь недоступен, и скорее всего будет уничтожен (сборщик мусора вроде бы умеет их находить).

JeanWinters 21.12.2010 15:22

Ответ: FAQ
 
Т.е. в обоих случаях будет два указателя и один объект (сегмент памяти)?

Еще вопрос: что такое "отражение" и зачем оно нужно. Читал в описании, но еще больше запутался. Не увидел выгоды применения этого подхода. Объясните на простом маленьком примере (можно с кодом).

SBJoker 21.12.2010 15:25

Ответ: FAQ
 
З.Ы. проверить настигает ли объект неминуемый конец от лап жнеца сборщика мусора легко, дописав деструктор, выводящий в дебаг последний крик боли уносящегося в пучину цифрового ада объекта.

SBJoker 21.12.2010 15:29

Ответ: FAQ
 
Цитата:

Сообщение от DTamaturg (Сообщение 172712)
Т.е. в обоих случаях будет два указателя и один объект (сегмент памяти)?

Именно.
Для создания копий надо писать уже метод клонирования.

Цитата:

Сообщение от DTamaturg (Сообщение 172712)
что такое "отражение"

Сам неюзал, но смысл в том чтобы обращаться к объектам по имени, по строковому имени. Т.е. ты неимеешь указателя на объект но он тебе нужен, то можно его получить указав его имя (имя переменной где он лежит).
псевдокод: Local obj:MyType = Reflection.GetVar("SelectedObject")
ну и где то в коде есть переменная с таким именем. Вопщем это как получение объектов в TMap по ключу.

JeanWinters 24.12.2010 16:45

Ответ: FAQ
 
Какой программный интерфейс использует BlitzMax по умолчанию (OpenGL или DirectX) и как узнать/переключиться между ними? В описании идет речь о "графическом объекте", т.е. это и есть один из графических интерфейсов?

Жека 25.12.2010 10:25

Ответ: FAQ
 
Для винды по дефолту ставится ДХ, для остальных ОГЛ.

Для выбора конкретного драйвера (на данный момент их 4) есть функция

Код:

Function SetGraphicsDriver( driver:TGraphicsDriver,defaultFlags=GRAPHICS_BACKBUFFER )
В хелпе есть и примерчик;)

Вообще полезно прочитать полное описание модуля BRL.Graphics (а ещё лучше всех модулей).

Reks888 25.12.2010 13:19

Ответ: FAQ
 
Да и, вроде если подключить brl.glmax2d, то будет openGL.
Если подключить brl.d3d%7 или 9%max2d, то будет DirectX%7 или 9%.
Если brl.max2d, то подключит в соответствии с операционной системой(DirectX под виндами, OpenGL в линухе и маке)

JeanWinters 26.12.2010 16:09

Ответ: FAQ
 
Установка драйвера в соответствии с ОС происходит при запуске исполняемого файла (готовой игры) или определяется уже при компиляции (т.е. зависит от того, в какой системе создавалась игра)?

Жека 26.12.2010 17:39

Ответ: FAQ
 
При компиляции.

JeanWinters 20.01.2011 22:02

Ответ: FAQ
 
Хочу попробовать сделать универсальный метод, который бы возвращал по идентификатору нужный элемент. Существует пользовательский тип TItem , который имеет свой id и находится в экземпляре класса TItems
В типе TItems есть метод:

PHP код:

Method GetElementByID:Object(aElement$,aID)
Select aElement
Case "Item"
For Local item:TItem EachIn TItemList
  
If item.id aID Then Return item
Next
...
EndSelect 
EndMethod 

Пишу так:
PHP код:

Local item:TItem = New TItem   
item 
items.getElementByID("Item"273667216

Почему выводится сообщение о том, что нельзя преобразовать типы, ведь Object является базовым типом для всех других типов?

Glauberov 25.08.2011 10:37

Ответ: FAQ
 
как научить BlitzMax читать MP3?

Greymem 18.11.2011 07:58

Ответ: FAQ
 
Цитата:

Сообщение от JeanWinters (Сообщение 176357)
Хочу попробовать сделать универсальный метод, который бы возвращал по идентификатору нужный элемент. Существует пользовательский тип TItem , который имеет свой id и находится в экземпляре класса TItems

Почему выводится сообщение о том, что нельзя преобразовать типы, ведь Object является базовым типом для всех других типов?

Всё верно, тип Object может содержать данные любого типа, однако сам по себе не преобразуется.

Метод должен возвращать TItem, раз в коде ничего не возвращается кроме данных типа TItem

Код:

Method Method GetElementByID:TItem(aElement$,aID)
Или не меняя метод преобразовывать в TItem на выходе
Код:

item = TItem(items.getElementByID("Item", 273667216))

Greymem 18.11.2011 08:02

Ответ: FAQ
 
Цитата:

Сообщение от Glauberov (Сообщение 200072)
как научить BlitzMax читать MP3?

Попробуй использовать сторонние модули, например bah.bass

http://en.wikibooks.org/wiki/BlitzMax/Modules/BaH/BASS


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

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