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


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

megainformatic - Как создать игру ? - Программируем сами - Самый первый шаг
        Как
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 3

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 4

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 5

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 6

megainformatic - Костя Коробкин - СЕКРЕТНЫЙ ПРОЕКТ - интерактивный комикс (kk scp) - онлайн комикс - страница 7

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

megainformatic - Эмулятор ZX-Spectrum, БК-0010.01 и их работа в эмуляторе DosBox 0.74

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 1

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 2

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 3

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 4

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 5

megainformatic - первый независимый онлайн-журнал комиксов ККК Костя Коробкин Комикс номер 1 март 2016

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 6

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 7

megainformatic - Эмулятор БК-0010.01 версия 2.6 для Windows 9x/Me/2000/XP автор Юрий Калмыков 2002 год

megainformatic - api получения готового решения для решения различных задач возникающих при создании сайта

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 8

роман Eternity Вечность - автор Синицин Андрей megainformatic

роман Eternity Вечность - автор Синицин Андрей megainformatic - страница 2

роман Eternity Вечность - автор Синицин Андрей megainformatic - страница 3

роман Eternity Вечность - автор Синицин Андрей megainformatic - Windows Sockets 2, ping, Windows SDK 7, чем открыть hxs файл - страница 4

megainformatic - Размещение Вашей рекламы на нашем сайте

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 9

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 10

роман Eternity Вечность - автор Синицин Андрей megainformatic - В чём отличие в применении символов & и * в языке c++ ? также продолжаем изучать Windows Sockets 2 и пример simple - страница 5

megainformatic - Костя Коробкин - В гостях у тёти Светы часть 2 Живые машины (kk as) - онлайн комикс - страница 11

megainformatic - игра Шарики на лифте Серия 1 Разгони Лифт / Balls on Lift Level 1 Run The Lift версия 0.9.2 05.10.2016 / version 0.9.2 05.10.2016

megainformatic - Костя Коробкин - В гостях у тёти Светы часть 2 Живые машины (kk as) - онлайн комикс - страница 12

роман Eternity - страница 6 + решение по анимации закрывающихся дверей лифта

megainformatic - Сообщить об ошибке

Balls on Lift Table of Records / Шарики на лифте Таблица рекордов

megainformatic - Костя Коробкин - В гостях у тёти Светы часть 2 Живые машины (kk as) - онлайн комикс - страница 13

Balls on Lift / Шарики на лифте - Как создать игру - серия уроков - Рисуем шарик / How make the game - series of lessons - draw ball

подробнее

Creating game on fle game engine - Simple game / Создание игры на fle game engine - Simple game

1. Спрайты



read paper in english

В данном уроке мы проведем своего рода быстрый старт - это введение в создание игр в среде fle game engine.





Содержание

страница 1 - Спрайты

страница 2 - Объекты

страница 3 - Наложение объектов

страница 4 - Код - Настройка параметров Scene Editor fge и написание кода для вывода спрайта шарика в вашем первом игровом приложении

страница 5 - Отображаем прыгающий шарик

страница 6 - Загрузка игровой сцены

страница 7 - Перемещения игровой сцены

страница 8 - Закрываем часть сцены от пустот при помощи черной текстуры с прорезью, ограничиваем перемещение сцены

страница 9 - Реализуем корректное попадание в ямы и около ям - определяем границы спрайтов ям и спрайта прыгаюшего шарика

страница 10 - Проверка столкновений

страница 11 - Игровой счёт, звуки, музыка

урок #2 страница 1 - Создание новых сцен для игры simple game, расширенная версия simple game extended

13. Скроллинг больших локаций

14. использование переменных в игре на c++ directx 9c

15. Мульти анимация







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

Мы будем делать первую нашу игру, используя систему fle game engine.

Игра называется Веселый Шарик.



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



Понятие игровой сцены



Понятие игровой сцены

Любая 2d или 3d игра всегда включает игровую сцену и размещенные на ней игровые объекты.

На рисунке вы можете видеть игровой объект Шарик, размещенный в игровой сцене.

Игровая сцена плоская, 2d.



Спрайты



Спрайты

Вы видите на рисунке спрайты. Они могут быть статичными или анимированными.

Спрайт - это элемент графического динамического изображения.

Графического - потому что это элемент графики. Динамического - потому что изображение может содержать внутри себя несколько кадров.

На экране, в каждый момент времени, виден всегда лишь 1 кадр. Если спрайт состоит всего из 1 кадра - то это статичный спрайт.

Спрайты бывают квадратные и прямоугольные.

Основные характеристики спрайта - это его размеры, размер кадра, количество кадров и скорость их воспроизведения.

Вообще говоря спрайт подразумевает анимацию, но мы будем считать спрайтами и изображения состоящие всего из 1 кадра, т. к. по-сути это тоже спрайты, просто без анимации, но и те и другие составляют основу любой игры - это всё то, что игрок увидит на экране и ничего более.

У нас с Вами будет всего 3 спрайта: прыгающий шарик и песчаный блок с ямой.

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

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

песчаный блок

песчаный блок с ямой

На первом изображении для наглядности показаны все 8 кадров анимации прыгающего шарика, на втором он показан уже в действии.

Ну а с песчаным блоком думаю всё понятно.

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

песчаный блок с ямой - передняя часть

песчаный блок с ямой - задняя часть

Задняя часть, как видим, ничем не отличается от исходного изображения песчаного блока.

Это всё нужно для того, чтобы имитировать вот такой эффект -

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

Посмотреть на спрайт своими глазами можно скачав пример Coords2D Simple game (307 Kb) -

Скачать пример Coords2D Simple game





Установить, запустить Coords2D.exe и выбрать пункт меню File > Reload.

Итак, спрайты подготовлены, теперь используя редактор Scene Editor, нужно подготовить игровую сцену - т. е. расставить игровые объекты по своим местам.

[назад] [далее]

подробнее

     
  онлайн обучение, репетитор  
 

Здравствуйте, уважаемый посетитель !

Меня зовут Андрей. Я занимаюсь онлайн-преподаванием. Опыт преподавания с 2003 года. Опыт работы дизайнером с 2006 года. Опыт работы по созданию сайтов с 2010 года.


Моё портфолио

Чему мы будем обучаться ?

Могу Вам предложить следующие направления:

 
     
  Основные и дополнительные проводимые курсы.

Создание приложений для Windows на c++, c#, delphi.

Создание приложений на Java.

Создание мобильных приложений для Android.

Создание веб приложений на php/mysql/html/css/js и asp.net

Курсы проводимые в составе указанных или отдельно:

Основы создания сайтов и язык php. Здесь же мы познакомимся с основами web-дизайна и верстки. По прохождении курса Вы сможете самостоятельно зарегистрировать и создать собственный работающий сайт.

Основы верстки и адаптивной верстки.

Создание собственной cms.

Создание сайтов на готовых cms - bitrix, wordpress, drupal, joomla, opencart, prestashop, shop script le, host cms, netcat, webassyst и других.

Создание сайта на asp.net

Создание html5 приложений и игр для веб и для андроид.

Примеры готовых приложений и игр можно найти на сайте - webinformatic.ru

Как создать свое видео для youtube и продвигать его.

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

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

Все игры, графика для них, все приложения, вообщем все что вы увидите в этих видео создавал я сам.























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

 
  Уроки Photoshop - сюда входит изучение как основ работы с программой, так и опытные практические примеры, с помощью которых Вы научитесь решать реальные практические задачи.  
     
  Уроки 3ds max - здесь мы познакомися с основами 3d графики, научимся создавать простенькие модели, а после этого перейдем к практическим примерам - созданию интерьеров, закрытых и открытых сцен, а также различных статичных и анимированных объектов и персонажей.  
     
     
  Программирование на примере создания 2D и 3D игр на языках C++ или Delphi в среде DirectX 9c. Практика и еще раз практика и ничего более. Теорию Вы можете изучить и сами не так ли ? А вот практический материал достаточно богат. Мы рассмотрим как создаются игры и научимся программировать. К Вашим услугам примеры игр Ну, Погоди!, Donuts3D, Нечто: Необъяснимое, Веселый Буквоежка, Шарики и Ямки, Шар Бумага Карандаш, Сибирский конфликт Война миров реинкарнация, Ria.  
     
 

Другие дисциплины. По Вашему желанию я могу заниматься с Вами по таким предметам как - Офисные программы MS Word, MS Excel. Основы работы с базами данных MS Access. Основы создания музыки и обработки звука - FL Studio, Adobe Audition, Sound Forge. Основы работы с векторной графикой в Corel Draw.

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

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

 
     
  Содержание курсов обсуждается с Вами индивидуально. Было бы желание и время обучаться !

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

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

 
     
 

Если Вас что-то заинтересовало или есть вопросы - обращайтесь.


Контакты:

ICQ - 406469097

Skype - megainformatic

abc@varve.ru

 
     
  Успехов Вам !!!  
     
     
     
подробнее

     
  [Назад] [Все уроки] [Далее]  
     
 

10/06/2008 Воспроизведение файлов в формате OGG Vorbis

Для воспроизведения используется интерфейс для Ogg Vorbis библиотек от Xiph.org

[downloads:15]

Автор конверсии на Delphi - Matthijs Laan, 2001 год.

 

Для создания музыки в формате ogg потребуются следующие манипуляции:

запустить Mod Plug Tracker 1.16 и открыть требуемую мелодию (*.it, *.s3m, *.xm, *.mod). Экспортировать ее в формат mp3 с требуемым качеством.

запустить Sound Forge 7.0, открыть созданный mp3-файл и пересохранить его в формате ogg с требуемым качеством.

 

Теперь рассмотрим как осуществляется процесс воспроизведения созданного файла в примере OggVorbis\demos\player

Проект Player.dpr

Модуль Main.pas

Внутри класса TMainForm

Описаны несколько приватных полей:

WaveOut: TWaveOut;
F: TFileStream;
vf: OggVorbis_File;
FileName: string;

 

При нажатии кнопки sbPlay в окне формы вызывается метод -

procedure TMainForm.sbPlayClick

Внутри него происходит следующее -

if Playing and (not Paused) then
begin
WaveOut.Pause;
//пауза
Paused := True;
Timer1.Enabled := False;
//таймер отключается
sbPlay.Glyph := Glyphs[glPlay];
end
else
if Playing and Paused then
begin
WaveOut.Unpause;
//отключение паузы
Paused := False;
Timer1.Enabled := True;
//включение таймера
sbPlay.Glyph := Glyphs[glPause];
end
else
if OpenDialog1.Execute then
PlayFile(OpenDialog1.FileName);
//загрузка ogg-файла и старт воспроизведения

 
procedure TMainForm.PlayFile(FN: string);
var
res: integer;
begin
FileName := FN;

F := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); //открываем файл

res := ov_open_callbacks(F, vf, nil, 0, ops_callbacks); //передаем OggVorbis-библиотеке
if res <> 0 then
//обрабатываем ошибки открытия
begin
F.Free;
MessageDlg('ov_open_callbacks failed: ' + GetVorbisErrorName(res), mtError, [mbOK], 0);
exit;
end;

WaveOut := TWaveOut.Create(Self); //создаем поток вывода звука
WaveOut.SetWaveFormat(vf.vi.channels = 2, vf.vi.rate, 16);
//и задаем ряд параметров
WaveOut.OnStatsChange := WaveOutStatsChange;
WaveOut.OnPlayingDone := WaveOutPlayingDone;
WaveOut.ReadProc := ReadBuf;
WaveOut.OpenAudio;

GUIPlay; //отображаем воспроизведение на форме окна приложения

WaveOut.Play; //включаем фактическое воспроизведение
end;

 

//данная функция обратного вызова (callback) указанная выше

function TMainForm.ReadBuf(const Buffer; Size: Longword; var Time: Double): Longword;
var
BytesRead, Change: Longword;
begin
BytesRead := 0;

Time := ov_time_tell(vf); //считываем длительность мелодии

repeat
Change := ov_read(vf, PByteArray(Buffer)^[BytesRead], Size - BytesRead, 0, 2, 1, nil);
//загружаем данные в буфер
BytesRead := BytesRead + Change;
until (Change = 0) or (BytesRead = Size);

result := BytesRead;
end;

 
При нажатии sbStop вызывается метод GUIStop -
 
procedure TMainForm.GUIStop;
begin
if not Playing then
//если ничего не играет, то выход
exit;

WaveOut.Free; //очищаем звуковой поток и объект OggVorbis-файла
ov_clear(vf);

Timer1.Enabled := False; //отключаем таймер
{...}

Playing := False; //сбрасываем индикатор проигрывания

{...}
end;

 

Таймер служит для отслеживания текущей позиции воспроизведения -

procedure TMainForm.Timer1Timer(Sender: TObject);
begin
try
lTimeNow.Caption := SecondsToString(WaveOut.PlayingTime);
except
GUIStop;
raise;
end;
end;

 

Регулировка громкости -

procedure TMainForm.trackVolumeChange(Sender: TObject);
begin
if Playing then
WaveOut.Volume := DWORD(trackVolume.Position) + DWORD(trackVolume.Position) shl 16;
trackVolume.Position := WaveOut.Volume and $FFFF;
trackVolume.SliderVisible := True;
end;

procedure TMainForm.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: integer; MousePos: TPoint; var Handled: Boolean);
begin
if Playing then
if WheelDelta > 0 then
trackVolume.Position := trackVolume.Position + 3000
else
trackVolume.Position := trackVolume.Position - 3000;
Handled := True;
end;

 

При нажатии на кнопку sbNext (переход к следующей композиции списка воспроизведения) -


WaveOutPlayingDone(Self);

 
procedure TMainForm.WaveOutPlayingDone(Sender: TObject);
begin
GUIStop;
//останавливаем воспроизведение

MREWSPlaylist.BeginRead; //даем сигнал чтения критической секции (для защиты от одновременных обращений к данным списка воспроизведения)
try
if Playlist.Count = 0 then
//если плей-лист пуст - выход
exit;

if Shuffle then //если включена опция выбора случайной композиции из списка, то выборка ее
begin
PlaylistForm.ListBox1.ItemIndex := Trunc(Random(Playlist.Count));
//Trunc вполне можно опустить, т.к. Random итак возвращает Integer
PlaylistForm.ListBox1DblClick(Self);
//и запуск двойного щелчка по данной композиции
exit;
end;

if (PlaylistForm.ListBox1.ItemIndex = (PlaylistForm.ListBox1.Items.Count - 1)) and Repeating then //если найдена последняя композиция списка и включена опция бесконечного повтора, то переход к первой композиции списка
begin
PlaylistForm.ListBox1.ItemIndex := 0;
PlaylistForm.ListBox1DblClick(Self);
exit;
end;

PlaylistForm.ListBox1.ItemIndex := PlaylistForm.ListBox1.ItemIndex + 1; //увеличить индекс текущего элемента на 1
PlaylistForm.ListBox1DblClick(Self);
finally
MREWSPlaylist.EndRead;
end;
end;

 

модуль Playlist.pas

procedure TPlaylistForm.ListBox1DblClick(Sender: TObject); //двойной щелчок по элементу списка воспроизведения приводит к остановке воспроизведения текущей мелодии и к старту воспроизведения выбранной
begin
MainForm.GUIStop;

MainForm.PlayFile(ListBox1.Items.Strings[ListBox1.ItemIndex]);
end;

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

Файлы необходимые для поставки с дистрибутивом игры -

vorbisfile.dll

ogg.dll

vorbis.dll

Исходные файлы - в папке OggVorbis -

AudioWaveOut.pas - вывод декодированного звука

OSTypes.pas - базовые типы

Codec.pas - интерфейс к vorbis.dll

VorbisFile.pas - интерфейс к vorbisfile.dll

Ogg.pas - интерфейс к ogg.dll

 

В опциях проекта указываем ссылку на папку OggVorbis содержащую данные файлы - Project > Options > Directories/Conditionals > Search Path

В секцию uses модуля который будет содержать команды воспроизведения добавляем ссылки на модули - AudioWaveOut, VorbisFile

 
Можно также создать специальный модуль, например OggMusic.pas выполняющий роль интерфейса с данными модулями, что и было сделано - OggMusic.pas
 

Правила использования:

Добавить в проект необходимые файлы - см. выше

В секции uses модуля проекта, в котором будет воспроизводиться музыка добавить ссылку на OggMusic.pas

Внутри нужного класса (приложения или игровой сцены) объявить поле с типом TOggVorbisPlayer -

В требуемых местах приложения или игровой сцены вызывать нужные методы плеера:

Например,

function TD3DGameApp.CreateSoundObjects(h_Wnd: HWND): HRESULT;
begin
//создаем OggPlayer для музыкальных тем
CreatePlayer;

{...}

function TD3DGameApp.CreatePlayer: HResult;
begin

OggMusicPlayer := TOggVorbisPlayer.Create(m_hWnd); //передаем обработчик окна приложения объекту плеера

if Assigned(OggMusicPlayer) then result := S_OK
else
result := E_FAIL;

end;

procedure TD3DGameApp.FreePlayer;
begin
FreeAndNil(OggMusicPlayer);
//удаляем плеер
end;

procedure TD3DGameApp.PlayTheme(Theme: string);
begin
if Assigned(OggMusicPlayer) then
OggMusicPlayer.Play(Theme);
//проигрываем указанный Ogg-файл
end;

procedure TD3DGameApp.StopTheme;
begin
if Assigned(OggMusicPlayer) then
//делаем паузу в воспроизведении
OggMusicPlayer.Pause;
end;


procedure TD3DGameApp.DestroySoundObjects;
begin
FreePlayer;
//вызываем удаление плеера

 

Доработки: поскольку музыка играет без использования IDirectSound, то при сворачивании окна приложения она продолжает играть. Чтобы это исправить можно вызывать метод паузы на время пока приложение неактивно.

Ряд вопросов:

насколько велика временная задержка при переключении на проигрывание новой мелодии?

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

 
Регулировка громкости музыки из окна Настройки - см. следующую статью
 
     
  [Назад] [Все уроки] [Далее]  
     
подробнее

Модуль галерей для любой cms

Модуль галерей для любой cms
multi gallery
Приобрести комплект megainformatic cms express files + модуль multi gallery

Стоимость: 1500 руб.



Вашему вниманию предлагается модуль для создания галерей на вашем сайте под управлением любой cms.

Данный модуль успешно тестировался и внедрен в сайты на joomla, opencart, dle, megainformatic cms

http://грандфорж.рф/gallery.html (joomla)

http://jado74.ru/index.php?route=product/category&path=64_68 (opencart)

http://megainformatic.ru/ (megainformatic cms данный сайт, на котором вы просматриваете эту страницу)





В комплект входит готовая cms - megainformatic cms express files + модуль галереи и описание с инструкцией по интеграции в сайт на любой cms.

Пример встроенного в сайт на megainformatic cms express files модуля галереи

ОТЛИЧИТЕЛЬНЫЕ ОСОБЕННОСТИ

- весь необходимый код в 1 php файле;

- простой механизм встраивания требующий минимум изменений в вашей cms;

- универсальность - можно интегрировать в любую cms на php;

- простота использования - нужные галереи представляют собой обычную папку, а для вывода на сайте вам достаточно вставить в статью специальный тег - |gallary|dir_name|/gallary|;

- открытый исходный код;

- неограниченное количество галерей используемых как на конкретной странице сайта, так и по сайту в целом;

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

     
 

Видео урок посвященный созданию игры Ну, Погоди ! - рождение игры часть 3.

Покажет Вам простейшую элементарную игру и особенности её создания в delphi 7 на directx 8.1 api.

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

Оконный и полноэкранный режимы работы имеются во всех современных играх написанных и в OpenGL и в DirectX.

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

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

 
Именно поэтому, пока Вы еще чувствуете, что Ваша игра "сыровата", тестируйте и отлаживайте ее в оконном режиме. Он позволит Вам в особо фатальных случаях просто снимать приложение через диспетчер задач, что в случае полноэкранного режима не всегда может оказаться возможным.
 
 
 

Если Вам ясен весь материал, изложенный в 2х предыдущих уроках, то в общих чертах работа D3D-приложения в оконном режиме Вам тоже должна быть понятна.

Размер рабочей области окна D3D в оконном режиме определяется размерами того окна, чей обработчик (Handle) задан при передаче параметров во время создания объекта IDirect3DDevice8

В этом легко убедиться заглянув в код методов TD3DGameApp.Create_ и TD3DGameApp.CreateDisplayObjects

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

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

В случае оконного режима это может быть обычный пункт меню TMainMenu. В полноэкранном режиме ситуация несколько сложнее - в этом режиме главное меню окна не отображается, именно поэтому для выхода из полноэкранного режима нужно использовать какую-либо клавишу (комбинацию клавиш), причем обрабатываемую средствами DirectInput, можно также использовать игровое меню, реализуемое средствами Direct3D без использования TMainMenu.

О том, как создать и использовать такое меню описано в статье - Создание игрового меню

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

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

Использование DirectInput8 для того, чтобы пользователь мог быстро управлять игрой, а игра быстро реагировать на команды пользователя сводится к следующему -

в пункт uses секции interface нужно подключить модуль DX8_DIUtil8.pas из библиотеки Delphi DirectX 8.1

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

const

ChangeWindowModeKey = isButton1; //константа isButton1 определена в модуле DX8_DIUtil8.pas

в описании класса D3D-приложения (класс TD3DGameApp в нашем случае) добавить поле

m_DXInput: TDXInput; //управление игрой через DirectInput

Также в описании класса нужно добавить несколько новых методов -

// Input functions
procedure SetDefaultDefKeys;
procedure CreateInputObjects;
procedure DestroyInputObjects;
procedure UpdateInput;

 

Далее в секции implementation нужно реализовать код данных методов -

procedure TD3DGameApp.SetDefaultDefKeys;
begin
FCustomKeyAssign := DefineDefaultKeys;
//процедуру DefineDefaultKeys нужно определить как локальную для модуля //главной формы Вашего проекта
end;

в секции интерфейса она записывается как

function DefineDefaultKeys: TKeyAssignList;

а в секции реализации как

function DefineDefaultKeys: TKeyAssignList;
begin
FillChar(Result, SizeOf(Result), 0);

AssignKey(Result, ChangeWindowModeKey, [Ord('W'), VK_F6]); //к данному действию привязываются клавиши W и F6

end;

далее реализуем код оставшихся методов

procedure TD3DGameApp.CreateInputObjects;
begin
SetDefaultDefKeys;
m_DXInput := TDXInput.Create(Self);
end;

procedure TD3DGameApp.DestroyInputObjects;
begin
FreeAndNil(m_DXInput);
end;

procedure TD3DGameApp.UpdateInput;
var
CurrentState: TUserInput;
begin
if not Assigned(m_DXInput) then Exit;

m_DXInput.Update;

if ChangeWindowModeKey in m_DXInput.States then {выполнить нужное действие};

end;

вызов метода CreateInputObjects нужно добавить внутри TD3DGameApp.OneTimeSceneInit

вызов метода DestroyInputObjects нужно добавить внутри TD3DGameApp.FinalCleanup или другом методе освобождения ресурсов, который вызывается из FormDestroy

вызов метода UpdateInput, в котором осуществляется обновление состояния устройств DirectInput и вызов методов обработки тех или иных действий пользователя нужно добавить внутри метода TD3DGameApp.FrameMove

 
Итак, переключение полноэкранного/оконного режимов D3D-приложения будет происходит по действию ChangeWindowModeKey. Данное действие будет вызываться клавишами [W] или [F6]. Можете использовать другие клавиши, если хотите.
 

Остается в строке кода

if ChangeWindowModeKey in m_DXInput.States then {выполнить нужное действие};

комментарий {выполнить нужное действие}

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

Таким методом является следующий -

procedure TOptionsMenu.AcceptOptions;
var
ScreenSizeMetric: TScreenSizeMetric;
begin
if g_d3dApp = nil then Exit;
ScreenSizeMetric := GetScreenSize;
if (not g_d3dApp.m_bFullScreen = Windowed) and
(g_d3dApp.m_dwScreenWidth = ScreenSizeMetric.Width) then Exit;

g_d3dApp.SwitchDisplayModes(not Windowed, ScreenSizeMetric.Width,
ScreenSizeMetric.Height);
end;

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

В простейшем случае можно рассмотреть реализацию переключений между оконным режимом приложения и полноэкранным режимом с разрешением например 800x600 пикселей и максимальной частотой покадровой развертки поддерживаемой монитором (100 Hz или выше).

Предварительно добавьте данный метод в описание класса TD3DGameApp

function SwitchDisplayModes(bFullScreen: Boolean;
dwWidth, dwHeight: Cardinal): HRESULT;

Затем реализуйте его в коде следующим образом -

function TD3DGameApp.SwitchDisplayModes(bFullScreen: Boolean;
dwWidth, dwHeight: Cardinal): HRESULT;
var
hr: HResult;
begin
if not m_bIsActive or not m_bDisplayReady then begin
result := S_OK;
Exit;
end;

// Check to see if a change was actually requested
if bFullScreen then
begin
if ((m_dwScreenWidth = dwWidth) and (m_dwScreenHeight = dwHeight)) and
(m_bFullScreen = bFullScreen ) then
begin
result := S_OK;
Exit;
end;
end
else
begin
if not m_bFullScreen then begin
result := S_OK;
Exit;
end;
end;

// Invalidate the old display objects
m_bDisplayReady := FALSE;
InvalidateDisplayObjects;

// Set up the new presentation paramters
if bFullScreen then
begin
m_d3dpp.Windowed := FALSE;
m_d3dpp.hDeviceWindow := m_hWndMain;
m_dwScreenWidth := dwWidth;
m_d3dpp.BackBufferWidth := dwWidth;
m_dwScreenHeight := dwHeight;
m_d3dpp.BackBufferHeight := dwHeight;
m_d3dpp.BackBufferFormat := m_d3dfmtFullscreen;
end
else
begin
m_d3dpp.Windowed := TRUE;
m_d3dpp.hDeviceWindow := 0;
m_d3dpp.BackBufferWidth := 0;
m_d3dpp.BackBufferHeight := 0;

m_dwScreenWidth := dwWidth;
m_dwScreenHeight := dwHeight;

m_d3dpp.BackBufferFormat := m_DesktopMode.Format;
end;

// Reset the device
hr := m_pd3dDevice.Reset( m_d3dpp );
if SUCCEEDED(hr) then
begin
m_bFullScreen := bFullScreen;
hr := RestoreDisplayObjects;
if SUCCEEDED(hr) then
begin
m_bDisplayReady := TRUE;
result := S_OK;
Exit;
end;
end;

// If we get here, a fatal error occurred
PostMessage( m_hWndMain, WM_CLOSE, 0, 0 );
result := E_FAIL;
end;

Все недостающие поля, описанные в реализации данного метода необходимо добавить в класс TD3DGameApp и инициализировать их в методе конструктора TD3DGameApp.Create и других необходимых методах, где это понадобится.

Заметьте, что внутри данного метода каждый раз при переключении между полноэкранным/оконным режимами или при смене разрешения полноэкранного режима происходит инвалидация InvalidateDisplayObjects всех зависимых от Direct3DDevice ресурсов, вызывается метод сброса устройства Direct3DDevice, а затем происходит восстановление ресурсов RestoreDisplayObjects

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

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

 
Для лучшего понимания этих важных моментов, Вам обязательно нужно познакомиться с исходным кодом игры [Пример игры Donuts3D], а также со статьями и исходниками посвященными работе над проектом Нечто: Необъяснимое
 
В качестве практики предлагаю Вам внедрить вышеописанные технологии в код проекта своего D3D-приложения посвященного практической работе над данным уроком.
 
[назад] [страница 1] [далее] [к содержанию]
 
 
 
 
     
     
     
     
     
megainformatic live chat
Начать беседу
X
 

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



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


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