Loading...
Свободное общение | TileMap - продвинутый блиттер для PHP
TileMap - простая и быстрая библиотека для рисования спрайтов на PHP, написанная за пару часов. Она отлично подойдёт в качестве рендерера для любой WAP игры, хоть фермы, хоть рпг.
Возможности:
Карты тайлов.
Отложная отрисовка с сортировкой по слоям.
Автоматическое отсечение спрайтов, не попадающих в пространство камеры.
Встроенная реализация камеры(setViewport).
Затенение спрайтов с альфаканалом.

Карта тайлов:
Карта тайлов - простой JSON файл, описывающий позицию тайлов в атласе.
Формат крайне простой:
json
     { 
"sprite": "tilemap.png", // Исходная картинка

"frames": // Тайлы
[
{
"name": "cobblestone", // Имя тайла
"rect": [0, 0, 32, 32] // Позиция тайла в атласе
},
{
"name": "grass",
"rect": [0, 64, 32, 32]
}
]
}


Пример отрисовки простой карты:
php
   <?php 
include 'tilemap.php';

$width = 640;
$height = 480;

$tileRenderer = new TileRenderer($width, $height);
$sprite = $tileRenderer->getSprite("test.json");

for($y = 0; $y < $height / 32; $y++)
{
for($x = 0; $x < $width / 32; $x++)
{
$tileRenderer->drawSprite($sprite, "grass", $x * 32, $y * 32, 0);

if($x % ($width / 32 - 1) == 0 || $y % ($height / 32 - 1) == 0)
$tileRenderer->drawSprite($sprite, "cobblestone", $x * 32, $y * 32, 1);
}
}

$tileRenderer->present();


Ждём модерации архива.

Результат:

________
посл. ред. 05.12.2019 в 21:12; всего 3 раз(а); by monobogdan
мразь (05.12.2019 в 21:41)
monobogdan , тестировал на создание реальных карт с множеством разных объектов? Что-то мне кажется, что слишком геморройно будет рисовать реальную карту.
Куча циклов. Куча if и т.д
php
   for($y = 0; $y < $height / 32; $y++) 
{
for($x = 0; $x < $width / 32; $x++)
{
$tileRenderer->drawSprite($sprite, "grass", $x * 32, $y * 32, 0);

if($x % ($width / 32 - 1) == 0 || $y % ($height / 32 - 1) == 0)
$tileRenderer->drawSprite($sprite, "cobblestone", $x * 32, $y * 32, 1);
}
}

~300мс на 16384 спрайтах, причём упирается в саму медлительность PHP и в внезапно, findFrame. Для оффлайн рендерера нормально.
Без куллинга рендеринг занимает несколько секунд.
if - чисто в демке для отрисовки границ.
________
посл. ред. 05.12.2019 в 21:57; всего 3 раз(а); by monobogdan
Онлайн: 3
Время:
Gen. 0.308
(c) Bym.Guru 2010-2026