Работа со списками
от AmirПоводом написания этой статьи было мое личное заблуждение по использованию типов в Blitz-е. Возьмем простой пример - нужен список юнитов игрока.
Главная » Статьи » Играем Blitz » Blitz3D |
В категории материалов: 6 Показано материалов: 1-6 |
Поводом написания этой статьи было мое личное заблуждение по использованию типов в Blitz-е. Возьмем простой пример - нужен список юнитов игрока.
Виртуальный мир (любой) состоит из трех видов объектов интерактивных, не интерактивных и эффектов. Интерактивные объекты могут быть игровыми объектами и персонажами. Не интерактивные - это локация (условно) и объекты на локации. Эффекты - это все то, что нафиг ненужно для игрового процесса, но красииииво и жрет столько ресурсов, что мама негорюй!!! Само собой, минимальный набор крутого игродела - это два объекта "Персонаж" и "Локация", многие и вовсе обходятся только локацией.
Ну что?! Все игры - отстой?! Гейммейкеры - ламеры без ума и фантазии?! А ты просто кладезь идей, умница и крутой программист? Готов сделать игру всех времен и народов? Если нет, то - прощай, ты, слабое звено: Остальные за мной!
Что такое игра? Игра - это программа. На каком языке программа? На С++? Кто вам это сказал? Если игра написана на С++ то это тетрис или спейсинвайдерс - шаровара одним словом: Игра всех времен и народов пишется на скриптовых языках, встроенных в игровой движок, который в свою очередь и написан на С++. Движок Халф-Лайф 2 стоит 500 000 у.е., а сам Халф-Лайф 2 - 50 у.е. Интиресно почему? А я, таки, скажу. Игровой движок Half Life 2 написан на графическом движке Source 6, стоимость которого исчисляется в килобаксах. Для того чтобы написать свой графический движок, нужно столько знаний, что в одной голове они встречаются редко. Это и высшая математика, и физика, и геометрия, и программирование причем на уровне выше школьного. Если я описал ваши способности, причем не полностью, то вы можете заняться написанием своего графического движка. Но времени на написание игр у вас уже не будет! Да и занятие это не достойно человека, который вот-вот создаст супер-пупер игру, которая потрясет мир!!! Халф, Моровинд и Дум3 забьются в угол, жалобно скуля. Двери всех гейм студий будут открыты перед вами, а Кармак будет чистить ваши ботинки.:) Даже серьезные команды редко пишут свой графический движок. Это сложно (Но не невозможно ;) ). Вам говорят, что нельзя сделать игру всех времен и народов в одиночку? Врут!!! Хотят избавиться от конкурента, а сами пишут, пишут и пишут свою игру века. На всякие провокационные выкрики типа: "Назовите хоть оду известную игру написанную одним человеком или хотя бы не профессиональной командой!" спокойно отвечаем: "Counter Strike". Самая настоящая игра всех времен и народов, написанная на игровом движке Half Life, который в свою очередь написан на основе движка Quake (или Quake2), который написан на С++.
Итак мы наконец подошли к связанным спискам! При создании записей они, как я уже упоминал, помещаются в список. А что если нам нужно несколько списков? Скажем у нас есть куча юнитов. Некоторые из них активны, некоторые нет: Можно задать поле Active и смотреть активный обьект или нет, если активный то обновлять, но в таком случае нам придется перебирать все время всех юнитов. А можно создать отдельный список и помещать туда только тех юнитов которые в данный момент активны и работать уже с этим списком.
Первое что встает на пути новичков, судя по вопросам на форумах, это типы. Итак, для начала, что же это такое? Представьте себе базу данных, где каждая запись представляет собой несколько полей (имя, фамилия итд).
Blitz3D строится вокруг идеи субъектов. Как правило, 3D-игра будет состоять из многих элементов, такими как камеры, освещение, сетки и так далее. В Blitz3D, все эти считаются объектами. Это означает, что те же команды могут быть использованы для манипулирования и призваны решать широкий спектр вещей - например, команда TurnEntity могут быть использованы для поворотов камеры, света, сетки, или даже местности!