nfk/mapviewer

NFK 地图查看器

1.0.10 2013-02-07 22:12 UTC

This package is not auto-updated.

Last update: 2024-09-28 13:35:55 UTC


README

.mapa 文件生成游戏 Need For Kill 的地图图像

脚本示例工作: http://harpywar.com/test/nfkmap/

要求

PHP >= 5.3,并启用扩展 php_gd2php_bz2

通过 Composer 安装

Composer 包管理器简化了在项目中安装外部脚本。它会自动下载所需的文件并将它们添加到 vendor/autoload.php 中,您只需在脚本开头包含它即可。

  1. 打开将放置 NFK Map Viewer 的文件夹,并创建一个包含以下内容的 composer.json 文件

     {
         "minimum-stability": "dev",
         "require": {
             "nfk/mapviewer":"dev-master"
         }
     }
    
  2. https://getcomposer.org.cn/composer.phar 文件放入该文件夹并执行以下命令

     php composer.phar install
    
  3. 安装包后,应该出现一个名为 vendor 的文件夹,其中包含 composer 的自动加载器和 MapViewer 的源代码。

  4. 现在,只需在脚本开头包含加载文件即可,之后就可以使用 MapViewer 了。

     include "vendor/autoload.php";
    

常规安装

如果您不使用 Composer,请在脚本开头添加内置的类自动加载器

include("lib/autoloader.php");
Autoloader::register();

使用示例(更多详情请见 examples 目录)

从现有地图保存全尺寸图像

use NFK\MapViewer\MapViewer;

$nmap = new MapViewer("tourney4.mapa");
$nmap->LoadMap();
$im = $nmap->DrawMap();
imagepng($im, $nmap->GetFileName() . '.png');

可以创建自己的地图或修改现有地图

// хелперы для удобного создания объектов
use NFK\MapViewer\MapObject\SimpleObject
use NFK\MapViewer\MapObject\SpecialObject

$nmap = new MapViewer("test.mapa");

// следующий код заполнит бриками границу карты
for ($x = 0; $x < $nmap->Header->MapSizeX; $x++)
	for ($y = 0; $y < $nmap->Header->MapSizeY; $y++)
		if ($x == 0 || $x == $nmap->Header->MapSizeX - 1 || $y == 0 || $y == $nmap->Header->MapSizeY - 1)
			$nmap->Bricks[$x][$y] = 228;

// респавн в левом нижнем углу
$nmap->Bricks[1][$nmap->Header->MapSizeY - 2] = SimpleObject::Respawn();

// установим в правом нижнем углу портал, с телепортом в левый нижний угол
$obj = SpecialObject::Teleport
(
	$nmap->Header->MapSizeX - 2, // x
	$nmap->Header->MapSizeY - 2, // y
	2, // goto x
	$nmap->Header->MapSizeY - 2 // goto y
); 

$nmap->Objects[] = $obj; // добавить портал в массив объектов

$nmap->SaveMap();

可以从演示中提取并保存 .mapa 地图

$nmap = new NFKMap("demo.ndm");
$nmap->LoadMap();

// хеш содержимого карты
$filename = md5( $nmap->GetMapBytes() );

$nmap->SaveMap($filename);

内存使用

在非常大的地图上,可能需要大量内存来创建图像。因此,在脚本中最好移除内存限制,或将它设置为最大值。

ini_set('memory_limit', '-1');
ini_set('memory_limit', '256M');

示例大地图的内存使用情况:http://ge.tt/5uyLLIW/v/0

  • 加载地图前 0.7 MB
  • 加载地图到内存后 5.7 MB
  • 加载资源(调色板和对象图片)后 6.7 MB
  • 使用 imagecreatetruecolor 创建 7776x3888 px 大小的地图层后 151 MB
  • 绘制所有对象后 151 MB
  • 通过 imagepng 保存图像后 237 MB

使用 memory_get_peak_usage 函数进行测量


地图格式分析