Рейтинг
GameFusion26 Апреля 2011 в 4:18

PHP Game Engine (PGE)

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 )
Информация о движке

6 комментариев