![]() бесплатно |
![]() 1800 руб. |
![]() 1000 руб. |
![]() 500 руб. |
![]() бесплатно |
![]() 150 руб. |
![]() 200 руб. |
![]() 250 руб. |
![]() бесплатно |
![]() 100 руб. |
![]() 350 руб. |
![]() 500 руб. |
![]() 1500 руб. |
![]() 400 руб. |
![]() 14000 руб. |
![]() 100 руб. |
![]() 12000 руб. |
![]() 14000 руб. |
![]() |
||
Как создать игру ? - Программируем сами. Рассмотрение программирования игр под DirectX 9c на C++ с использованием среды разработки MSVS 2005 или выше. |
||
[содержание] [назад] [страница 5] [далее] | ||
Введение в 2d-игры - игровое меню | ||
Внутриигровое меню может быть главным меню, содержащим пункты <Начать игру>, <Продолжить>, <Настройка>, <Авторы>, <Справка>, <Выход> и какие-либо еще. В игровом процессе меню может быть представлено в виде отдельной панели, содержащей какие-либо кнопки - выхода в главное меню, скрытия панелей или еще что-то. | ||
В качестве изображений активных элементов меню служат, как правило, прямоугольные изображения. Принцип работы меню прост - при попадании указателя мыши в указанную прямоугольную область (она может и не совпадать по размерам с размерами изображения, используемого в качестве активного элемента меню) и нажатии левой кнопки мыши должно обрабатываться действие, связанное с данным пунктом меню. Т. о. алгоритм создания и использования меню может быть такой - + подготовить изображения для элементов меню загрузив их в память; + определить прямоугольные области для пунктов меню; + определить обработчики пунктов меню - описать функции и их реализации; Для обработки управления меню посредством мыши используются средства DirectInput8. |
||
Загружать и использовать изображения Вы теперь умеете - если нет, то обратитесь к предыдущему уроку, посвященному этой теме. | ||
Остается разобраться как определяются прямоугольные области и как пишутся обработчики для пунктов меню. | ||
В игре Веселый Буквоежка, если она уже у Вас установлена, можно заглянуть в подпапку Media\control\mainmenu и открыть файл btn_areas.txt | ||
Внутри этого файла описаны строки вида - new_game; 0.2300f; 0.2633f; 0.9200f; 0.1033f; |
||
что означает - name; Left; Top; Right; Bottom; name представляет имя пункта меню - это своего рода комментарий, чтобы было понятно, к чему относятся последующие данные; Left; Top; Right; Bottom; определяют соответственно левую, верхнюю, правую, нижнюю границы прямоугольной области для пункта меню и описаны в векторной системе координат, где 0.0f, 0.0f - это центр экрана, x = -1.0f левый край экрана, x = 1.0f правый край, y = 1.0f верхняя граница экрана, y = -1.0f нижняя. |
||
Определение
этих параметров удобно выполнять используя утилиту
Coords2D запустите файл Coords2D_setup.exe и распакуйте архив, запустите файл Coords2D.exe После запуска выберите пункт меню File > Reload. Более подробные инструкции читайте в файле readme.txt |
||
Для того, чтобы определить значения Left; Top; Right; Bottom; утилитой Coords2D нужно задать параметры элементов меню в файле tex_list.txt с которым работает утилита ( подробнее см. readme.txt ), далее жмём File > Reload и видим созданное меню на экране. Теперь остается только подводить указатель мыши к участкам на экране и записывать координаты выводимые в левом верхнем углу. Не забудьте еще учесть поправку на координату Y = -0.02f, она вводится, т. к. верхняя часть рабочего пространства утилиты занято строкой меню, чем и обусловлен этот небольшой сдвиг, требующий поправок. | ||
![]() |
||
Загружаем данные о прямоугольных областях активных элементов меню из текстового файла btn_areas.txt Я приведу фрагменты кода из класса CGameMainMenu -
|
||
// данный метод выполняет чтение указанного текстового файла и обрабатывает // // // // указанные в нём параметры меню, занося их в массив CPtrArray, откуда затем к ним // // удобно обращаться как к объектам вида LPBTNAREADESC void
CGameMainMenu::LoadBtnAreas(CPtrArray* pAreasArray,
LPBTNAREADESC btnArea;
// определяем полное имя файла //
если файл не существует - ошибка заносится в лог-файл, приложение завершает
// // // работу //
открываем указанный файл для чтения, если он пустой - ошибка в лог и выход
if (textFile.GetLength() == 0) // перебираем все строки текстового файла и обрабатываем их, формируя объекты // // // LPBTNAREADESC // подразумевается жестко определенная структура файла, если она отличается от // // // требуемой - это приведет к непредсказуемым последствиям !
int iItem = 0; // код функции ReadNextParam вы найдете в ПОЛНОМ ИСХОДНОМ КОДЕ игры
ReadNextParam(&ParamStr, &ParamCharPos, &strValue);
ReadNextParam(&ParamStr, &ParamCharPos, &strValue);
ReadNextParam(&ParamStr, &ParamCharPos, &strValue);
ReadNextParam(&ParamStr, &ParamCharPos, &strValue);
ReadNextParam(&ParamStr, &ParamCharPos, &strValue); pAreasArray->Add((void*)btnArea);
iItem++; } |
||
Теперь покажем код, который обрабатывает выбор пунктов меню пользователем при помощи мыши - | ||
// данный метод должен вызываться в методе FrameMove анимации сцены void
CGameMainMenu::Anim()
void
CGameMainMenu::AnimMenuCursor() //
если приложение не в состоянии показа меню - выход // обработка выбранного пункта меню m_iSelectedBtnItem
= SelectMainMenuItem(); } |
||
int
CGameMainMenu::SelectMainMenuItem() //
получение идентификатора Area выбранного пункта меню, если указатель вне
// // // // пределов меню - возвращается значение -1 // обработка данного пункта меню switch
(Area) case MenuItem1: { // здесь описываются конкретные действия, которые нужно выполнить при выборе // // // // данного пункта меню break; } case MenuItem2: { // здесь описываются конкретные действия, которые нужно выполнить при выборе // // // // данного пункта меню break; } case MenuItem3: { // здесь описываются конкретные действия, которые нужно выполнить при выборе // // // // данного пункта меню break; } } return Area; } |
||
Функцию TargetBtnArea можно найти в ПОЛНОМ ИСХОДНОМ КОДЕ игры. | ||
В следующем нашем уроке мы разберем как перемещать и анимировать персонажа. | ||
Если у Вас всё же остались вопросы - не стесняйтесь задавать их на форуме или по e-mail. | ||
[содержание] [назад] [страница 5] [далее] | ||
автор: Тимонин Андрей
дата публикации на сайте Мега Информатик: 16.11.2012
Эта статья будет посвящена основам flash программирования. Здесь мы создадим наше первое приложение.
Создаем новый проект. Как это делается, мы рассмотрели в предыдущей статье.
Посмотрим на структуру каталогов, которая у нас получилась.
Папка src содержит все файлы AS нашего приложения. В папку lib помещаем откомпилированные swc библиотеки. В директории bin имеем результирующий swf файл, которы мы помещаем на нашу html страницу. Папка Fla создана мной для удобства хранения исходных флешников от adоbe flash.
Посмотрим на настройки нашего проекта.
Здесь самое интересное, это размеры флешки ( Dimension) 800 на 600 пикселей, цвет заднего плана - белый и количество кадров в секунду (FPS) - 30.
Для включения в проект библиотеки Swc, необходимо скопировать в папку lib эту библиотеку и в проекте указать галочку "добавить в библиотеку".
Основной код нашего проекта содержится в файле Main.AS. Давайте на него и посмотрим.
package
{
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.Event;
public class Main extends Sprite
{
public var hello_world:Hello_world_mc;
public const WIDTH:int = 800;
public const HEIGTH:int = 600;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
hello_world = new Hello_world_mc();
hello_world.x = WIDTH / 2 - hello_world.width / 2;
hello_world.y = HEIGTH / 2 - hello_world.height / 2;
addChild(hello_world);
}
}
}
Каждый класс в AS упаковывается в пакет, котому можно дать имя, которое характеризует путь к пакету относительно корня(папки src). В нашем случае пакет не имеет имени. Далее мы импортируем три класса: Sprite, MovieClip, которые упакованы в пакете flash.display и Event, упакованный в пакет flash.events.
Далее создаем открытый класс Main, унаследовавший всю функциональность от Sprite.
открытая переменная hello_world типа Hello_world_mc - это спрайт импортированный из swc библиотеки. Объявляем две константы.
В конструкторе класса Main мы видим добавление слушателя событий, с помощью функции addEventListener (событие добавление на сцену - ADDED_TO_STAGE ). и привязываем функцию private function init(e:Event = null):void.
В этой функции мы создаем наш hello_world , устанавливаем положение по центру сцены и добавляем на сцену методом
addChild(hello_world);
Компилиуем Ctrl + ENTER.
На этом заканчиваю. Надеюсь, эта информация была вам интересна.
C уважением, Андрей.
серия продуктов - Уроки Photoshop
![]() бесплатно |
![]() 100 руб. |
![]() 100 руб. |
![]() 250 руб. |