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)

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
 
Установка драйвера в соответствии с ОС происходит при запуске исполняемого файла (готовой игры) или определяется уже при компиляции (т.е. зависит от того, в какой системе создавалась игра)?


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

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