Перейти к публикации
Планета Deus Ex

TUTORIAL Z1: Основа U, паки и ООП (Классы, Объекты).


Useful?  

18 пользователей проголосовало

  1. 1.

    • Yes
      8
    • No
      0
    • Этот опрос сосет петушки
      4
    • Я Дедъ/Зондеръ
      6


Рекомендованные сообщения

Короче я попытаюсь высказать вышеперечисленные понятия, потом дополним/подправим, и после этого можно будет залить как статью. Идет?

З.Ы.: Это недедъовский тутор, всмысле не для Дедъа :lol:

 

V1.12

2004.01.29 - 3:44

 

 

 

//==========================

// Introduction.

//==========================

Все что здесь описывается - относится к редактированию Deus Ex и других игр, построенных на Unreal Engine. Так что это может пригодится не только для Deus Ex. Ну и опыт тоже добавит 8).

 

U Engine (впрочем любой Engine) - это не программа, это собирательное понятие, которое основывается на системе хранения и обработке данных. Программа - это просто метод реализации.

 

В U игре есть т.н. ресурсы: Уровни, текстуры, звуки и т.п. Все ресурсы распиханы по пакам (pack, сокращение от package - упаковка). Данный подход (не в открытом виде, а запакованный), позволяет уменьшить занимаемое место на HDD (за счет уменьшения количества файлов), увеличить скорость загрузки данных, а также применить сжатие (в U не исползуется!).

Содержимое ресурсов зависит от их типа (по расширению файла), у каждого типа есть свое местоположение:

  • .

.utx - пак с текстурами (textures), т.е. картинками - стены, мебель, предметы и т.д.

.uax - звуки, все что мы слышим в игре

.umx - музыка

.dx (как вариант .unr) - файл карты, по сути так же является универсальным паком.

  • - папка с ридми файлами, а еще там находятся splash скрины

Maps - карты, все карты тут (.dx)

Music - музыка (.umx)

Save - файлы сохранения, нас это не будет интересовать 8)

Sounds - звуки (.uax)

System - главные паки (те что универсальные) .u, файлы локализации (например .int файлы; об этом подробнее в последующих туторах), exe файл нашей игры, dll (библиотеки, в которых содержатся отдельные части приложения; используются exe файлом), файлы инициализации (т.н. конфиги, ini файлы), логи.

Textures - текстуры (.utx)

  • .

 

В данном туторе рассмотрим классы (и иже с ними), что это такое, и что они дают.

 

 

//==========================

// OOP, classes and objects.

//==========================

Используемая система обьектов, взаимодействия обьектов друг с другом и т.д. - все это построено на Объекто Ориентированном Программировании (ООП). Не будем вдаваться в подробности, просто заметим, что данный подход позволяет реализовывать сложные и интересные конструкции взаимодействия: например NPC (компьютерный персонаж) может сесть на стул, Projectile (т.е. снаряд) от огнемета зажигает обьекты и т.д.

 

Класс (Class, Classes - мн. ч.) - это некий тип данных. В нем содержится описание чего-либо, а также специальные подпрограммы для выполнения различных задач. Класс может создавать обьект (точнее обьект создается по шаблону, которым как раз и является класс). Дальше это тоже будет рассмотрено ;).

 

Ключевой особенностью ООП является иерархия классов: существует некий класс Object (не путайте с обьектами!!!), который является родительским (или супер классом) по отношению ко всем нижеследующим классам. Все нижеследующие являются дочерними классами к классу Object. У дочерних классов класса Object могут быть также свои дочерние классы.

 

Дерево классов, графическое представление иерархии классов:

    Object

     |

    / 

Class1 Class2

  |

 / 

Sub1 Sub2

Class1 и Class2 - дочерние классы к Object, Object является родителем для них. Sub1 и Sub2 - дочерние классы к Class1, а Class1 для них является родительским.

 

Наследование

Теперь зачем это все надо, спросите вы. А вот зачем: дочерние классы наследуют все содержимое родителей. Еще одна иллюстрация:

 

Class1: Title

  |

Class2: Title + Color

  |

Class3: Title, Color

У Class1 есть переменная Title (заголовок, например отображаемое название обекта). Class2 наследует эту переменную от родителя, и кроме этого обьявляется новая переменная Color (например цвет обьекта). А Class3 наследует все от Class2, соответсвенно у него изначально есть и Title, и Color.

Т.е. в самом первом классе (в самом наивысшем в иерархии), определяются самые общие значения. А потомки уже конкретезируют задачи.

Например в DX существует класс Weapon. В нем описано все то, что нужно для успешного использования предметов типа "оружие" (например то, что оружие можно взять на изготовку, перезарядитть, выстрелить). У этого класса есть подкласс DeusExWeapon. В нем разработчики Deus Ex добавили новые описания (например что у оружия может быть несколько типов патронов). Таким образом в DeusExWeapon есть все что было в классе Weapon плюс свои собственные.

 

Вернемся ко второй иллюстрации. Классы кроме переменных еще обладают функциями (процедуры, подпрограммы) - это куски кода, выполняющие различные операции. В нашем случае это можеть быть перекрашивание обьекта. Так вот, подпрограммы так же наследуются. Если в Class1 обьявить функцию перекрашивания, то она будет и у Class2, и у Class3. Кроме этого Можно делать т.н. override (перезапись, перегрузка) родительской функции. Например в Class1 функция перекрашивания изменяет цыет свего обьекта. А в Class2 нам нужно перекрашивать только верхнюю часть обьекта (например). Нам ничего не мешает переделать эту функцию в Class2!!! Только учтите что у Class3 функция перекрашивания будет уже от Class2 :).

 

Одним из дочерних классов Object является класс Actor. Все что находится под ним (за исключением абстрактных классов, об этом в следующий раз) может быть помещено на карту (map, level, уровень, етц.) в виде обьекта (это не так страшно как звучит, мы разберем это чуть ниже). Например такая цепочка (ну или адрес, можно еще назвать веткой):

Object>Actor>Weapon>DeusExWeapon>WeaponPistol

Это класс пистолета. В этом классе содержится описание его характеристик: какую модель использовать, какие звуки проигрывать, какой тип повреждений и т.д.

 

Обьект - это некий предмет, который может взаимодействовать с миром и другими предметами. Можно сказать что обьект создается по шаблону, описание которого заключено в классе этого обьекта.

Для упрощения понимания возьмем автомат с газ. водой. Пусть это будет класс. Вы жмете на кнопку, и из него вылетает банка Pepsi/<укажите ваш вариант>. Эта банка Pepsi - уже обьект. По образу одного класса может создаваться множество обьектов с идентичными параметрами и характериситиками. Класс пистолета WeaponPistol только один, а обьекты (много обьектов!) этого класса есть и у Unatco, и у NSF :P

 

 

//==========================

// Ending.

//==========================

Наверняка у вас есть один вопрос: почему все так сложно? На самом деле (если вникнуть, конечно) все НЕ сложно. Главное понять основу!

 

Теперь вы имеете небольшое представление о внутренностях вашей любимой игры. В следующий раз я расскажу вам о Unreal Ed, UCC.exe и о том, как сделать свой первый (а может быть и не первый) пак со своим классом => свой пистолет например 8) => модификация своими руками. Это может сделать любой, даже ты :wink:

Ссылка на комментарий

Я за последние два ворианта опроса.

 

Данный подход (не в открытом виде, а запакованный), позволяет использовать некоторое сжатие данных, в результате чего уменьшается объем хранимой информации, а также, возможно, ускорение загрузки данных.

Враки. В U никакого сжатия нету. Выигрыш использования паков в том, что движку не надо грузить кучу отдельных файлов, а нужно лишь загрузить один - пак. Экономия памяти.

 

Надо ещё сказать что дочерние классы наследуют всё содержимое родителей. А также можно делать override родетиельских функций (т.е. брать функцию родителя, вставлять в себя и эдитать).

 

Чтобы объект можно было поставить на уровень, он не должен иметь тип abstract. Пример:

 

class ZoomWeapon extends GameWeapon

    abstract;

Вот этот объект на уровень не вставиш.

 

А так ниче тутор.

Ссылка на комментарий
Данный подход (не в открытом виде, а запакованный), позволяет использовать некоторое сжатие данных, в результате чего уменьшается объем хранимой информации, а также, возможно, ускорение загрузки данных.
Данный подход (не в открытом виде, а запакованный), позволяет уменьшить занимаемое место на HDD (за счет уменьшения количества файлов), увеличить скорость загрузки данных, а также применить сжатие (в U не исползуется!)
Так пойдет? Предложи свой вариант :wink:

 

Про инкапсуляцию, наследование, полиморфизм и прочие нюансы (как то: перегрузка функций, абстракиные классы) я хотле рассказть в 3 туторе =) Во втором - практика. Можно я так и сделаю? :D Просто что бы не перегужать человека таким количеством информации :)

Ссылка на комментарий
Про инкапсуляцию, наследование, полиморфизм и прочие нюансы

 

Просто что бы не перегужать человека таким количеством информации :D

Прямо говном себя чуствую рядом с такими умными словами :)

 

По-мойму лучше всё в один тутор забубенить.

Ссылка на комментарий
Прямо говном себя чуствую рядом с такими умными словами :)
Если ты серьезно, то ты просто не знаешь именно эти слова. То что они обозначают ты знаешь 8) Ты чувствуешь это :D

 

По-мойму лучше всё в один тутор забубенить.
Да, про абстрактные нужно, т.к. я написал "класс Actor. Все что находится под ним может быть помещено на карту" %)

Про наследование наверно тоже нужно бы %))). А про перегрузку тогда тоже %))))))))) Но если про перегрузку, тогда нужно обьяснять что такое функции и процедуры. Чо делать? :twisted:

Ссылка на комментарий

Апдейт :)

 

Про паки:

Как написал выше.

 

Наследование (новое!)

Одним из дочерних классов Object является класс Actor. Все что находится под ним может быть помещено на карту (map, level, уровень, етц.).
Одним из дочерних классов Object является класс Actor. Все что находится под ним (за исключением абстрактных классов, об этом в следующий раз) может быть помещено на карту (map, level, уровень, етц.) в виде обьекта (это не так страшно как звучит, мы разберем это чуть ниже).

 

Еще подправил концовку, и еще сморозил кору:

//==========================

// Копирайт.

//==========================

Копирайт Зондеръ. Фор врайтинг зис атикл воз юзед Зондеръ АИ.  Специал фор ПланэтДеусЕкс тчк Ру

 

 

Кстати, у нас появился один лишний Зондер или один лишний Дедъ. Кто наврал? Нехорошо.

Ссылка на комментарий

Какие палочки? Тут ни одной строчки кода нету, Ы!

Откуда у нас три Дедъа?
Я рад что я одинъ :).

 

Ну буду думать что статья в норме. Подготовить html вариант? И картинки нарисовать вместо текстовых иллюстраций?

 

И что дальше писать? Продолжение или интро о структурном программировании? Типа простое изложение о программировании в целом, Туториал 0, гы-гы.

Ссылка на комментарий
Какие палочки? Тут ни одной строчки кода нету, Ы!
Откуда у нас три Дедъа?
Я рад что я одинъ :x.

 

Ну буду думать что статья в норме. Подготовить html вариант? И картинки нарисовать вместо текстовых иллюстраций?

 

И что дальше писать? Продолжение или интро о структурном программировании? Типа простое изложение о программировании в целом, Туториал 0, гы-гы.

Вот тут

Веселый Зондер писал(а):

 

Да нафик так глубоко копать - главное чтобы подробно и легко было написано про классы, наследования и оверрайд.

Ссылка на комментарий

Нет, ну тут чисто про кодинг ничего нет. Я думаю этого хватит для начала.

 

Да нафик так глубоко копать - главное чтобы подробно и легко было написано про классы, наследования и оверрайд.

Т.е. туториал 0 нафиг не нужен? Я просто хотел осветить такие термины как переменная, константа, опперация присвоения, мат. выражения, синтаксис, ну и прочие термины. Получается типа как словарик терминов.

Ссылка на комментарий
Да нафик так глубоко копать - главное чтобы подробно и легко было написано про классы, наследования и оверрайд.

Т.е. туториал 0 нафиг не нужен? Я просто хотел осветить такие термины как переменная, константа, опперация присвоения, мат. выражения, синтаксис, ну и прочие термины. Получается типа как словарик терминов.

Ну синтаксис можно и описать...

Ссылка на комментарий

Я имею ввиду сам термин. Синтаксис UScript в 2 туторе должен быть описан. По крайней мере поверхностно. Либо отодвинуть это на 3 туториал, а во втором просто показать как делать свой класс, пак и навыки с АнрилЕд

 

Тутор 0 - для людей которые с программирование вообще незнакомы не знают и не слышали.

Ссылка на комментарий

Можно было бы ещё сравнить классы с папками в Explorer'е, и воткнуть скрин из UnrealEd, в месте где несколько классов развёрнуто.

И неплохо бы было написать про специфику организации классов DX.

Ссылка на комментарий

Это теория все, в следующем практика. Закрепительная часть. Со скринами конкретными.

 

Будет, будет посвящено Дедъ'у...

 

А что ты имеешь ввиду под спецификой организации классов?

Ссылка на комментарий

Добавил описание директорий. Новичкам это может быть очень полезным, что бы быстро вьехать в курс дела. Про назначение своих папок (в DeusEx.ini) будет описано в последних туторах. Под названием "Делаем серьезный отдельный (крупный или не очень) мод". Название пока рабочее 8)

 

Теперь кратенько о папках игры (можете открыть свою директорию Deus Ex'а и сравнить :))
  • - папка с ридми файлами, а еще там находятся splash скрины

Maps - карты, все карты тут (.dx)

Music - музыка (.umx)

Save - сейвы, нас это не будет интересовать

Sounds - звуки (.uax)

System - главные паки (те что универсальные) .u, файлы локализации (например .int файлы; об этом подробнее в последующих туторах), exe файл нашей игры, dll (библиотеки, в которых содержатся отдельные части приложения; используются exe файлом), файлы инициализации (т.н. конфиги, ini файлы), логи.

Textures - текстуры (.tex)

Еще раз напомню, что каждый из этих файлов (паков т.е.) представляет собой хранилище для ресурсов.

Ссылка на комментарий
  • 1 год спустя...

Подскажите, я все дерево классов перыл , где находятся классы персонажей(Поль Дентон, Боец мж12 и т. д.) именно в unrealed, я токо знаю, что они лежат в Deusex.u, а в этом гребаном дереве ничего ненайдешь. Укажите хотя бы путь...

Ссылка на комментарий

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
×
×
  • Создать...