PHP Game Engine (PGE)
2 дня назад я начал писать PHP Game Engine ( PGE )Маленький и
простой движок для создания игр в DevelStudio.
Сразу написал маленький пример по использованию.
Скачать:
PGEngine - Движок
PGE_Demo - Демонстрация движка
PGE_Source - Демонстрация движка (Исходник)
Как создать игру?
Требования php_gd2.dll
1. Нужно создать сцену
Нам нужна любая форма или компонент в котором мы будет выводить сцену
Создаем например форму:
Global $Form; # Сделаем форму глобальной
$Form = New TForm; # Создаем форму
$Form->w = 640; # Ширина
$Form->h = 480; # Высота
$Form->show(); # Покажем форму
Теперь можно создать сцену
Global $Scene; # Сделаем сцену глобальной
$Scene = New PGE_Scene( $Form ); # Создаем сцену
Теперь можно загрузить текстуры
Нам нужна текстура игрока, пола, и стен
Закинем их в sprites/ папку с игрой
Немного раскажу о классе PGE_Sprite
$SpritePath = Путь к спрайту в папке sprites/
$Scene = Сцена (False)
$Tile = Мозайка (False)
$TileCrop = Нарезать тайл-сеты на тайлы (False)
$TileW = Ширина тайла (32)
$TileH = Высота тайла (48)
$Transparant = Прозрачность по первому пикселю иначе будет сохранять альфа прозрачность (False)
$TX = Количество тайлов по ширине (Auto)
$TY = Количество тайлов по высоте (Auto)
$StartTileY = Стартовый id тайла по высоте (0)
$StartTileX = Стартовый id тайла по ширине (0)
Загрузим их, настроим, и поставим на сцену:
/** Создаем пол */
# Загрузим текстуру и покажем на сцене $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
и подключим функцию в событие "Нажатие кнопки" в ссылке на форму (в главный код игры)
{
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();
Полный код игры:
$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();
6 комментариев
дайте плиз хотя-бы временную
скачать
пример движка
исходник примера