Слайдер в меню
Сказать: "слайдер можно использовать в меню", это одно, но как это сделать?. Написать листинг проще чем объяснить его работу, так же врядли можно понять это читая чужой код. И всё же я думаю, что есть смысл выкладывать листинг, потому как в нём есть то , что я сам взял из чужой работы, например: как создавать список файлов в искомой папке. Быть может особо нуждающиеся найдут в примере то чего искали...
02.08.08. slider2.rar
Вам нужны Слайдеры?
Действительно, а нафига они вам? И вообще, что это такое? А вот в Браузере, с права от вас, видите? То чем вы двигаете страницу вниз-вверх, ну вот это и есть слайдер.
Хотя возможно, они нитак называются, что-то вроде ползунка или трэкбола. Правда в игре от них мало толку, разве, что в меню, например в работе со списком файлов карт. Мы же не можем вывести названия всех карт, если их больше двадцати, они просто не поместятся на экране. Вот тут то и поможет слайдер, или как его там...
В примере, показано управление картой с помощью слайдеров, а так же изменение цвета фона, с использованием уже другого, который точно можно назвать трэкболом, числового слайдера, они принципиально отличаются в работе.
15.07.08. slider.rar
Блуждающий дракон 2
Я сделал этот пример только для себя, но так как уже давно ничего не выкладывал на сайт, решил - "лучше уж это чем ничего".
И ЭТО... всего лишь немного усовершенствованный предидущий пример. В нём можно изменить скорость игры и затем понаблюдать как ведут себя разные персонажи с разными характеристиками, которые в свою очередь записаны в текстовых файлах. Так же можно сменить, нажатием стрелки вниз, текущий персонаж на следующий в списке, их всего пять.
01.03.07. animation2.rar
Блуждающий дракон
Заманчивое название?... Но никакого обмана нет, запустив программку вы увидите блуждающего дракона из WarCraft2. Он летает туда-сюда и думает чем бы это ему заняться. Можно порадоваться его беззаботности, но для того чтобы он так безмятежно летал мне понадобился целый день работы.
На самом деле, этот листинг логическое продолжение предидущего примера. Его цель, считывание параметров из текстового файла. Если вы замените в файле "loader.txt" слово "dragon" на "copter" и сохраните, то при следующем запуске, вы увидите не дракона а вертолёт с мужичком яростно крутящем пидали. Как видите, я реализовал принцип изменения программы без компиляции. Параметры записаны в текстовых файлах "dragon" и "copter". Который из них загрузить программе, записано в файле "loader".
Имело ли смысл тратить целый день на это?, время покажет, но теперь есть возможность без компиляции менять параметры объекта. В данном случае, мы можем изменить цвет флага на один из 10-и, скорость передвижения, загружаемую текстуру и анимацию объекта.
Ещё один новый момент, синхронизация вывода в основном цикле программы отсутствует, но анимация и движение объекта постоянны! Дело в том, что анимация и движение привязаны к системному таймеру, который отсчитывает время в милисекундах, 1000 милисекунд это 1-на секунда. Стало быть, если всю анимацию и действия объектов в игре привязать к таймеру, то это и будет синхронизация в общем виде, но уже не в тиках как по старинке, а в милисекундах. Таким образом в наше время работают почти все игровые программы, что дает им возможность быть ближе к реальности.
27.01.07. animation.rar
Чтение и запись в текстовый файл
Сохранение параметров экрана, можно было сделать и в двоичный файл, но меня интересовала возможность изменения значений в текстовом редакторе с последущим считыванием их в игре, что-то вроде скриптового движка.
Как видно из листинга, мы можем считывать как строку, так и числа. Правда, строка - это всего лишь одно слово и чтобы считать целое предложение пришлось написать маленькую функцию. Есть одно "НО", Нельзя смешивать строку и числа, т.к. считается только строка.
Числа могут быть записаны в одной строке, но каждое число должно считываться в свою переменную.
Ещё один момент, порядок считывания и записи, зависит только от вас, как впрочем и проверка на ошибки.
Такие примеры вы вряд ли найдете в книгах...
25.01.07. property.rar
Разрешение экрана
Одной из сложных проблем в DirectX является потеря фокуса полноэкранного приложения, в следствие чего приложение теряет все свои ресурсы. Единственная мысль, вынесенная из различных источников, сводилась к тому, чтобы перезагрузить ресурсы, потерянные при известном событии. Мне такая идея нашлась не по душе, уж слишком много ресурсов загружает игра и проверять каждый выглядит не очень красиво.
Единственное, что мне пришло в голову, это уничтожение всех интерфейсов DirectX, при котором я не делаю проверки на потерю ресурсов, так как приложение их уже потеряло, а просто загружаю их заново, после инициализации всех интерфейсов, конечно. Быть может, такой способ не очень профессиональный, зато работает.
Так как приложение захватывает клавиатуру, для потери им фокуса, требуется нажать Ctrl+Alt+Del.
В результате, приложение получило возможность легко менять разрешение экрана, ведь интерфейс Direct3D тоже перезапускается.
21.01.07. reActive.rar
Кнопка
Не прошло и трех лет прежде чем я нашёл, как мне кажется, способ создания кнопки, наиболее простой и соответствующий кнопке к которой мы все привыкли. Она реагирует если нажали именно на неё и в нужный момент. Правда для этого требуется обнулять нажатие левой кнопки, но это довольно просто, так как надо сделать только один раз в основном цикле программы.
Наконец в проекте инициализирован DirectInput с интерфейсами клавиатуры и мыши. Клавиатура полностью захвачена и даже ненавистная мне кнопка Win подчиняется только приложению. И лишь сочетание клавишь Alt+Ctrl+Del может вывести приложение из фокуса.
Майкрософт любит всё усложнять и делать простые вещи бесмысленно сложными. Так и с вводом строки средствами DirectInput очень сложный момент, надо же умудрится так завернуть. Именно по этой причине я долгое время отказывался от DirectInputKeyboard и лишь приобретя некоторый опыт решился попробывать использовать его, но без подсказки из книги Тода Барона "Стратегическая Игра Программирование с DirectX 9.0" у меня бы врядли, что-нибудь получилось.
16.01.07. button.rar
Скрипты
Зачем нужны скрипты вы можете прочитать в статье выложенной на GameDev.ru: http://www.gamedev.ru/articles/?id=70112. Здесь же примеры написанные мной, точнее скопированные из этой статьи. Хотя они немного изменены, но суть осталась таже. В проэктах уже присутствуют необходимые библиотеки и заголовочные файлы. Скрипты (как значительно звучит) написаны в простом блокноте. Отмечу только, что речь идет о скриптовом языке Lua.
20.02.06. script.rar script2.rar script3.rar
Клавиатурные сообщения
Как все программисты для проверки клавиатурных сообщений я пользуюсь макросом KEYDOWN, который содержит виртуальный код клавиши. Код виртуальной клавиши не зависит от аппаратной реализации клавиатуры.
//Макрос - считывания нажатия клавиш
#define KEYDOWN(vk_code)((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
//Применение макроса
if(KEYDOWN(VK_ESCAPE)){} или тоже самое но с кодом KEYDOWN(0x1b)
//Еще пример
KEYDOWN('1') или тоже KEYDOWN(0x31)
Многие коды виртуальных клавиш имеют символьное обозначение, определенное в файле windows.h. Приведу почти полный список символьных имён виртуальных клавиш. Те из них, которые определены в файле windows.h, имеют префикс VK_ (от слов Virtual Key).
Символьные имена виртуальных клавиш
Загрузка строки из файла.
Пример загрузки строки из текстового файла. Просто нажмите клавишу F3.
16.01.06. textload.rar
Загрузка строки из файла.
С загрузкой текстового файла мы разобрались. Дело осталось за тем чтобы этот файл выводить в примерно томже виде, каком он был написан. С прошлой функцией мы могли выводить только строки, но чтобы вывести целый текст нам потребуется другая функция GDI - это DrawText.
Текстовый файл в примере, ничто иное как help. Он приводит возможные значения переменной форматирования.
Способ применения более чем нагляден.
16.01.06. textload2.rar
Создание поверхности и печать в неё текста.
Печать текста средствами GDI довольно медленное дело, никак не подходящее для создания игр. Но можно избежать медлительности создавая кадры с текстом заранее при инициализации игры вне её цикла.
Здесь показан пример создания поверхности и печать в неё текста шрифтом с заданными характеристиками. Обязательное условие - необходимо установить для вновь созданной поверхности прозрачный цвет, чтобы можно было пользоваться процедурой draw().
07.12.05. print.rar
Анимация
Односвязный список очень удобен для анимации объектов и довольно прост в применении.
17.12.05. starship_basic.rar
Впрочем тоже можно проделать и с библиотечными функциями. Я не заметил большой разницы, в обоих случаях есть свои трудности, но их преодоления обычное дело в программировании.
17.12.05. starship_basic_std.rar
Правда всё же есть один сложный момент, связанные списки делают листинг менее удобочитаемым. Но скорее всего это дело привычки, надо всего лишь как можно чаще пользоваться связанными списками и тогда они станут более обычными для взгляда.
Это пример применения одного связанного списка в другом связанном списке. Можно запутаться поэтому надо использовать имена увеличивающие различие между ними (хотя я кажется не следовал этому правилу).
17.12.05. starship_basic_enemy.rar
Снег
Здесь в пинципе ничего нового нет, разве что в качестве упражнения.
12.12.05. snow.rar
Частицы
Библиотека STL намного упрощает работу со связанными списками, но и для её освоения придеться потрудиться. Особенно сложный момент это удаление узлов. Обратите внимание на удаление узла, сразу и не догадаешься как это происходит, это просто надо знать.
Списки могут пригодиться во многих местах игры. И всё же как мне кажется основное их применение это частицы. Частицы наиболее непостоянны в своём колличестве; то их 5 то 500, а то и ноль.
Не скрою удовольствия, мне понравился пример который я написал.
08.12.05. particles.rar
Связанные списки - чтоб их...
Довольно трудная тема, это связанно с указателями и памятью. Игры с памятью очень тонкая вещь на грани фола. Отсюда частые вылеты программы при возникновении ошибок. От ошибок частично могут спасти библиотечные функции, но из-за своей универсальности они раза в три медленее чем "handmade" функции. Программа приведенная здесь циклично создает и уничтожает 1000 звезд. При взгляде на листинг можно испугаться и это не лишено оснований - придется поламать голову. Ничего не поделаешь, хочешь создавать игры надо осваивать связанные списки.
06.12.05. nodes.rar
Я не любитель общения в форумах, но нет-нет да и заглядываю на интересующие меня темы. Что касается связанных списков то мнение большинства - "... не мучиться и пользоваться библиотечными функциями...". Чтож... Если посмотреть на листинг теперь... быть может они и правы?... М'да... они правы.
08.12.05. std_nodes.rar
Вектор.
Вектор это то без чего мы не сможем обойтись в создании физики движения тел. Я не силен в высшей математике поэтому я просто пользуюсь вектором без понимания того как это происходит. В этом примере показан один из способов применения вектора. Хотя он не типичен для создания игр зато нагляден для понимания самого вектора как такового.
06.12.05. vector.rar
|