Из
предыдущих уроков вы уже почерпнули некоторую информацию о том, как строится
и функционирует типичное D3D-приложение. Эта информация является общей для
всех приложений DirectX написанных как на C++, так и на Delphi. Разница
лишь связана с синтаксическими особенностями данных языков программирования
и средами программирования в которых происходит работа.
Здесь
и далее мы познакомимся с основными особенностями Direct3D-приложения, которые
необходимо учитывать при разработке его базового класса.
За
основу мы возьмем класс CD3DApplication, рассмотрим и протестируем на конкретных
примерах его особенности, а далее покажем класс, который используется в
игре "Ну, Погоди!" и проведем небольшое сравнение.
С
исходным кодом класса CD3DApplication вы можете познакомиться заглянув в
модуль D3DApp.pas из папки common библиотеки delphi directx 8.1
Данный
класс является абстрактным (также как и например TForm), поэтому нужно сначала
создать производный класс от данного, а затем уже работать с новым созданным
классом, используя его для своих целей, что и происходит во всех примерах
из DirectX SDK.
CD3DApplication
производится напрямую от TObject.
Основное
назначение класса - обеспечение работы WinAPI-приложения с использованием
также DirectX API, другими словами данный класс предоставляет удобный
для работы интерфейс для вызова необходимых приложению интерфейсов Windows
и главным образом интерфейсов DirectX.
Основные
методы этого класса - это
Create
Destroy
Create_
Run
MsgProc
и
ряд виртуальных методов, которые частично реализованы в данном классе,
но для конечного использования требуют дальнейшей реализации в производном
классе Вашего приложения
OneTimeSceneInit
InitDeviceObjects
RestoreDeviceObjects
FrameMove
Render
InvalidateDeviceObjects
DeleteDeviceObjects
FinalCleanup
остальные
методы, поля и свойства данного класса служат в основном для обеспечения
работы вышеописанных основных методов.
В
качестве основы для изучения данного класса и экспериментов с ним мы возьмем
пример SwitchScreenModes
Скачиваний : 3430
из предыдущего урока. Для экспериментов над кодом класса CD3DApplication
советую Вам взять файл D3DApp.pas и его копию разместить внутри папки того
проекта в котором Вы будете проводить эксперименты. При этом среда Delphi
будет использовать локальную копию вместо копии из папки common, а Вы сможете
проводить какие угодно изменения не вмешиваясь в оригинальный код D3DApp.pas
Класс
приложения CD3DApplication функционирует абсолютно по тем же правилам,
которые мы рассмотрели в предыдущих уроках.
Метод
Create задает начальные значения для множества
полей данного класса,
и
ряд других, назначение которых Вы узнаете из дальнейшего повествования
Данный
метод - метод конструктора класса, вызывается при создании нового объекта
данного класса и выполняет базовую начальную инициализацию заданных полей
класса теми значениями, которые заданы в реализации данного конструктора,
все остальные поля обнуляются или выставляются в nil (если это указатели)
Метод
Destroy - метод деструктора класса, вызывается
при удалении объекта класса. При этом освобождается память занятая объектом
и связанными с ним ресурсами. Если таких ресурсов достаточно много и они
занимают значительный объем, то выполнение метода может занимать значительное
время - вспомните любую игру, в которую Вы играли в последний раз, почему
игра по выходу из нее закрывается не сразу, а через некоторое время? Именно
поэтому.
Помимо внутренних полей самого класса, производный класс применяемый при
реализации той или иной игры может использовать множество вложенных классов
(являясь для них контейнером), эти классы в свою очередь также могут содержать
вложенные и т.д. В конечном счете в память загружаются с диска какие-либо
ресурсы, используемые игрой - текстуры, модели, шейдеры, звуковые и музыкальные
файлы, текст и т.п. При закрытии приложения все загруженные ресурсы должны
быть из памяти удалены, чтобы освободить ее для других приложений.
Теперь
Вам должно быть понятно то, почему чем больше игра, тем дольше она запускается
при старте или закрывается при выходе из неё.
Особенностью
данного метода является то, что он должен вызываться не напрямую, а посредством
метода Free. Для этих же целей можно применять функции SAFE_DELETE и FreeAndNil
Метод
Create_ - представляет метод начальной инициализации
класса приложения. Его имя происходит от имени оригинального метода Create
на C++. Но поскольку в языке Delphi для конструктора и деструктора применяются
специальные имена (Create и Destroy), а в языке C++ имя конструктора и
деструктора совпадает с именем класса, то данный метод и получил такое
название. Знак подчеркивания обозначает, что данный метод именно метод
инициализации, а не метод конструктора!
Внутри
данного метода вызывается весь код, необходимый для начальной инициализации
DirectX-приложения:
создается объект Direct3D, выполняется создание списка графических устройств,
создается окно приложения (если требуется), задается стиль, границы окна
и рабочей области, запускается DXTimer осуществляющий периодические процессы
D3D-приложения - цикл подготовки кадра и цикл отрисовки, вызывается виртуальный
метод OneTimeSceneInit осуществляющий однократную инициализацию, должен
быть реализован в производном классе, поэтому его работа целиком зависит
от того, как он будет реализован, наконец метод Initialize3DEnvironment
выполняет окончательную инициализацию 3D-среды, главным образом создавая
объект IDirect3DDevice8 на основе параметров, которые были получены на
предыдущих этапах выполнения.
После
этого приложение переходит в состояние готовности. Это означает, что начинаются
периодические процессы, выполняющие циклическую работу:
метод
Run - если приложение работает как WinAPI,
то данный метод вызывается напрямую и будет запущен цикл проверки сообщений
на основе которого и работает типичное WinAPI-приложение.
метод
MsgProc - представляет реализацию оконной
процедуры приложения, которая отвечает за обработку поступающих в неё
сообщений от системы. Эти сообщения играют важную роль, т.к. при помощи
них и происходит собственно работа приложения в системе Windows. При каких-либо
событиях, например, нажатии пользователем клавиши или перемещении мыши
система реагирует на них и создает соответствующие сообщения. Эти сообщения
попадают в очередь сообщений и если предназначены конкретному приложению
имеющему фокус, то система передает их ему. Помимо описанных в качестве
сообщений могут быть любые другие - достаточно заглянуть в код метода
MsgProc и вы увидите как обрабатывается приложением сообщение об активации/деактивации
приложения, реакция на команду окна меню и т.д.
выполняют
если перечислять по порядку - однократную инициализацию сцены, начальную
инициализацию объектов, восстановление объектов устройства, подготовку
кадра, отображение, нарушение объектов устройства, удаление объектов устройства,
окончательную очистку (освобождение ресурсов использованных приложением).
Назначение
метода OneTimeSceneInit
состоит
именно в однократном его вызове. Внутри данного метода можно создавать
такие объекты, которые необходимо создать лишь однократно при начальном
старте - объект DirectInput, некоторые общие ресурсы, которые будут использоваться
на протяжении всего приложения.
InitDeviceObjects
- в отличие от предыдущего метода может вызываться и не один раз, однако
перед его вызовом необходимо вызывать DeleteDeviceObjects
т.е.
сначала удалить все используемые объекты, иначе это приведет к ошибкам.
Методы
RestoreDeviceObjects
и
InvalidateDeviceObjects
также работают в логической паре. После инвалидации объектов их обязательно
нужно восстановить, перед восстановлением обязательно инвалидировать.
Иначе это опять же приведет к ошибкам. В этих методах нуждаются объекты,
зависимые от текущего устройства. Если вдруг произошел его сброс, то происходит
инвалидация, после чего нужно обязательно выполнить восстановление. К
таким объектам относятся модели, шейдеры.
Метод
FrameMove - исходя из названия "движение
кадра" - отвечает за подготовку следующего кадра анимации. Как таковая
отрисовка в нем не происходит. Его основное назначение - это вызов метода
UpdateInput который выполняет опрос устройств ввода клавиатуры и мыши,
а также выполнение всех необходимых вычислений, которые осуществляют перемещение
персонажей, логику игры и прочее
От
сложности процессов, происходящих внутри данного метода напрямую будет
зависеть производительность приложения, потому что данный метод в паре
с методом Render периодически вызывается таймером DXTimer через минимальные
интервалы времени, чем и определяется FPS - частота кадров.
Метод
Render - не должен содержать слишком "тяжеловесного"
кода, т.к. его основная задача - как можно быстрее отрисовать то, что
было подготовлено на предыдущей стадии. Для ускорения работы данного метода
выполняются различные подготовительные стадии, в частности, отсечение
объектов, не попадающих в поле зрения камеры. Правильное выполнение этого
процесса (естественно внутри FrameMove, а не внутри Render) гарантирует
то, что игра "не будет тормозить" даже при кажущемся большом
количестве игровых объектов присутствующих в игровой сцене. Они просто
будут исключаться из цикла отрисовки, если не попадают в определенную
область видимости.
Итак,
вкратце мы рассмотрели что к чему. Пора приступить к экспериментам. Под
экспериментами я понимаю более углубленное изучение кода класса CD3DApplication.
Мы будем брать части кода и комментировать их, исключая из компиляции, затем
наблюдать результат полученный при этом. Этим методом не всегда, но очень
часто можно лучше уяснить для себя как работает та или иная часть приложения.
Кроме того, такие эксперименты будут крайне полезны Вам если у Вас еще не
очень достаточно опыта в программировании игр и приложений вообще. Такие
эксперименты позволят получить общее представление о методах тестирования
и отладки кода.
Откроем
пример SwitchScreenModes и копию модуля D3DApp.pas, которую Вы должны
были скопировать из папки common в папку данного проекта
Открыть
модуль D3DApp.pas достаточно просто - в коде модуля SwitchModesUnit.pas
найдите имя D3DApp в списке uses и удерживая нажатой клавишу [Ctrl] щелкните
по этому имени левой кнопкой мыши.
Модуль
D3DApp.pas будет открыт для Вас. Чтобы удостовериться, что Вы действительно
работаете с копией, а не с оригиналом из папки common, попробуйте выполнить
сохранение. Если диалог укажет на папку проекта, а не на common, значит
всё верно, можно смело приступать к экспериментам!
Для
начала мы заглянем внутрь метода CD3DApplication.Create_ и выясним несколько
фактов:
Как
происходит построение списка адаптеров и какой видео режим выбирается
по умолчанию - нам нужно будет поработать с кодом внутри BuildDeviceList
Какие
особенности учитываются при реализации Initialize3DEnvironment
для
инициализации 3D-среды
Самый
простой эксперимент - закомментируем кусок кода -
{hr:=
BuildDeviceList;
if FAILED(hr) then
begin
SAFE_RELEASE(m_pD3D);
Result:= DisplayErrorMsg(hr, MSGERR_APPMUSTEXIT);
Exit;
end;}
заключив
его в фигурные скобки, выполним компиляцию, запустим приложение и посмотрим
что произошло.
Мы
получим Generic application error и приложение будет закрыто. Даже ничего
не зная о функционале работы CD3DApplication из этого можно заключить,
что данный код является критичным для работы приложения.
Раскомментируем
код и отправимся вглубь метода BuildDeviceList
для экспериментов внутри него.
Замечу,
что показанная техника экспериментов с комментированием участков кода
для лучшего уяснения его назначения и работы уже рассматривалась в ряде
статей, в частности в - Теория
и практика 3D-игр
Для
быстрого перехода к реализацию BuildDeviceList также
достаточно щелкнуть по этому идентификатору левой кнопкой мыши вкупе с
клавишей [Ctrl].
Посмотрим
как происходит работа внутри данного метода в режиме отладки. Для этого
достаточно установить в нужной строке кода контрольную точку останова
и запустить приложение в режиме отладки.
Для
этого щелкаем левой кнопкой мыши в указанной позиции и там появится красный
кружок вместо синего (как на рисунке).
Запускаем
приложение в режиме отладки кнопкой Run как показано на рисунке.
Для
пошагового исполнения кода используем клавишу [F8]. Для входа в код вызываемых
процедур и функций можно использовать [F7].
Параллельно
можно исследовать содержимое переменных наблюдая как изменяются их значения.
Сначала
мы наблюдаем как выбираются все видео- режимы чьё разрешение >= 640x480
Отфильтровываются
все подобные видеорежимы, отличающиеся лишь частотой покадровой развертки.
Заносятся
в список только имеющие уникальный формат текстуры, отсортировываются
в порядке увеличения разрешения и качества формата текстур.
Далее
выясняется количество доступных графических устройств в системе, имеют
ли они тип HAL (аппаратный уровень абстракции), могут ли использоваться
в оконном режиме, совместимы ли с режимом рабочего стола, поддерживается
ли аппаратная трансформация вершин, выясняется формат буфера глубины и
т.п.
Таким
образом основная задача данного метода - выборка наиболее подходящих видеорежимов
и занесение их в список доступных.
Какой
режим выставляется по умолчанию?
Все
видеорежимы попадают в поля структуры m_Adapters представляющей список
адаптеров в системе. Каждый адаптер в свою очередь имеет список устройств,
список видеорежимов, форматов и т.д.
В
конце данного метода выставляется текущий адаптер и устройство -
после
проверки и подтверждения его необходимых свойств, при этом метод возвращает
результат построения списка - ок или ошибку с расшифровкой ее причины.
Для
полного ответа на поставленный вопрос в методе Create_ попробуйте сразу
после выполнения BuildDeviceList добавить такой тестовый код -
var
//**
cd: Cardinal; //нужно
объявить как глобальную переменную вне метода Create_
//**
{...}
//остальное
уже в методе Create_
hr:= BuildDeviceList;
if FAILED(hr) then
begin
SAFE_RELEASE(m_pD3D);
Result:= DisplayErrorMsg(hr, MSGERR_APPMUSTEXIT);
Exit;
end;
//**
cd := m_Adapters[m_dwAdapter].dwCurrentDevice;
//**
установив
точку останова на коде созданной строки вы можете получить в режиме отладки
информацию о том, какое текущее устройство устанавливается по-умолчанию.
Используя
нижеследующий код, который Вы можете почерпнуть из метода BuildDeviceList
можно получить всю необходимую информацию -
//аналогично
нужно объявить как глобальные переменные вне метода Create_, если сделать
локальные, то их значения могут стать недоступны при отладке из-за оптимизации
в регистрах процессора, поэтому для целей отладки и проверки получаемых
значений нужны глобальные переменные
сначала
определяется текущее устройство CurrentDevice, затем текущий режим рабочего
стола (если это Вам потребуется), считывается информация о текущем адаптере,
по ней определяется информация о текущем устройстве pDeviceInfo, затем
считывается номер текущего видеорежима и определяются его параметры
Двигаемся
дальше. Если будет обнаружено, что обработчик окна m_hWnd пуст, т.е. требуется
создать окно средствами WinAPI, то оно будет создано. Иконка, указатель
мыши, цвет фона, стиль, границы, размеры задаются далее.
Если
обработчик окна не был пуст, то запоминается указатель на старую оконную
процедуру и устанавливается новый, обрабатывающий поступающие сообщения
внутри метода MsgProc, а также вызывающий старую оконную процедуру. Это
гарантирует корректную обработку поступающих приложению сообщений даже
при использовании VCL-окон и приложения работающего на основе TApplication,
как это имеет место в примерах всех предыдущих уроков и игре "Ну,
Погоди!". Если забыть про этот важный момент - при создании собственного
базового класса D3D-приложения, то можно долго гадать о причинах возможных
ошибок и некорректной его работы.
Метод
OneTimeSceneInit целиком зависит от реализации его в производном классе.
Остается
рассмотреть метод Initialize3DEnvironment и поэкспериментировать с ним.
Заглянув
в первые строки кода данного метода сразу определяем, что текущий видеорежим
это pModeInfo
вызов
AdjustWindowForChange; на
самом деле выполняет скрытие окна полноэкранного режима
Далее идет настройка параметров отображения и самое интересное,
что служит ответом на второй вопрос, поставленный в
конце 3 урока
В
чём же причина? Если заглянуть в документацию по DirectX 8 ,то в
описании IDirect3D8::CreateDevice вы найдете список значений параметра
BehaviorFlags
среди
них D3DCREATE_PUREDEVICE = $10; и D3DCREATE_HARDWARE_VERTEXPROCESSING
= $40; именно то значение, которое имеет данный флаг если использовать
строку кода, которая показана закомментированной (зеленого
цвета)
Приведенный
чуть ниже код исправляет данный недостаток! Причина объяснена в документации
по DirectX 8 -
D3DCREATE_PUREDEVICE
Specifies that Direct3D does not support Get* calls for anything that
can be stored in state blocks. It also tells Direct3D not to provide any
emulation services for vertex processing. This means that if the device
does not support vertex processing, then the application can use only
post-transformed vertices.
Т.
е. установка данного флага не позволяет вызывать методы Get* и требует
использования только пост-трансформированных вершин. Метод GetViewport
как раз и не выдает при этом нужной информации!
оставшийся
код располагает окно поверх остальных окон (если используется оконный режим),
проверяются возможности устройства и формируется соответствующая информационная
строка m_strDeviceStats, запоминаются параметры бэк-буфера, отображается
указатель мыши и ограничивается его перемещение заданной областью, происходит
вызов методов InitDeviceObjects и RestoreDeviceObjects, в случае ошибок
происходит переключение на более низкий уровень возможностей графического
устройства и рекурсивный вызов метода Initialize3DEnvironment.
По
окончании выполнения метода Create_ приложение переходит в состояние готовности
и запускается непрерывный цикл отрисовки вызывающий поочередно методы FrameMove
и Render. Это происходит внутри метода TAppForm.ApplicationEventsIdle
игра электроника ИМ Микки Маус - Mickey Mouse для Windows/Linux/Android/html5
#8 (32) август 2026 журнал комиксов и инди-игр Мегаинформатик
играть
читать
#6 (30) июнь 2026 журнал комиксов и инди-игр Мегаинформатик игра электроника ИМ Веселый Повар - Cheeful Cook для Windows/Linux/Android/html5 #7 (31) июль 2026 журнал комиксов и инди-игр Мегаинформатик #11 ноябрь 2025+ журнал комиксов и инди-игр Мегаинформатик
читать
играть
опять html5, pdf, win/linux/android
pdf, win/linux/android и html5
#10 октябрь 2025+ журнал комиксов и инди-игр Мегаинформатик, #3 (27) март 2026 журнал комиксов и инди-игр Мегаинформатик, #4 (28) апрель 2026 журнал комиксов и инди-игр Мегаинформатик, #5 (29) май 2026 журнал комиксов и инди-игр Мегаинформатик
скачать
читать
смотреть
открыть
megainfomatic yookassa module Модуль подключения к yookassa.ru для любой cms, megainformatic messenger - Лучший и самый простой мессенджер для общения, запускай прямо из браузера! Что такое нейросеть? - книга 2026, 128 страниц. Каксоздатьигрунаgodotкнига, 128 страниц, 2026
скачать
использовать
читать
читать, скачать
Все секреты нейросетей.Оцифровка сознания книга, Ежемесячный журнал комиксов и инди-игр Мегаинформатик #2 (26) февраль 2026, Img Gen Megainformatic Img2Txt модуль распознавания изображений для Stable Diffusion WebUI Forge, Модуль подключения к Яндекс Маркет megainformatic yandex.market digital delivery universal для доставки цифровых товаров
читать
читать
скачать
читать
Ежемесячный журнал комиксов и инди-игр Мегаинформатик #9 сентябрь 2025+, #1 (25) январь 2026, Img Gen Megainformatic - локальная Нейросеть для генерации изображений, Img Gen Megainformatic Log модуль для Forge версии 2024-Aug-10 - локальной Нейросети для генерации изображений
читать
читать
скачать
скачать
Ежемесячный журнал комиксов и инди-игр Мегаинформатик #12 декабрь 2025, комиксы: Веб-Мастер и Маргарита #14, Кыся #3 - комикс фэнтези, Твое будущее #1 - комикс
смотреть
читать
скачать
октрыть
Ежемесячный журнал комиксов и инди-игр Мегаинформатик #11 ноябрь 2025, комиксы: Сикс Икс Икс - Двойное дно (6xx) #14 - комикс 18+, Несравненная Рокси #1 - комикс 18+, Эмми город надежд #3 - комикс
смотреть
читать
скачать
скачать
комиксы, Ежемесячный журнал комиксов и инди-игр megainformatic.ru #10 октябрь 2025, #6 июнь 2025+ дополнение к основному номеру за июнь, Полное превращение #1 - комикс, #7 июль 2025+ дополнение к основному номеру за июль
смотреть
скачать/читать
читать
интересное
комиксы, Ежемесячный журнал комиксов и инди-игр megainformatic.ru #9 сентябрь 2025
смотреть
читать
смотреть
starcraft комикс
комиксы
смотреть
читать комикс
читать
читать
комиксы
читать
смотреть
читать
читать комикс
игра Fishka. Ежемесячный журнал комиксов и инди-игр megainformatic.ru #8 август 2025, другие комиксы
играть
читать
читать
комикс
ежемесячный журнал комиксов и инди-игр megainformatic.ru #6 июнь 2025 - специальный выпуск Квантум 28 страниц win/linux/android/html5/pdf полная версия скачать или запустить в браузере, игра lollypop 1994 времен ms-dos, ежемесячный журнал комиксов и инди-игр megainformatic.ru #5 май 2025+ 18+ дополнение к основному номеру. Все выпуски за 1 полугодие 2025 года в одном номере - #1 январь - #6 июнь 2025 108 страниц pdf/win/linux/android/html5
скачать
играть
читать
читать
ежемесячный журнал комиксов и инди-игр megainformatic.ru #5 май 2025 - выпуск 5, #6 июнь 2025 - выпуск 6, #4 апрель 2025 спец. выпуск GAME дополнение к апрельскому номеру - все комиксы по играм!, выпуск #7 июль 2025
скачать
читать
открыть
смотреть
журнал комиксов - приложение к журналу комиксов megainformatic.ru #1 январь 2025 - выпуск 1, журнал комиксов #4 апрель 2025, 18+ дополнение #3 к журналу март 2025, 18+ дополнение #2 к журналу февраль 2025
читать
журнал
18+ дополнение #3
18+ дополнение #2
игра, журналы комиксов - номера за 2025 год - январь 2025 - март 2025
играть
смотреть
читать
журнал
игры, сервисы
играть
играть
случайный сайт
играть
видео-рассказ, уроки godot, виртуальный помощник по поиску информации
играть
читать
купить
скачать
игры Многоликий: dress - hordes эпизоды с 1 по 4
играть
скачать
купить
купить
игры, музыкальные клипы
скачать
скачать
смотреть
скачать/играть
музыкальный клип, игры
смотреть
играть
скачать
скачать
разработка игр, анимационный фильм, новогодняя дискотека 2020 - песни на итальянском, игра про лифт
смотреть
смотреть
смотреть
смотреть
игры, инструменты разработки, анимационный фильм, фильм.
купить
смотреть
смотреть
скачать
игры
скачать
скачать
скачать
купить
игры в браузере
играть
играть
играть
играть
игры в браузере
играть
играть
играть
играть
игры в браузере
играть
играть
играть
играть
игры в браузере
играть
играть
играть
играть
игры в браузере (3), создание музыки в браузере (1)
играть
играть
играть
играть
игры в браузере
играть
играть
играть
играть
игры в браузере
играть
играть
бк 0010.01 - играть!
играть
игры в браузере
играть
играть
играть
играть
игры в браузере (3), скачиваемые (1)
играть
играть
играть
скачать
игры в браузере
играть
играть
играть
играть
игры в браузере, скачиваемые игры
играть
скачать
играть
играть
игры в браузере
играть
играть
играть
играть
игры в браузере
Foxyland 2
quidget 2
играть
играть
полезный софт, игры в браузере
скачать
anova игра
A Knots Story
sabotage
сервисы, игры
24500 руб.
скачать
игра
играть
игры, программы
купить / скачать
купить
5500 руб.
скачать
поздравления, уроки рисования, уроки создания сайтов
читать
читать
читать
150 руб.
комиксы, музыка, рассказы
читать
читать
слушать
читать
игра для разработки, калькулятор услуг, cms, комикс
250 руб.
разработка на заказ
1250 руб.
350 руб.
игры для разработки, комиксы
скачать
читать
читать
скачать
игры шарики и ямки, комиксы про Костю Коробкина, ria xxl игра, fly snow 3d генератор эффектов снега, частиц и др. -
скачать
читать
150 руб.
350 руб.
Создай свою игру на fle game engine -
800 руб.
240 руб./скачать
скачать
скачать
Для создания сайта - модуль отзывов/комментариев для вашего сайта в составе megainformatic cms express files -
700 руб.
1250 руб.
150 руб.
500 руб.
Уроки Flash, бесплатные Flash - игры.
бесплатно
бесплатно
2500 руб.
14000 руб.
Поддержка сайтом нескольких языков (multi lang), создание собственной системы личных кабинетов, соц. сети или фриланс - биржи (megainformatic cms social), создание сервиса коллективных покупок на базе megainformatic cms groupon, онлайн сервис подсчёта статистики ключевых слов в статьях вашего сайта keywords gen + описание кода данного сервиса, с возможностью бесплатно реализовать его аналог на своём собственном сайте.
500 руб.
12000 руб.
14000 руб.
бесплатно
megainformatic.ru/webjob/ - сервис для фриланс проектов
- место встречи заказчиков и исполнителей
megainformatic.ru/webjob/ - сервис для фриланс проектов
- место встречи заказчиков и исполнителей
Системы управления сайтом, уроки
1250 руб.
бесплатно
550 руб.
500 руб.
megainformatic cms admin - простая и компактная система
для работы и управления сайтом
350 руб.
5800 руб.
3000 руб.
500 руб.
megainformatic cms free и серия продуктов - Уроки Photoshop
бесплатно
650 руб.
700 руб.
750 руб.
Данная серия посвящена описанию приемов и методов создания изображений,
с помощью инструментария программы Adobe Photoshop. Кроме того, многие
описанные средства могут вам помочь при освоении и многих других программ
для работы с растровой графикой - GIMP, Corel Photo Paint и других.
бесплатные игры 2d и 3d, а также эмулятор Ну, Погоди!
300 руб.
бесплатно
бесплатно
бесплатно
Это серия распространяемых бесплатно игр. Вы не только можете поиграть,
но и скачать исходники, получив тем самым возможность внести изменения
в игру или создать новую !!! (эмулятор Ну, Погоди! распространяется платно).
серия игр про Веселого Буквоежку, и бесплатно распространяемая игра
Нечто: Необъяснимое - в плену желаний
350 руб.
510 руб.
fle game engine
бесплатно
Здесь представлены новинки жанра - Говорящий Комикс, Настольная игра,
А также продукт, который позволит Вам научиться создавать игры самостоятельно.
Ну и конечно изюминка в своём роде - бесплатная игра - Нечто: Необъяснимое
- в плену желаний
Серия бесплатных онлайн уроков, посвященных 3ds max, photoshop, c++,
directx, delphi и php.
бесплатно
бесплатно
бесплатно
бесплатно
бесплатно
бесплатно
500 руб.
300 руб.
Описаны практические примеры решения различных задач, возникающих при
создании игр и сайтов.
Продукты Набор разработчика и Ваше Визуальное Шоу распространяются платно.
уроки и продукты различной тематики
бесплатно
бесплатно
бесплатно
400 руб.
Бесплатные Уроки Photoshop free, Бесплатные Уроки по программированию
на delphi directx - Как создать игру Ну, Погоди!, Бесплатная Авторская
музыка в формате mp3 - Музыкальные Миры, Платно распространяемый продукт
megainformatic cms express - система для быстрого создания Вашего сайта
на php + my sql.
Проекты игр, уроки
450 руб.
бесплатно
бесплатно
бесплатно
Игра Веселый Буквоежка, уроки delphi directx 8.1 для начинающих (описываются
основы 3d игр), моделируем девушку в 3d studio max, уроки музыки - пишем
музыку в Fruity Loops Studio
megainformatic
cms express files - это простое, быстрое и очень компактное решение
для создания первого вашего сайта. НЕ ИСПОЛЬЗУЕТ базы данных mysql.
Вместо этого используются файловые базы данных. Поэтому Вы
можете использовать систему даже на хостинге с поддержкой php, но
без поддержки баз данных my sql.
Очень
проста в установке - достаточно вам скопировать все файлы на ваш
хостинг и сайт готов к работе !!!
В комплект входят 3 готовых шаблона, модули поиска и карты сайта,
а также статьи по основам создания сайта.
megainformatic.ru ежемесячный журнал комиксов и инди игр #8 август 2025+ - 18+ дополнение к основному номеру за август
Что скачать/запустить?
выберите
free/полную версию?
pdf / win/linux / android / запустить html5 ?
pdf free
pdf полная