ria pc game
fle game engine - движок для создания игр
fle game engine - движок для создания игр


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Сегодня
18 февраля 2019 5:22
Вход Регистрация Забыли пароль ?

megainformatic - Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 7
Приключения Кости Коробкина - Как я провел лето - онлайн комикс - страница 7 Предлагаем вашему вниманию онлайн-комикс Приключения Кости Коробкина - Как я провел лето. анонсы других продуктов
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
Поддержка сайтом нескольких языков - модуль multi lang

megainformatic - Моделируем девушку в 3d используя 3ds max - другие статьи сборника статей - обзор

установка нового шаблона в joomla 2.5.4

Описание продукта megainformatic cms social

Описание продукта megainformatic cms social

megainformatic - ТЗ на сайт по аналогии rys-stroi.ru

megainformatic cms groupon

megainformatic - дизайн сайта строительной компании УЛЬТРА-СТРОЙ

megainformatic - Тестирование подключения платежной системы

megainformatic - Выпадающее окно регистрации на сайте

megainformatic - Тестирование подключения к платежной системе с использованием скрипта эмулятора

megainformatic - Модуль для регистрации пользователя на сайте

megainformatic - Код для модуля регистрации пользователя на сайте

megainformatic - Быстрый подсчёт ключевых слов в статье

megainformatic - Модуль подсчёта ключевых слов в статье

megainformatic - Онлайн-сервис для подсчёта статистики ключевых слов

megainformatic - Пишем слайдер на javascript с нуля

megainformatic - Логика работы слайдера на javascript

megainformatic - Пишем свою соц. сеть - модуль предложений для webjob

megainformatic - Пишем свою соц. сеть - модуль предложений для webjob - часть реализации для личного кабинета

megainformatic - Пишем свою соц. сеть - Реализация файлового хранилища предложений в csv-файле

megainformatic - Тестирование подключения к платежной системе ЕДИНЫЙ КОШЕЛЕК (w1.ru) с использованием скрипта эмулятора

megainformatic - Пишем свою cms - шаг 1

megainformatic - Пишем свою cms - шаг 2

megainformatic - Пишем свою cms - шаг 3

megainformatic - бесплатная флеш игра freeway fury 2 - разработчик Serius Games

megainformatic - бесплатные флеш игры сторонних разработчиков

megainformatic - Как я осваивал Flash

megainformatic - Список уроков на тему создания flash приложений и игр

megainformatic - Как я осваивал Flash - шаг 2 - Основы создания простейших flash - игр

проект портала Идеи Комфорта

megainformatic - игра Веселый Буквоежка

megainformatic - игра Веселый Буквоежка

megainformatic - Использование cron, crontab и планировщика задач

megainformatic - Совместное использование jquery и mootools или других js-фреймворков

megainformatic - Модуль content php performer для megainformatic cms

megainformatic - Пишем компактный слайдер

megainformatic - Что нужно знать для создания сайта ?

megainformatic - Что нужно знать для создания сайта ? Глава 2 - Кодировки и DOCTYPE

megainformatic - Что нужно знать для создания сайта ? Глава 3 - Идём дальше - нанизываем новый код - где объявляются стили css и код javascript

megainformatic - Что нужно знать для создания сайта ? Содержание

megainformatic - Что нужно знать для создания сайта ? css - стили

megainformatic - preg_match или Использование регулярных выражений в php

megainformatic - статьи Тимонина Андрея - Flash. Содержание

megainformatic - статья Тимонина Андрея - Flash. Подготовка к работе.

megainformatic - статья Тимонина Андрея - Flash. Hello world.

megainformatic - статья Тимонина Андрея - Flash. Экспорт SWC библиотеки.

megainformatic - Тимонин Андрей - Несколько слов о себе

megainformatic - статьи Тимонина Андрея - уроки из области веб программирования, создания казуальных игр

megainformatic - статья Тимонина Андрея - Обеспечиваем доступ к объекту из любой точки программы. Singleton

megainformatic - статья Тимонина Андрея - Хронология работы программы. Создаем Лог

megainformatic - статья Тимонина Андрея - Поиск файлов. Получаем список файлов каталога.

megainformatic - статья Тимонина Андрея - Исключения. Создаем класс обработки исключений.

megainformatic - статья Тимонина Андрея - States. Создаем менеджер состояний игры.

megainformatic - статья Тимонина Андрея - Регистрация. Часть 1. Создаем страничку регистрации на сайте.

megainformatic - статья Тимонина Андрея - Регистрация. Часть 2. Создаем обработчик, и заносим информацию о пользователе в Б.Д.

подробнее

Веселый Буквоежка - онлайн комикс - страница 6

представляем Веселый Буквоежка - онлайн комикс.

- Где это мы ?

Веселый Буквоежка - онлайн комикс - страница 6

если кликать картинку она будет последовательно меняться в размерах от 620 до 2048 пиксель.

[страница 1]  [страница 2]  [страница 3]  [страница 4]  [страница 5]  [страница 6]  [страница 7]  [страница 8]  [страница 9]  [страница 10]  [страница 11]  [страница 12]  [страница 13]  [страница 14]  [страница 15]  [страница 16]  [страница 17]  [страница 18]  [страница 19]  [страница 20]  [страница 21]  [страница 22]  [страница 23] 

подробнее


Контакты

     
 

Контакты:

Skype - megainformatic

https://twitter.com/megainformatic_

Предложить Ваш проект или связаться со мной.
 
     
Подробнее об авторе

У вас возник какой-то вопрос, проблема или предложение ?

Вы Можете оставить своё сообщение через форму комментария на данной странице.

Если я смогу помочь Вам в решении, то обязательно отвечу.

подробнее

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

Прыгающий шарик

Как я осваивал Flash - шаг 1 - урок знакомит с основами создания и изменения свойств объектов, а также описывает создание анимации по ключевым кадрам на примере прыгающего шарика.

Как я осваивал Flash - шаг 2 - Основы создания простейших flash - игр - урок знакомит с основами управления flash-объектами в приложении flash.

Шаг 3 - управляемый шарик - двигаемся дальше в освоении флеш-технологий, отвечаем на поставленные вопросы и двигаемся дальше.

Как создать анимированный флеш-баннер ? - раскрываются основы импорта изображений во флеш и создания анимированных баннеров.

подробнее

     
 
Урок 5 Построение классов игровых объектов и других необходимых классов
 
О том, что потребуется для данного урока читайте в основном разделе - уроки delphi directx 8.1
 
Далее у читателя подразумевается наличие базовых знаний языка Delphi.
 
[назад] [страница 1] [далее] [к содержанию]
 

На протяжении предыдущих 4 уроков мы рассмотрели как строится базовый каркас D3D-приложения, узнали некоторые детали разработки игры.

Теперь пришло время познакомиться с созданием собственно игровых единиц, отвечающих за формирование игры и игрового процесса.

 

Начнём с того, что спросим себя: для чего вообще нужны игровые объекты?

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

В разработке игр это также применимо. Объект обладает определенными свойствами, имеет методы и может реагировать на определенные события. Создание игровых объектов также обусловлено тем, что для их использования часто требуется несколько типов ресурсов логически связанных между собой. Например, для модели персонажа требуется также текстура, с персонажем могут быть связаны определенные виды звуков и т.д.

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

 

Если объекты достаточно просты и не используют методы, то их можно представить в виде простых переменных или структур.

Какие типы объектов бывают?

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

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

Этот процесс является итеративным. Хорошие и проработанные объекты создаются постепенно, по мере совершенствования и улучшения кода игры. Это всё тесно связано с хорошими правилами и хорошим стилем программирования.

Чем яснее удастся решить задачу и выполнить ее реализацию, тем проще будет в дальнейшем вносить дополнительные улучшения и совершенствовать код.

В любом случае следует начинать с некоторой заготовки, шаблона, которые мы сейчас и рассмотрим.

 

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

Самый простой вариант - это произвести класс объекта игрока напрямую от TObject и добавить в него необходимые поля, свойства и методы. Класс может также реагировать на определенные события, но систему событий лучше использовать не обычную для типичных объектов приложений, а свою, внутренюю, игровую или же на первых порах можно вообще обойтись без неё.

 

Вот пример описания класса объекта игрока взятый из исходного кода игры проекта "Нечто: Необъяснимое".

TPlayerHero = class(TAnimGameCreature)
private
//FAction: TCharActions;
//FAnimationEnded: Boolean;


procedure DoAnimateProc(TimeLapsed: Single; hr: HResult);

//function GetTerrainHigh(x, z: Single): Single;
protected

procedure SetAnimationParam(Value: Integer); override;

function DoRender: HResult; override;
function DoFrameMove: HResult; override;
//function DoFrameMove2(TimeLapsed: Single): HResult; override;

function DoInitDeviceObjects(pd3dDevice: IDirect3DDevice8): HResult; override;
function DoRestoreDeviceObjects: HResult; override;
function DoInvalidateDeviceObjects: HResult; override;
function DoDeleteDeviceObjects: HResult; override;

public

constructor Create;
destructor Destroy; override;


end;

 
Как видим данный класс производится от некоторого базового класса - TAnimGameCreature и имеет целый ряд методов, связанных в основном с использованием анимированной 3D-модели персонажа. Внутренние особенности класса - его свойства реализованы внутри TAnimGameCreature. Посмотрим его описание -
 
TAnimGameCreature = class(TD3D_GDOListItem)
private
FAction: Integer;
FDoAnimate: TAnimateProc;

protected

procedure SetAnimationParam(Value: Integer); virtual;

function DoRender: HResult; override;
function DoFrameMove: HResult; override;

function DoInitDeviceObjects(pd3dDevice: IDirect3DDevice8): HResult; override;
function DoRestoreDeviceObjects: HResult; override;
function DoInvalidateDeviceObjects: HResult; override;
function DoDeleteDeviceObjects: HResult; override;

public

Character: TAnimatedMesh;

Pos, Orient: TD3DXVector3;
YAxisAngle: Single;
Delay: Single; //длительность воспроизведения анимации
IdleDelay: Single; //длительность бездействия

CurrentAnimDelay: Single; //временная задержка для воспроизведения текущей анимации
IdleAnimDelay: Single; //временная задержка анимации бездействия

GameScene: TD3D_GDOListItem;

constructor Create;
destructor Destroy; override;

function Animate(TimeLapsed: Single): HResult;

property Action: Integer read FAction write SetAnimationParam;
property DoAnimate: TAnimateProc read FDoAnimate write FDoAnimate;
end;

 

Как видим данный класс происходит от класса TD3D_GDOListItem. Такое наследование связано с тем, что данный объект будет являться элементом списка графических объектов TD3D_GDOList. Помимо этого вы видите ряд полей и свойств описанных в данном классе.

Конечно же данные классы достаточно односложны. В реальных более сложных играх всё будет гораздо более насыщенным различными свойствами, методами и кодом. Однако не пытайтесь сразу же начинать со сложного.

Начинать нужно с простых примеров и того, что действительно Вам по силам на сегодняшний день. Конечно нужно ставить перед собой некоторую задачу, чуть более опережающую Ваши текущие возможности и пытаться ее преодолеть, но сразу же пытаться сделать что-то сложное не стоит.

 
Если взять исходный код игры "Ну, Погоди!", то здесь Вы обнаружите полное отсутствие самостоятельных классов игровых объектов. Игра достаточно проста, поэтому всё, что нужно в качестве игровых объектов удалось описать лишь структурами данных определенных типов. Использования классов производных от TObject или каких-то других не потребовалось.
 

В игре "Ну, Погоди!" свойства и необходимые данные игрока представлены внутри самого класса игрового приложения.

Так например,

WolfPos: TTraysNum; //положение волка

определяет текущее положение волка из возможных 4х (см. описание TTraysNum)

GameScore, ShowedGameScore: Integer; //

определяет текущий и отображаемый счет игры

ShtrafGameScore: Single; //счет штрафных очков

показывает количество штрафов, три штрафных очка приводят к завершению игры - проигрышу

Аналогично игровой объект яйцо - также представлен в виде полей класса приложения -

Trays: TEggPos; //позиция яиц на лотке
TraysSet: set of TTraysNum; //номера лотков с которых могут катиться яйца
TraysIndex: TTraysIndex; //индексы номеров лотков
//используются в генераторе новых яиц

 
CreatedEggsNum: Integer; //количество созданных яиц

NewEggTimeCounter: Single; //счетчик появления нового яйца на лотке
NewEggTimeLimit: Single; //предел времени по прошествии которого
//будет создано новое яйцо на лотке

MoveEggTimeCounter, MoveEggTimeLimit: Single; //счетчик и предел
//времени для очередного шага продвижения яиц по лоткам

 
Как видите всё определяется особенностями конкретной игры. И в учебных целях, если Вы еще только учитесь писать свои собственные игры лучше начинать с простых примеров игр, пусть даже они кажутся Вам несколько примитивными. По мере накопления опыта создания можно переходить к чему-то более сложному.
 

Если вспомнить мой опыт в этой области, то я в своё время начинал изучать Delphi5 в 2002 году, пытаясь создать логическую игру Логика цвета. Естественно, что ни о каком DirectX речи не шло. Это была простая игра-окно с рядом кнопочек. Нужно было угадывать цвета которые задумал компьютер, при этом он давал небольшие логические подсказки на каждом шаге.

Чуть позднее, когда опыт программирования был мной приобретен и усвоены несколько книг по программированию, я перешел к проекту игры "Дорога в Город". Это было уже в 2003. Толчком к освоению DelphiX и созданию игры "Дорога В город" послужила попытка устроиться в одну небольшую фирму, занимавшуюся разработкой компьютерных игр. Моих знаний конечно же оказалось для этого недостаточно, кроме того, требовалось знание все-таки C++ и DirectX, а не Delphi. Однако такой опыт и требования предъявленные при этом послужили мне своеобразной планкой, к которой я стремился. Прошло некоторое время и игра была воплощена, а я уже стал подумывать над созданием 3D-игр. Так появилась библиотека Delphi DirectX 8.1. Конечно основой этой библиотеки послужили работы Алексея Баркового по конверсии кода и примеров из DirectX SDK на C++ в Delphi (http://www.clootie.ru)

Но Алексей Барковой написал именно SDK для Delphi. В его интересы не входила практическая сторона - попытка создания при помощи этого SDK полноценной игры. Для этого не хватало некоторых исходников, кроме того, не было самого главного - примера игры, который можно было бы переделать на Delphi и который послужил бы основой для создания полноценной игры.

У меня под рукой оказалась Microsoft DirectX SDK 8.1 и там был как раз пример игры Donuts3D. Я поставил перед собой задачу реализовать эту игру на Delphi 7, и эта задача удалась. При этом появилось несколько новых исходников, которые и сформировали библиотеку Delphi DirectX 8.1. Дело пошло дальше и появились проекты "Нечто: Необъяснимое" и "Ну, Погоди!".

 
Чтобы лучше понять и усвоить то, что было извлечено из опыта создания игры (проект "Нечто: Необъяснимое", кстати еще пока не завершен, находится в стадии разработки), я приступил к написанию этих уроков.
 
Советую и Вам, если Вы всерьез решились научиться создавать собственные игры и перевести это дело в дальнейшем в разряд Вашей основной или параллельной работы, вести для себя своеобразные дневники разработки, небольшие уроки и статьи. С одной стороны это позволяет лучше уяснить изучаемый материал, а с другой - это послужит хорошим материалом для тех, кто еще только учится писать свои игры, делает в этом свои первые шаги и не обладает таким опытом, который есть у Вас.
 

Итак, это было небольшое отступление от основной темы нашего урока.

Как видим важным элементом создания новой игры является собственно придумывание и описание ее игрового процесса, геймплея и основных идей. Ну и конечно же не последнюю роль играет создание игрового контента - графики, сюжета, музыки, звука.

 
Теперь мы переходим к практической части нашего урока. В рамках неё мы рассмотрим реализацию реальных игровых классов для использования в проекте "Нечто: Необъяснимое. Нить накала". Будет показано как реализованы 2 микро-игры в мини-игре "в плену желаний" для главы 7.
 
"В плену желаний" - 8,55 Mb-готовый проект CoD (8,55 Mb)
 
Код будет основан на исходном коде игры проекта "Нечто: Необъяснимое". Приложение будет работать в обычном режиме за исключением того, что после выбора пункта меню [новая игра] будет выводится не экран выбора глав, а сразу же титульный экран данной мини-игры.
 

Для использования кнопок меню [начать] и [закончить] и вывода их в нажатом состоянии подойдет класс TD3DImage2D описанный в модуле D3DGUI.pas (его Вы найдете в исходном коде игры "Ну, Погоди!").

Для рассчета относительных координат и масштабных коэффициентов вывода изображений методом TD3DImage2D.DrawScaled воспользуйтесь следующими правилами

относительные координаты экрана x = -1..1, y = 1..3

для разрешения экрана 1024х768

текстура кнопки 512х512, ее пиксельные координаты (относительно левого верхнего угла экрана) -

497, 268

масштабный коэффициент длины (x)

экран 1024/2 = 512 - это масштабный коэффициент 0.5 для длины экрана

[отношение длины к ширине] = 1024 : 768 = 1,33333333...

масштабные коэффициенты вывода текстуры 512х512 -

x_scale = 0.5*1.333333 = 0.66

y_scale = 0.5*1.333333 = 0.66

Относительные координаты вывода -

x, y = -0.02, 1.70

рассчет координат осуществляется исходя из следующих соображений

512, 384 - центр экрана (0, 0)

x = (497-512)/512 = -0.029296875

y = (268+384)/384 = 1.6979166666

 

Удобство относительных координат состоит в том, что они не зависят от разрешения экрана. Попробуйте выполнить те же рассчеты для разрешения 800х600 и получите те же масштабные коэффициенты и те же относительные координаты.

Важно также обратить внимание на то, что для анимированных объектов ТЕКСТУРА ОБЯЗАТЕЛЬНО ДОЛЖНА БЫТЬ КВАДРАТНОЙ, т.е. - 32х32, 64х64, 128х128, 256х256, 512х512, 768х768б 1024х1024, 2048х2048 иначе при выводе анимации будут возникать сдвиги картинки!

Для неанимированных изображений можно использовать и не квадратные изображения текстур, как например title.jpg - это если посмотреть в ресурсы проекта (Media\Textures\captivity) картинка размером 1024х768

 

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

готовый проект (CoD) (8,55 Mb) или исходный код примера (GameClasses) (1,3 Mb)

[downloads:13]
 

готовый проект (CoD) (8,55 Mb) представляет из себя базовую оболочку игры "Нечто: Необъяснимое" с реализованной мини-игрой "в плену желаний".

исходный код примера (GameClasses)

[downloads:13] предназначен для сборки с использованием библиотеки delphi directx 8.1 включенную в исходный код игры "Ну, Погоди!". Содержит демонстрацию вывода титульной заставки, экранного меню (обработка пунктов меню [начать] и [закончить], игрового курсора

 

Вопросы которые предстоит решить читателю:

Как сделать вывод курсора и пунктов выбранных меню с прозрачным фоном, как это имеет место в готовом проекте (CoD)?

При выходе из полноэкранного режима нажатием [закончить] происходит ошибка, как ее устранить?

 

Если Вы правильно ответите на поставленные вопросы, значит можно считать, что урок Вами усвоен и можно переходить к следующему.

 
[назад] [страница 1] [далее] [к содержанию]
 
Если Вы затрудняетесь с ответом, то можете посмотреть их - ответы на поставленные вопросы
 
     
     
     
     
Содержимое данной страницы доступно только зарегистрированным пользователям.



Пожалуйста войдите на сайт - Вход

или пройдите процедуру регистрации - Регистрация

megainformatic live chat
Начать беседу
X
 

Оставленные комментарии



fle game engine - движок для создания игр
fle game engine - движок для создания игр


Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний
Костя Коробкин Комикс Коллекционное издание - 6 комиксов, 81 страница, 220 mp3 треков
megainformatic Размещение баннерной рекламы у нас
Время загрузки: 0,1021