Вторник, 23 Апреля 2024, 15:00

Приветствую Вас Гость

Меню сайта
Наш опрос
Сколько часов подряд вы обычно играете?
Всего ответов: 1431
Блог » 2011 » апреля » 26 » PHP Game Engine (PGE)
PHP Game Engine (PGE)
04:18
2 дня назад я начал писать PHP Game Engine ( PGE )
Маленький и
простой движок для создания игр в DevelStudio.
Сразу написал маленький пример по использованию.

Скачать:
PGEngine - Движок
PGE_Demo - Демонстрация движка
PGE_Source - Демонстрация движка (Исходник)


Как создать игру?
Требования php_gd2.dll

1. Нужно создать сцену
Нам нужна любая форма или компонент в котором мы будет выводить сцену
Создаем например форму:

Code

Global $Form; # Сделаем форму глобальной
$Form = New TForm; # Создаем форму
$Form->w = 640; # Ширина
$Form->h = 480; # Высота
$Form->show(); # Покажем форму

Теперь можно создать сцену

Code

Global $Scene; # Сделаем сцену глобальной
$Scene = New PGE_Scene( $Form ); # Создаем сцену

Теперь можно загрузить текстуры
Нам нужна текстура игрока, пола, и стен

Закинем их в sprites/ папку с игрой

Немного раскажу о классе PGE_Sprite

Quote
PGE_Sprite( $SpritePath, $Scene, $Tile, $TileCrop, $TileW, $TileH, $Transparant, $TX, $TY, $StartTileY, $StartTileX )

$SpritePath = Путь к спрайту в папке sprites/
$Scene = Сцена (False)
$Tile = Мозайка (False)
$TileCrop = Нарезать тайл-сеты на тайлы (False)
$TileW = Ширина тайла (32)
$TileH = Высота тайла (48)
$Transparant = Прозрачность по первому пикселю иначе будет сохранять альфа прозрачность (False)
$TX = Количество тайлов по ширине (Auto)
$TY = Количество тайлов по высоте (Auto)
$StartTileY = Стартовый id тайла по высоте (0)
$StartTileX = Стартовый id тайла по ширине (0)

Загрузим их, настроим, и поставим на сцену:

Code

/** Создаем пол */

# Загрузим текстуру и покажем на сцене $Scene
$Floor = New PGE_Sprite( "floor.png", $Scene, True );  
$Floor->Handle->w = $Scene->Width;
$Floor->Handle->h = $Scene->Height;

/** Создаем стены вокруг сцены */

# Загружаем тестуру и создаем спрайт
$Wall = New PGE_Sprite( "wall.png", $Scene, True );  
# Меняем ширину стенки
$Wall->Handle->w = 32;  
# Меняем высоту стенки
$Wall->Handle->h = $Scene->Height+32;  
# Объект сталкивается с другими Solid-объектами
$Wall->Solid = True;  

$Wall = New PGE_Sprite( "wall.png", $Scene, True );
$Wall->Handle->x = 32;
$Wall->Handle->w = $Scene->Width+32;
$Wall->Handle->h = 32;
$Wall->Solid = True;

$Wall = New PGE_Sprite( "wall.png", $Scene, True );
$Wall->Handle->x = 32;
$Wall->Handle->y = $Scene->Height-32;
$Wall->Handle->w = $Scene->Width+32;
$Wall->Handle->h = 32;
$Wall->Solid = True;

$Wall = New PGE_Sprite( "wall.png", $Scene, True );
$Wall->Handle->w = 32;
$Wall->Handle->x = $Scene->Width-32;
$Wall->Handle->h = $Scene->Height+32;
$Wall->Solid = True;

$Wall = New PGE_Sprite( "wall.png", $Scene, True );
$Wall->Handle->x = ($Scene->Width/2)-($Wall->Handle->Width/2)-(32*2);
$Wall->Handle->y = ($Scene->Height/2)-($Wall->Handle->Height/2)-(32*2);
$Wall->Handle->autosize = True;
$Wall->Solid = True;

/** Создаем игрока */

# Сделаем игрока глобальным
Global $Player;

# Загружаем тестуру и создаем спрайт
$Player = New PGE_Sprite( "player.png", $Scene, False, True, 32, 48, False );
# Центрируем ширину
$Player->Handle->x = ($Scene->Width/2)-($Player->Handle->Width/2);  
  # Центрируем высоту
$Player->Handle->y = ($Scene->Height/2)-($Player->Handle->Height/2);
# Объект сталкивается с другими Solid-объектами
$Player->Solid = True;  

Теперь нам нужно настроить поведение игрока
Пока в движке есть 1 стандартное поведение (8 direction movement)

Создаем функцию KeyHandle и unKeyHandle
с параметрами $obj, $key
и подключим функцию в событие "Нажатие кнопки" в ссылке на форму (в главный код игры)

Code
Function KeyHandle( $obj, $key )
{
  Global $Player;
  IF( $key == VK_UP )
  $Player->behavior_edMove_Update( PGE_DIRECTION_UP, True );
  ELSE IF( $key == VK_DOWN )
  $Player->behavior_edMove_Update( PGE_DIRECTION_DOWN, True );
  ELSE IF( $key == VK_LEFT )
  $Player->behavior_edMove_Update( PGE_DIRECTION_LEFT, True );
  ELSE IF( $key == VK_RIGHT )
  $Player->behavior_edMove_Update( PGE_DIRECTION_RIGHT, True );
}

Function unKeyHandle( $obj, $key )
{
  Global $Player;
  $Player->behavior_edMove_Stop();
}

$Form->onKeyDown = "KeyHandle";
$Form->onKeyUp = "unKeyHandle";

Игра готова!
покажем сцену

Code

Global $Scene;
$Scene->show();  

Полный код игры:

Code
Global $Scene, $Player, $Form;
$Form = New TForm;
$Form->w = 640;
$Form->h = 480;
$Form->show();

$Scene = New PGE_Scene( $Form );

$Floor = New PGE_Sprite( "floor.png", $Scene, True );
$Floor->Handle->w = $Scene->Width;
$Floor->Handle->h = $Scene->Height;

$Wall = New PGE_Sprite( "wall.png", $Scene, True );
$Wall->Handle->w = 32;
$Wall->Handle->h = $Scene->Height+32;
$Wall->Solid = True;

$Wall = New PGE_Sprite( "wall.png", $Scene, True );
$Wall->Handle->x = 32;
$Wall->Handle->w = $Scene->Width+32;
$Wall->Handle->h = 32;
$Wall->Solid = True;

$Wall = New PGE_Sprite( "wall.png", $Scene, True );
$Wall->Handle->x = 32;
$Wall->Handle->y = $Scene->Height-32;
$Wall->Handle->w = $Scene->Width+32;
$Wall->Handle->h = 32;
$Wall->Solid = True;

$Wall = New PGE_Sprite( "wall.png", $Scene, True );
$Wall->Handle->w = 32;
$Wall->Handle->x = $Scene->Width-32;
$Wall->Handle->h = $Scene->Height+32;
$Wall->Solid = True;

$Wall = New PGE_Sprite( "wall.png", $Scene, True );
$Wall->Handle->x = ($Scene->Width/2)-($Wall->Handle->Width/2)-(32*2);
$Wall->Handle->y = ($Scene->Height/2)-($Wall->Handle->Height/2)-(32*2);
$Wall->Handle->autosize = True;
$Wall->Solid = True;

$Player = New PGE_Sprite( "player.png", $Scene, False, True, 32, 48, False );
$Player->Handle->x = ($Scene->Width/2)-($Player->Handle->Width/2);
$Player->Handle->y = ($Scene->Height/2)-($Player->Handle->Height/2);
$Player->Solid = True;

Function KeyHandle( $obj, $key )
{
  Global $Player;
  IF( $key == VK_UP )
  $Player->behavior_edMove_Update( PGE_DIRECTION_UP, True );
  ELSE IF( $key == VK_DOWN )
  $Player->behavior_edMove_Update( PGE_DIRECTION_DOWN, True );
  ELSE IF( $key == VK_LEFT )
  $Player->behavior_edMove_Update( PGE_DIRECTION_LEFT, True );
  ELSE IF( $key == VK_RIGHT )
  $Player->behavior_edMove_Update( PGE_DIRECTION_RIGHT, True );
}

Function unKeyHandle( $obj, $key )
{
  Global $Player;
  $Player->behavior_edMove_Stop();
}

$Form->onKeyDown = "KeyHandle";
$Form->onKeyUp = "unKeyHandle";

Global $Scene;
$Scene->show();

Обсуждение на ( Community DevelStudio )
Информация о движке

Категория: Разработка игр | Просмотров: 7998 | Рейтинг: 5.0/2 |
Теги: Game Engine, PGE, iC-Team, Engine, PHP, игровой движок, Canvas, DevelStudio, DENFER, PHP Game Engine
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «PHP Game Engine (PGE)», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 6
+0-
6 Big   (07 Июня 2011 18:15) [Материал]
ссылка не работает

+0-
5 Big   (07 Июня 2011 18:15) [Материал]
а куда сылка делась?
дайте плиз хотя-бы временную

+2-
3 Master_Chief   (27 Апреля 2011 22:09) [Материал]
Master_ChiefАвтор молодцом! Мало того что идея нормальная, так и достойно оформил темку в блоге. Уважаю. Одно "но": PGE уже существует smile SilverSword назвал так свой конструктор игр. Свяжись с ним чтобы этот момент выяснить smile

+3-
2 hbkdx   (27 Апреля 2011 21:21) [Материал]
hbkdxКруто как доделаеш надо будет попробувать чтото сделать на нем)

+4-
4 GameFusion   (28 Апреля 2011 06:53) [Материал]
GameFusionДвижок уже готов но он сделан за 2 дня поэтому могут быть баги.
скачать
пример движка
исходник примера

+5-
1 Blizzcraft   (26 Апреля 2011 17:34) [Материал]
BlizzcraftОгромнейщий респект! Уважаю!

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Автор материала
Ник:
GameFusion
Ещё:
Все его записи
Календарь заметок
«  апреля 2011  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
252627282930
Поиск по сайту
Записи по месяцам
Друзья сайта
Игровой форум GFAQ.ru Перевод консольных игр
Все права сохранены. GcUp.ru © 2008-2024 Рейтинг