Каталог:Blitz3D FAQМатериал из Blitz Et Cetera
| ||||
Программная логика и общие вопросыКак сделать в программе выбор из нескольких вариантов?Удобнее всего пользоваться структурой Select: Select переменная
Case первое принимаемое значение Как правильно проверять на совпадение несколько условий?Воспользуйтесь AND'ом: If условие1 And условие2 Then
Как быстро поменять значение переменной-флага?m = Not m
Как задать бесконечный цикл и выйти из него?Repeat
... Как изменить шаг в цикле?Используйте команду Step: For i = 0 To 10 Step 2
Как сделать, чтобы функция возвращала что-либо?В функции: Return что_возвращать при вызове: куда_возвращать = имя_функции()
Как переместиться в определенную часть программы?Ответ: удобнее всего воспользоваться метками и командой Goto: .имя_метки
... Примечание: многие специалисты считают, что команда GOTO запутывает код и делает его сложным для понимания. Использовать ее не рекомендуется, она вполне заменяема циклами Repeat-Forever / While-Wend, условиями, функциями и другими структурами. Чем отличается Gosub от Goto?Gosub предполагает, что возможно будет возврат к предыдущей части программы с помощью команды Return Как создать / удалить элемент типа?Создать: имя_элемента.имя_типа = New имя_типа
Удалить: Delete имя_элемента
Не забудьте сначала удалить все объекты этого элемента командой FreeEntity. Как создать массив типа и работать с ним?1. Создаем тип стандартным способом. Type имя_типа
... параметры типа 2. Создаем массив: Dim имя_массива.имя_типа(кол-во_элементов)
3. Создаем элементы типа: имя_массива(номер_элемента) = New имя_типа
4. Обращаемся так: имя_массива(номер_элемента)\параметр_типа
параметр_типа - это то, что стоит после Field. Как подключить какой-либо файл *.bb к программе?Ответ: используй команду Include Include "имя_файла.bb"
Как перевести число в целочисленный тип?Int(число)
Генератор случайных чисел выдает одни и те же значения. Что делать?Используй зависимость генерации от таймера, т. е. поставь в начале вот это: SeedRnd Millisecs()
Как избежать ошибки при написании строковых значений в различных регистрах?Ответ: используй команду Upper, она конвертирует все к верхнему регистру. Upper$(строка)
Как выводить текст команды Print или Input в определенном месте?Поставьте перед выводом команду: Locate x,y
Что делать если мне надо в типе сделать массив, например для элемета patrons?Для этого просто впишите следующую строку в тип : Field patrons[100]
Теперь обращатся к этому массиву можно так: указатель\patrons[13] = zaklinit_pistolet()
У меня есть переменная. Она у меня должна вызываться в разных функциях, но этого не происходит. В чем может быть проблема?Раз у вас переменная вызывается в разных функциях, то ее нужно обзывать как глобальную, тогда она будет доступна в любой части кода. Обзывать ее можно перед главным циклом, сразу после инициализации графики (после строчки graphics....), вот так: Global имя_переменной
| ||||
УправлениеУсловие KeyHit() срабатывает раньше, чем надо. Почему?Видимо, надо использовать "очистку" нажатий клавиш: FlushKeys
Как узнать скан-коды клавиш клавиатуры?Нужно нажать на кнопку ввиде домика на главной панели и вы попадете на главную страницу help'a , далее жмем Command Reference . Теперь на панели слева будут надписи Scancodes и Scancodes picker. Нажав на первую надпись вы попадете на страницу где будут записаны все сканкоды клавиш в виде "Key - scancode". Нажав на другой надписи, вы увидите изображение клавиатуры. Нажав на нужную вам клавишу в верхнем поле с надписью Scan Code, вы увидите число, которое и является сканкодом выбранной клавиши. Как работать с колесиком мыши?Используйте функции: MouseZ
MouseZSpeed КнопкаСначала грузим картинку и размещаем ее где-то на экране. Пусть ее координаты X;Y , а размер картинки ImageX и ImageY. Теперь в коде засекаем координаты курсора(мышки и т.п.). В общем это не так уж сложно. Потом пишем код: If CursorX>X-1 and CursorX<X-1+ImageX and CursorY>Y-1 and CursorY<Y-1+ImageY Then ;засекаем координаты курсора
(...); Код например по смене (подсветку картинки) - если курсор просто подводится. Если засекается нажатие - делается действие. | ||||
3D-графикаКак включить каркасный просмотр?If KeyHit(wire_key) Then wLog=Not wLog: WireFrame wLog
Как создать равномерное освещение?AmbientLight r,g,b
Как создать мерцающий свет (как от костра)?flame = CreateLight(2)
PositionEntity flame,0,1,0 Как сделать простую воду?примерно так: water=CreatePlane()
EntityColor water,10,60,200 Как сделать воду с волнами?Это делается загрузкой меша или террайна: ;создаем тип
Type WaterVertices Как разделить экран на несколько частей?Используте команду CameraViewport
Как заставить спрайт не поворачиваться к камере?SpriteViewMode имя_спрайта,2
Как создать эффект тумана?Используйте команды работы с камерой: camera = CreateCamera()
CameraFogMode camera,1 Как узнать сколько треугольников в текущем фрейме?Для этого есть команда TrisRendered(), которая возвращает число треугольников, попавших в камеру. Посмотреть можно так: Text 10,10,TrisRendered()
При использовании команды Animate объект начинает двигаться ни тогда, когда нажата клавиша, а когда она отпускается. Почему?Когда вы пишете в главном цикле "If KeyDown(...) Animate ...", Блиц запускает эту команду постоянно, пока нажата клавиша, а надо ее запустить один раз. Используте KeyHit(), либо введите переменную-флаг. Примерно так: If speed#=0 Then Animate меш,0
If KeyHit(17)=True Or KeyHit(31)=True Then Animate меш,1 Как загрузить спрайт, чтобы он не был полупрозрачным?При загрузке спрайта нужно поставить флаг 4: spr=LoadSprite("...",4)
Как задать порядок отображения объектов?Используйте команду EntityOrder
Что делает команда EntityFX?Она отвечает за различные визуальные эффекты в основном связанные с освещением. Как поворачивать спрайт?Вот так: RotateSprite спрайт, угол
Какая польза от удаления текстуры, нанесенной на объект?Освобождение памяти. Когда текстура наносится на объект, создается (модифицируется) Brush с этой текстурой. Если не нужно больше совершать манипуляции с текстурой - ее нужно удалить. От этого действительно освобождается память. Сделал проект, скомпилировал, попытался запустить на другом компьютере, а там ошибка: "Unable to create 3D scene". Ошибка точно не в несовместимости разрешениий - я сделал возможность смены разрешения.Такое бывает если попытаться запустить 2 проги использующие 3Д-режим. Например, такое может быть, если запустить твою прогу всместе с 3ДМаксом. Так-же возможно разрешение не поддерживается монитором, это может относиться к WideScreen мониторам. | ||||
Видео и звукКак загрузить *.Gif файл?В качестве текстуры - никак, но можно его проиграть как видео-файл командой DrawMovie
Как проиграть видеоролик?Я пользуюсь такой вот функцией: Function screen(name$,keylog,fs=1,x=0,y=0)
;name$ - имя файла Как проиграть звуковой файл?Можно так: sndWave=LoadSound("имя_файла")
PlaySound(sndWave) Как сделать, чтобы музыка играла постоянно?Есть несколько способов: ;1 способ
sndWave=LoadSound("имя_файла") P.S. 2-й способ более гибкий, например, слегка изменив код, можно реализовать проигрывание нескольких мелодий и т. д. | ||||
Работа с файламиКак сохранять в файл?; открываем файл
fileout = WriteFile("имя_файла") Как прочитать файл?; открываем файл
filein = ReadFile("имя_файла") Как узнать существует ли файл?Вот так: If FileType("имя_файла") = 1 Then ...
Как "просканировать" некую директорию на наличие файлов?Это делается циклом: myDir=ReadDir("имя_директории")
Repeat Как открыть уже существующий файл и записать в его конец информациюФайл можно открыть командой OpenFile. Действительно, при открытии файла позиция записи устанавливается в его начало. Устранить это можно двумя способами. Ламерским: сначала считать из файла всю потом записать с учетом новой инфы (можно, кстати, и так): While Not(Eof(Your_File))
Readline$ your_File Или вот так: filename$="имя_вашего_файла"
file=OpenFile(filename$) | ||||
РазноеКак работать с таймером?Примерно так: ;в цикле пишете:
If TimerBegin=0 Then TimerBegin=MilliSecs() Как запустить другой файл из программы?ExecFile("имя_файла")
Как "снимать" скриншоты?Вот функция: Function screenshot()
Repeat Как скрыть / показать курсор в оконном режиме?Используйте команды HidePointer / ShowPointer
У меня не работает какая-либо стандартная функция и выдается сообщение "function not found"на это может быть несколько причин:
Как изменить иконку (пиктограмму) у exe–файла, созданного в Blitz3D?Нужно воспользоваться редактором ресурсов exe-шника, например, ResHack’ером, XNResourceEditor’ом или Restorator’ом. В ResHacker это делается так: Action->Replace Icon…->Open with new icon…->Replace. Как использовать сторонние библиотеки?Нужно просто забросить файлы нужной библиотеки (*.dll,*.decls) в папку "userlibs" Blitz3D (по-умолчанию это: C:\Program Files\Blitz3D\userlibs\). Важно! У библиотеки обязательно должен быть файл Имя_Библиотеки.decls - с описанием всех функций нашей библиотеки (его мы обязательно кидаем в папку "userlibs", а заодно и в папку с проектом). Не забывайте так же копировать библиотеку *.dll в папку со своим проектом, если хотите использовать ее уже вне Blitz'а, т.е. в скомпилированном *.exe проекте. |

