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


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

megainformatic - Что такое BitTorrent (БитТоррент)
Что такое BitTorrent (БитТоррент) BitTorrent (дословно «поток битов») — P2P-протокол, предназначенный для обмена файлами через интернет. BitTorrent был создан программистом Брэмом Коэном. Терминология скрытый текст
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
Введение в программирование игр на С++ для платформы DirectX 9 Программирование игр в directx. Hello, World!

Введение в программирование игр на С++ для платформы DirectX 9 Разбираем конструкции языка C++ на примере работы в Microsoft Visual Studio 2008

Разбираем конструкции языка C++ на примере работы в Microsoft Visual Studio 2008 - Урок 1 Основные операторы языка C++

Разбираем конструкции языка C++ на примере работы в Microsoft Visual Studio 2008 - Урок 1 Основные операторы языка C++ (часть 2)

Урок 2 Написание Win32-приложений. Обзор стартового кода Win32-приложения. Добавление ресурса текстовая строка

Урок 3 Создание Win32-приложений. Создание меню и простых диалоговых окон.

Урок 4 Создание Win32-приложений. Стандартные диалоги. Изучение сопутствующих конструкций языка. Консольные Win32-приложения. Указатели. Ссылочный тип. Массивы.

Урок 4 часть 2 Win32. Диалог выбора цвета, смена цвета фона окна приложения

Написание приложения DirectX9c + MFC в среде MSVS 2005

megainformatic - Создание компьютерных игр на основе DirectX в среде Delphi 6, 7

megainformatic - Создание компьютерных игр на основе DirectX в среде Delphi 6, 7 - Почему избраны DX8 и Delphi ?

megainformatic - Основы IDirectMusic8 в среде Delphi6-7

megainformatic - Основы DirectInput8 в среде Delphi 7

megainformatic - Основы DirectSound8 в среде Delphi6-7

megainformatic - Плагин для 3DS MAX из DX9 SDK

megainformatic - Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2)

megainformatic - Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 2

megainformatic - Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 3

megainformatic - Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 4

megainformatic - Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 5

megainformatic - Мастер-класс: Создание модели и текстуры Коммандного Центра (как в StarCraft 2) Часть 6

Система управления сайтом - megainformatic cms e-shop

Система управления сайтом - megainformatic cms e-shop

Система управления сайтом - megainformatic cms e-shop

megainformatic - Уроки 3ds max - Введение в 3ds max

megainformatic - ГАЛЕРЕЯ 3D-моделей

megainformatic - СОЗДАНИЕ МАКЕТА ПОМЕЩЕНИЯ

megainformatic - Создание макета помещения - этап 2

megainformatic - МОДЕЛИРОВАНИЕ НА УРОВНЕ МНОГОУГОЛЬНИКОВ

megainformatic - СОЗДАНИЕ ПРЕДМЕТОВ ОБСТАНОВКИ ПОМЕЩЕНИЯ

megainformatic - Моделирование обстановки помещения

megainformatic - Создание модели автомобиля

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

megainformatic - Создание анимации вращающихся колес автомобиля

megainformatic - игра Нечто: Необъяснимое и в плену желаний

megainformatic - Основы 3D-анимации, экспорт скелетной анимации

megainformatic - Подготовка модели к использованию скелетной анимации

megainformatic - Продолжаем Создание скелета для данной модели

megainformatic - Построение ирерархических связей между объектами и основы 3d анимирования

megainformatic - Особенности экспорта моделей и анимации экспортером kWXPort080719 из 3ds max 2009 

megainformatic - Создание модели броневика (Хэд)

megainformatic cms e-mailer

megainformatic cms e-mailer

megainformatic cms e-mailer

Бесплатная Система Управления Вашим Сайтом - megainformatic cms free

megainformatic - Путешествие в мир 3d

megainformatic - Путешествие в мир 3d - страница 2

megainformatic - Путешествие в мир 3d - страница 3

megainformatic - Путешествие в мир 3d - страница 4

megainformatic - Путешествие в мир 3d - страница 5

megainformatic - Путешествие в мир 3d - страница 6

megainformatic - Создание модели броневика (Хэд) - Анимация вращения колес

megainformatic cms express files

megainformatic cms express files

megainformatic cms express files

megainformatic - Уроки Photoshop - Чудеса

подробнее

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

Доброго времени суток Вам, читающим эти строки !

У меня в данный момент утро - 11:13.

Сегодня я расскажу Вам как протестировать подключенную к сайту платежную систему если она не имеет тестового режима платежей.

Эту работу Мы с Вами рассмотрим на готовом уже реализованном примере сделанном для сайта на базе megainformatic cms groupon

С такой проблемой я столкнулся, когда занимался подключением к платежной системе ЕДИНЫЙ КОШЕЛЕК.

Зайдём на сайт megainformatic cms groupon

Нажмём кнопку Войти и используем для входа следующие данные:

admin

123456

Теперь пошагово рассмотрим что нужно сделать для настройки и проверки подключения к платежной системе ЕДИНЫЙ КОШЕЛЕК.

1) Сначала в личном кабинете ЕДИНЫЙ КОШЕЛЕК нужно настроить базовые шаги выполнения оплаты.

== настройки личного кабинета ЕДИНЫЙ КОШЕЛЕК (раздел Интернет Магазин) ==

Адрес для оповещений - http://megainformatic.ru/webprojects_cms/megainformatic_cms_groupon/modules/pay/
modules/pay/pay_systems/w1/process/w1.php

Цифровая подпись (ЭЦП) - тип подписи MD5

Остальные настройки выставляются на усмотрение владельца интернет-магазина.

Персональные настройки требуемые для функционирования модуля оплаты ЕДИНЫЙ КОШЕЛЕК нужно корректно прописать в файле

modules/pay/pay_systems/w1/config_w1.php

2) После того, как это сделано в админ-панели сайта входим в раздел УПРАВЛЕНИЕ > НАСТРОЙКИ САЙТА и выставляем тестовый режим для оплаты (см. более подробно ниже - пункт 3.1)

3) Теперь можно перейти к тестированию оплаты

Тестирование оплаты через эмулирующий скрипт ЕДИНЫЙ КОШЕЛЕК

======================================

По аналогии с тем, как в статье - Тестирование подключения платежной системы было описано тестирование оплаты через тестовый сервер робокасса (robokassa_test)

Мы с вами будем тестировать подключение к ЕДИНОМУ КОШЕЛЬКУ.

Отличием, как видите, является то, что у ЕДИНОГО КОШЕЛЬКА нет тестового сервера, поэтому тестировать будем просто через эмулирующий скрипт, который представляет

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

3.1) Сначала нужно включить тестовый режим оплаты в настройках сайта - это необходимо для корректного обращения из скрипта сайта к реальному серверу ЕДИНОГО КОШЕЛЬКА либо к скрипту эмуляции (в нашем данном примере) - для этого -

заходим в админ-панель сайта и выбираем раздел УПРАВЛЕНИЕ > Настройки сайта

для пункта Тестовый Режим оплаты указываем значение 1

и нажимаем кнопку Сохранить изменения.

После этого можно тестировать подключение ЕДИНЫЙ КОШЕЛЕК в тестовом режиме со скриптом эмулятора.

3.2) скрипт эмулятора - это - http://megainformatic.ru/webprojects_cms/
megainformatic_cms_groupon/w1_test_payment.php


чтобы сформировать тот или иной шаг выполнения платежа (всего их 3), надо знать следующее:

сумму платежа, которую будем тестировать

id платежа, который тестируем

цп платежа (цифровую подпись)

id будущего платежа можно узнать посмотрев в админке - ПОЛЬЗОВАТЕЛИ > ОПЛАТА.

Т. е. если например

в админке уже сделано 20 платежей, то это будет номер 21

цп можно узнать посмотрев на странице эмулятора сразу после выполнения шага 3.3

3.3) Входим в личный кабинет юзера

(после входа на сайт как суперадмин просто обратитесь к главной странице сайта по адресу -

megainformatic cms groupon),

а затем слева от аватарки кликните пункт ЛИЧНЫЙ КАБИНЕТ

вводим сумму пополнения, например, 120 и жмём кнопку единый кошелек

3.4) Попадем на страницу эмулятора, который просто распечатает на экран все переменные, переданные через POST

После этого можно в админке проверить появление записи о сделанном платеже со статусом no_pay (не оплачен)

3.5) Тестируем вызов STATUS URL (оповещение о платеже) - находясь на странице с адресом

http://megainformatic.ru/webprojects_cms/
megainformatic_cms_groupon/w1_test_payment.php


добавляем в конец адреса параметры, например - ?p=1&a=120.00&id=21&h=UWDvaImaRwxmqnK4wz8WTA%3D%3D

,где p - это тестируемый шаг платежа (от 1 до 3)

a - сумма платежа, которая будет проверяться и

id - тестируемый id (номер) платежа

h - цифровая подпись платежа - в вашем случае должна быть такая, которая была сгенерирована на шаге 3.4

т. е. адресная строка должна выглядеть как -

http://megainformatic.ru/webprojects_cms/
megainformatic_cms_groupon/w1_test_payment.php?p=1&a=120.00&id=21&h=UWDvaImaRwxmqnK4wz8WTA%3D%3D


и нажимаем ENTER чтобы перейти на эту страницу. Далее на открывшейся странице просто жмём кнопку ОТПРАВИТЬ

Попадем на STATUS URL нашего сайта где будет написано WMI_RESULT=OK, что является ответом для сервиса ЕДИНОГО КОШЕЛЬКА.

А в админке данный платеж должен изменить статус на accept (подтвержден).

3.6) Тестируем Fail URL

в адресной строке браузера набираем -

http://megainformatic.ru/webprojects_cms/
megainformatic_cms_groupon/w1_test_payment.php?p=3


и нажимаем ENTER чтобы перейти на эту страницу. Далее на открывшейся странице просто жмём кнопку SEND

В результате должна отобразиться страница обработки Fail URL - т. е. выдачу ошибки платежа

В админке платеж не меняет своё состояние

3.7) Тестируем Success URL - успешное зачисление платежа

в адресной строке браузера набираем -

http://megainformatic.ru/webprojects_cms/
megainformatic_cms_groupon/w1_test_payment.php?p=2


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

и нажимаем ENTER чтобы перейти на эту страницу. Далее на открывшейся странице просто жмём кнопку SEND

В результате должна отобразиться страница обработки Success URL - т. е. успешное завершение платежа (Ваш платеж успешно подтвержден!)

В админке платеж не меняет своё состояние

3.8) Пополнение баланса пользователя проверяется аналогично робокассе - как только

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

При этом баланс пользователя будет пополнен на указанную сумму только один раз.

Защита от случайного повторного пополнения по тому же самому платежу обеспечивается на двух уровнях:

1) Админ не может изменить состояние платежа на иное, если платеж уже зачислен и имеет статус ok.

2) Сервис платежной системы при случайных повторных вызовах STATUS URL не может изменить статус платежа снова на accept, т. к. при этом проверяется какой статус уже выставлен для платежа. Если выставлен статус accept или ok, то ничего не происходит.

На этом на сегодня всё :)))))

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

Удачи ВАМ на ниве сайтостроя !!!

подробнее

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

Доброго Вам времени суток, странник интернета !!!

Я давно хотел рассказать о том, как можно создать свой слайдер используя javascript - технологию.

Вы скажете - слайдеров уже готовых в интернете - МОРЕ.

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

Я же хотел бы пополнить и расширить свои и Ваши знания по языку javascript, его применению и главное - сделать что-нибудь полезное, а не демонстрировать слишком "абстрактные" примеры. ;)

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

Итак, рассмотрим какой html-код требуется для отображения слайдера и что должен делать с этим кодом javascript, чтобы этот код превратился в слайдер.

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

<div id="gl_slider" style="text-align: center;">

<div id="gl_slider_container">

<div class="timedSlideshow jdSlideshow" id="mySlideshow" style="display: block; "><a class="global" href="">

<div class="slideElement" style="position: absolute; left: 0px; top: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; background-image: url('.$slider_dir.'/images/banner/05.gif); visibility: hidden; opacity: 0; background-position: 50% 50%; "></div>

<div class="slideElement" style="position: absolute; left: 0px; top: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; background-image: url('.$slider_dir.'/images/banner/fl_lessons.jpg); visibility: hidden; opacity: 0; background-position: 50% 50%; "></div>

<div class="loadingElement" style="display: none; "></div><div style="visibility: visible; opacity: 0.7; height: 40px; " class="slideInfoZone"><h2>продукты сайта</h2><p>все продукты нашего сайта</p></div></a> </div> <script type="text/javascript">

countArticle = 0;

var mySlideData = new Array();

mySlideData[countArticle++] = new Array(

'modules/slider/images/banner/05.gif',

'http://localhost/megainformatic_ru/?page=40&banner',

'Уроки Photoshop',

'Если Вы хотите изучить профессиональные методы работы в Adobe Photoshop'

);

mySlideData[countArticle++] = new Array(

'modules/slider/images/banner/ph_draw_and_anim.jpg',

'http://localhost/megainformatic_ru/?page=66&banner',

'Уроки Photoshop - Рисуем и анимируем',

'учимся рисовать и анимировать в photoshop'

);

</script>

<script type="text/javascript">

function startSlideshow() {

var slideshow = new timedSlideShow($('mySlideshow'), mySlideData);

}

addLoadEvent(startSlideshow);

</script>

</div>

</div>

Исходя из этого кода можно сделать такой вывод - в блоке div с id mySlideshow размещаются все картинки слайд-шоу в виде блоков div класса slideElement.

Как можно заметить все они имеют атрибут visibility: hidden;
Т. е. скрытый - поэтому они не отображаются.

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

Как видите в теории это достаточно просто.

Посмотрим что имеет место в скрипте фактически.

Сначала выполняются некоторые подготовительные операции -

countArticle = 0;

var mySlideData = new Array();

mySlideData[countArticle++] = new Array(

'modules/slider/images/banner/05.gif',

'http://localhost/megainformatic_ru/?page=40&banner',

'Уроки Photoshop',

'Если Вы хотите изучить профессиональные методы работы в Adobe Photoshop'

);

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

Адрес изображения

Ссылка для перехода по клику на данное изображение

А также некоторые пояснительные надписи

Затем происходит следующее -

function startSlideshow() {

var slideshow = new timedSlideShow($('mySlideshow'), mySlideData);

}

addLoadEvent(startSlideshow);

Т. е. внутри обработчика функции startSlideshow создается экземпляр класса timedSlideShow и ему передаются параметры -

id блока набора элементов слайдера

и массив описаний к этим элементам.

Далее данная функция добавляется в обработчик события onLoad для загрузчика onLoad страницы.

Это стандартный обработчик, с которого начинают свою работу многие javascript-приложения.

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

То что мы рассматривали выше - это так называемая подготовительная часть работы, которая описывает html код слайдера вместе с его содержимым (набором картинок), а также вызов метода для создания яваскрипт-объекта слайдера.

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

На самом деле их всего 3:

<script src="<?php echo $slider_dir; ?>/inc/mootools.release.83.js" type="text/javascript"></script>

<script src="<?php echo $slider_dir; ?>/inc/timed.slideshow.js" type="text/javascript"></script>

<link rel="stylesheet" href="<?php echo $slider_dir; ?>/inc/jd.slideshow.css" type="text/css" media="screen">

файл mootools.release.83.js - представляет из себя подключенную, используемую слайдером библиотеку mootools.

файл timed.slideshow.js - содержит собственно логику работы слайдера.

ну и наконец файл jd.slideshow.css - это собственно описание элементов внешнего вида слайдера.

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

Нам с вами остается собственно кратко познакомиться с логикой работы слайдера (т. е. прокомментировать код, описанный в файле timed.slideshow.js).

Этим Мы с вами займёмся в следующей статье - логика работы слайдера на javascript
подробнее

     
     
  Добро пожаловать в систему управления сайтом megainformatic cms !  
     
  [к содержанию] [назад] [далее]  
     
 

4) Основы добавления контента на сайт, управления и поддержки сайта

 
     
 

Когда вы обращаетесь к вашему локальному сайту Вы пишете в адресной строке браузера -

http://localhost/megainformatic/

 
     
 

При этом такой запрос аналогичен следующему -

http://localhost/megainformatic/index.php

 
     
 

Т. е. по сути мы в первом случае обращаемся к странице index.php.

А как обратиться к другим страницам ? И как узнать сколько всего на сайте страниц ?

 
     
 

Ну, не торопитесь с вопросами. Давайте по-порядку.

Как обратиться к другим страницам ?

А вот как -

http://localhost/megainformatic/index.php?page=4

 
     
 

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

?page=4

Т. е. мы указываем параметр page равный значению 4. Меняя числовое значение вы попадете на указанную страницу. А php код внедренный в страницу index.php в нашем предыдущем уроке устроен таким образом, что если Вы даже обратитесь к несуществующей странице, то будет отображена страница по-умолчанию, т. е. с параметром ?page=1

http://localhost/megainformatic/index.php?page=1

 
     
 

Как узнать сколько всего страниц на сайте?

Можно это сделать несколькими способами.

1) Можно открыть базу данных сайта, таблицу papers и увидеть сколько там добавлено страниц;

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

3) Есть специальный модуль - map.php, он же используется для облегчения индексации сайта поисковым роботом.

Просто наберите в адресной строке -

http://localhost/megainformatic/map.php

 
     
 

И вы получите список всех страниц сайта. Это карта сайта. Можно посмотреть код файла map.php. Суть его работы состоит в выборке всех описаний страниц из базы данных сайта и выводе в виде списка ссылок на эти страницы.

По количеству этих ссылок вы легко можете определить сколько страниц есть на вашем сайте. В нашем демонстрационном сайте пока всего 7 страниц.

 
     
 

Как же добавлять новые страницы на свой сайт ?

И опять всё не так уж сложно, как кажется на первый взгляд.

Добавление новой страницы включает всего 3 шага:

1) Создание в html-редакторе html файла страницы - ФАЙЛ ДЛЯ РЕДАКТИРОВАНИЯ КОНТЕНТА. Пример кода такого файла вы можете найти заглянув в папку megainformatic/papers/maket

там есть файл maket.html

откройте его в html-редакторе и посмотрите. Самое главное - это чтобы контент вашей страницы находился в таблице, иначе данный демо-сайт не сможет вывести его корректно.

2) на основе содержимого файла maket.html (мы возьмем его для примера, у вас конечно будет свой файл) нужно создать текстовый файл maket.txt - ФАЙЛ КОНТЕНТА

далее нужно взять весь код из файла maket.html и скопировать его в файл maket.txt

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

т. е. из текстового файла maket.txt уберите код -

 
     
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
 
     
 

</head>

<body>

 
     
 
</body>
</html>
 
     
 

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

papers/maket/maket.txt

 
     
 

3) Нам остается добавить описание файла контента в базу данных сайта -

заходим в админку сайта - в браузере набираем -

http://localhost/megainformatic/holder/

Если Вы заходите в админку в первый раз вам нужно придумать и ввести новый пароль администратора. Обязательно запомните пароль, т. к. он хранится в зашифрованном виде. Если вдруг забудете пароль - просто удалите файл holder/enter.txt

после этого зайдите в админку и задайте новый пароль

 
     
 

Находясь в админке выберите ссылку -

Добавить новую страницу на сайт

Введите идентификатор страницы pageid - если у Вас уже есть например 7 страниц, значит вводите число 8

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

Введите ссылку на Файл контента страницы- (в нашем примере для файла maket.txt нужно ввести - papers/maket/maket.txt) - как видите путь к файлу задается относительно корневой папки сайта

 
     
  Теперь жмите кнопку ДОБАВИТЬ. И дело сделано - новая страница появится на вашем сайте !  
     
  Изменять содержимое страниц оцень легко - просто повторите шаги 1 и 2. На шаге один внесите нужные исправления в html-файл контента страницы, а на шаге 2 просто скопируйте измененный вариант в текстовый файл контента страницы.  
     
  Как удалить ненужные страницы с сайта ? Я думаю это тоже не такой уж сложный вопрос - воспользуйтесь phpMyAdmin ( phpMyAdmin - администрирование СУБД MySQL) и удалите из базы данных ненужные страницы и файлы их контента. Однако советую Вам оставлять непрерывный блок страниц. К примеру если у Вас есть 100 страниц и Вам вдруг надо удалить 88, то вместо этого перенесите описание 100й страницы на место 88, а 100ю страницу удалите. Это можно выполнить также через phpMyAdmin.  
     
  [к содержанию] [назад] [далее] далее мы проверим работу нашего сайта и рассмотрим процедуру установки его на хостинге  
     
     
подробнее

Game craft - отображение scv модели в формате x в d3d9-приложении

[все уроки game craft]  [моделируем scv]  [моделируем scv шаг 1 часть 2] [моделируем scv шаг 2 часть 3] [Прорисовка текстуры робота SCV шаг 5]  [экспорт робота scv в формат x] 

В предыдущих уроках мы рассмотрели как моделируется, текстурируется и экспортируется модель. Теперь покажем как выводить данную модель в d3d9-приложении.

Модель робота scv в d3d9 - приложении

Вы можете скачать самораспаковывающийся архив, содержащий весь необходимый исходный код

Для нормальной сборки вам также потребуется среда разработки MSVS 2005 и DirectX SDK August 2008.

Теперь попробуем кратко продокументировать код, который содержит приложение d3d9_skin_mesh

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

Выполнение приложения начинается с вызова метода CD3DAppTemplateApp::CD3DAppTemplateApp()

Далее следует остановиться на вызове метода BOOL CD3DAppTemplateApp::InitInstance(), т. к. внутри него создается и скрывается главное окно приложения -

pMainWindow = new CD3DAppTemplateDlg();
pMainWindow->Create(CD3DAppTemplateDlg::IDD);
pMainWindow->ShowWindow(SW_SHOW);
pMainWindow->ShowWindow(SW_HIDE);

Это делается для того, чтобы внутри процедуры InitialD3DAppSettings новое окно, создаваемое и используемое для целей вывода 3D сцены не перекрывалось с основным и не возникало путаницы. Просто создается иллюзия, что окно 3D сцены и есть основное.

void InitialD3DAppSettings()

//...

DXUTCreateWindow( L"D3D9 App Template", 0, 0, 0);

//...

В этой связи возникает вопрос: А почему окно pMainWindow нельзя использовать для вывода 3D сцены ?

Ответ звучит так: окно pMainWindow - это базовое окно MFC приложения, с которым связаны некоторые ресурсы, но для целей вывода 3D сцены оно не пригодно, т. к. DirectX API предполагает для этого только вновь созданное, отдельное окно. В противном случае обеспечить работу D3D в этом окне не представляется возможным. Поэтому именно такой способ и используется в нашем приложении d3d9_skin_mesh

Нетрудно догадаться, что основная работа по подготовке d3d-приложения к работе описана внутри процедуры InitialD3DAppSettings, а собственно цикл работы приложения описан в DXUTMainLoop и заключается в поочередном вызове сначала процедуры void CALLBACK OnFrameMove( double fTime, float fElapsedTime, void* pUserContext ), а после неё - void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext ).

У Вас может возникнуть вопрос: Как реализуется обработка управления от клавиатуры и мыши ?

В данном приложении она реализована обычными средствами Windows - через функцию MsgProc - но это будет более медленный способ. В реальном игровом приложении это реализуется посредством вызова специальной функции где-то в самом начале процедуры OnFrameMove. Например в игре Веселый Буквоежка для этой цели используется процедура UpdateInput - внутри которой проверяется какие клавиши или действия мышью были использованы пользователем и в ответ на это вызываются соответствующие процедуры, функции или методы которые привязаны к конкретной клавише или действию мышью. Подробнее об этом можно узнать получив полный исходный код движка Fle, на котором написана игра Веселый Буквоежка. Также будут не бесполезны иструменты разработки на движке Fle - SceneEditor, описание механизма сборки локаций и утилита Coords2D.

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

Итак, двинемся по коду d3d9_skin_mesh дальше. После того как все предварительные действия в приложении осуществлены - это как я уже говорил, описано внутри процедуры InitialD3DAppSettings, вызываются поочередно процедуры void CALLBACK OnFrameMove( double fTime, float fElapsedTime, void* pUserContext ) и void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext ). Внутри них и надо искать ответ на вопросы - как собственно работает d3d-приложение и каким образом это реализовано ?

Очень полезное умение, которое Вам несомненно пригодится - умение задавать себе вопросы и находить на них ответы в коде. Внутри OnFrameMove Вы увидите, как запоминается предыдущее значение таймера в переменной g_fLastAnimTime, там же есть метод вызова камеры (но она пока не используется), а также методы, которые используются для управления обзором игровой сцены вместо камеры - через g_ArcBall.

В процедуре OnFrameRender формируется изображение игровой сцены - сначала выводятся элементы управления g_SettingsDlg, затем очищается backbuffer (невидимый экран, который как только будет подготовлен будет выведен на экран реальный - чтобы изображение не мерцало отображая как на нём рисуются элементы), задаются параметры для источника света и собственно происходит модель робота SCV - DrawFrame.

Резонные вопросы, которые возникают - где, как и каким образом загружается модель и как она затем отрисовывается ? Нужно добавить, что в приложении d3d9_skin_mesh, которое базируется на коде примера SkinnedMesh из DirectX SDK Aug 2008, реализовано отображение не только статичных, но и анимированных моделей. Так что если загрузить модель, в которой есть скелетная анимация - то модель будет выводиться в движении - циклично воспроизводя имеющуюся в ней анимационную цепочку.

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

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

Оставшийся код, Вы можете рассмотреть самостоятельно и лучше это делать путём написания нового приложения, которое бы выполняло определенные задачи. Например не только загружало анимированную модель, но и по нажатию клавиш или кликам мышью, заставляло бы перемещатьтся 3D-модель в игровом пространстве. В последующих наших уроках мы именно этим и займёмся: будем рассматривать поэтапно каждую задачу, возникающую в типичном игровом проекте - на примере нашей игры Game Craft, а также будем моделировать все необходимые для этого модели и делать другие сопутствующие вещи (текстуры, описания, звуки, музыку и др.)

В цикле наших уроков Мы постараемся остановиться на следующих вопросах:

- работа с 3d-камерой;
- перемещение модели в пространстве;
- реализация управления игрой от клавиатуры и мыши;
- создание игровых панелей и реализация простейших операций по управлению игрой через игровую панель;
- создание рельефа земной поверхности и его текстурирование;
- вывод рельефа в игре и перемещение по нему моделей;
- модели игровых ресурсов: минералы, гейзер веспен-газа;
- не-интерактивные игровые объекты, формирующие окружающую среду: деревья, кусты, камни и прочее.
- постройка нового коммандного центра в игре рабочим scv;
- добыча ресурсов рабочими роботами scv;
- создание фоновой музыки и сопутствующих игровых звуков;
- создание редактора игровой сцены;

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

В следующем уроке мы займёмся изучением управления игрой от Direct Input и работой с 3d-камерой в d3d9-приложении работа с 3d-камерой в d3d9-приложении

[все уроки game craft]  [моделируем scv]  [Моделируем робота SCV шаг 1 часть 2]  [Моделируем робота SCV шаг 2 часть 3]  [Прорисовка текстуры робота SCV шаг 5]  [экспорт робота scv в формат x] 

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

3. Overlay objects



читать данную статью на русском

It's time to find out how we are going to simulate the fall of the ball in the hole.





Content

page 1 - Sprites

page 2 - Objects

page 3 - Overlay objects

page 4 - Coding - Setting parameters for the Scene Editor fge and write code to display the sprite ball in your first gaming application

page 5 - Show jumped ball

page 6 - Loading game scene

page 7 - Moving game scene

page 8 - Closing of the scene from the cavities by means of a black texture with a slot, restricts the movement of the scene

page 9 - We realize getting into the correct hole and around the holes - holes define the boundaries of sprites and sprite jumped ball

page 10 - Testing collisions

page 11 - Game score, sounds, music







Nothing is impossible, you probably guessed that just need to take the block floor_front, define the right scale factors for it xScale, yScale, as they change, as well as the procedure to set the value of the previously described z = 0.76

Then simply insert the blocks in the right places of the scene, where there are holes.

However, it just sounds "just", indeed you will encounter difficulties - block floor_front merges with the block floor and when it is already inserted it is very difficult to see it is inserted or not. In addition, the error can be inserted in the same place a few blocks, because obviously you can not see how many of them there is not going to click on these blocks of the scene, until the dialog box of their choice appeares.

Will the complexity and with determination to floor_front coordinate z. If you forget to turn off the option Options > Auto Calc Z.

Creating new game scene in fle game engine - the scenes editor Scene Editor 1.0.2 - ball over sand blocks at the bottom of the scene

I therefore propose to the other - a simpler and more rational way.

To do this, simply create a new scene - File > New

Next, select the object in the left panel floor_front, first set the correct scale if it is different for it from 1.0. To do this, you will remember, you first need to select an object floor_front and force the desired value, ie xScale = 1.0, yScale = 1.0

Now disable the option Options > Auto Calc Z and set the force z = 0.76

Arrange the blocks in areas of the scene where you are on the idea of the holes. Like this -

Creating new game scene in fle game engine - the scenes editor Scene Editor 1.0.2 - the front of the sand holes for blocks

Now you will not get confused about where to put the block front of the holes, and where not. You just have to re-enable the option Options > Auto Calc Z and now add blocks to the back of the holes - using an object floor.

Creating new game scene in fle game engine - the scenes editor Scene Editor 1.0.2 - back sand blocks for holes

Well, you have only to add a block floor2 in those places of the scene where the holes will not and the scene be ready !

Creating new game scene in fle game engine - the scenes editor Scene Editor 1.0.2 - scene is ready

Save the result of you labor.

You can still take the ball and could move around the stage to make sure that it falls into a hole when you hover over them. For a ball to be forced to the given coordinates z = 0.78, and option Options > Auto Calc Z should be disabled !

Creating new game scene in fle game engine - the scenes editor Scene Editor 1.0.2 - scene is ready - ball in hole

For clarity, I have added in the stage 2 of the ball. You can add them as you like, but in general we have the ball to be only 1. Unless of course you do not change the idea of the game as follows: that with an increase in the level of complexity is displayed 1, and more balls and the player will have to try to move the floor so that It got into the holes as many balls!

So, after the completion of the experiments we remove all the balls from the scene, or just use the saved version of the scene in which you have not added a single ball. If there are not - create all over again as described above, with the ball in the scene do not add and save the result of you work.

Our gaming scene is ready. On page 4 we will deal and subsequent programming of our game: the ball will have to dodge the holes, the floor should be a move from mouse movements well, etc. But first, of course the scene file and all game resources must be loaded to your game app. Yet you probably want to add to the game sounds and music. All this on next pages.

[previous] [next]

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

Registered comments



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


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