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