饥荒Mod 开发(十五):小地图显示物品

饥荒Mod 开发(十四):制作屏幕弹窗

本篇源码
饥荒中按下Tab键可以显示地图,刚开始进入游戏的时候地图是未探索状态,所以我们并不知道地图上面的物品分布情况。并且地图上只会显示很少一部分的物品,比如树枝,草,浆果这些会显示,但是牛,胡萝卜,蜘蛛等等都是不会显示的。

显示全图

可以在modmain.lua 文件中增加下面代码,进入游戏之后就可以直接显示全图了

-- 定义一个函数,用于显示完整的地图
local function ShowFullMap(inst)
    -- 在0.001秒后执行以下操作
    inst:DoTaskInTime( 0.001, function() 
        -- 查找带有"minimap"标签的第一个实体,并将其赋值给minimap
        minimap = TheSim:FindFirstEntityWithTag("minimap")
        -- 在minimap上调用MiniMap:ShowArea方法,显示一个大范围的区域
        minimap.MiniMap:ShowArea(0,0,0,40000)
    end)
end

-- 在模拟器后初始化时添加一个函数
-- 这个函数会在世界构造完成后被调用
AddSimPostInit(function(inst)
   -- 调用ShowFullMap函数,显示完整的地图
   ShowFullMap(inst)
end)

显示牛的位置

2.1 准备贴图图片

默认的时候打开大地图并不会显示牛的位置,为了能显示牛我们需要一张png的贴图, 64*64像素, 32 bit。将图片放到
images/inventoryimages 目录下
饥荒Mod 开发(十五):小地图显示物品_第1张图片

2.2 编译生成贴图

工具的使用可以参考 饥荒Mod 开发(三):资源工具使用, 我们先cd 到工具目录下,然后执行一下脚本

PS D:\WeGameApps\rail_apps\饥荒:单机版(2000013)\mods\pigpet> & 'h:\Don''t Starve Mod Tools\ds_mod_tools\build\win32\mod_tools\autocompiler.exe' "D:\WeGameApps\rail_apps\饥荒:单机版(2000013)\mods\pigpetfood"

Atlasing D:\WeGameApps\rail_apps\饥荒:单机版(2000013)\mods\pigpetfood\images\inventoryimages\beefalo.png npot: False
Atlasing[################################] 1/1
dest_filename D:\WeGameApps\rail_apps\饥荒:单机版(2000013)\mods\pigpetfood\images\inventoryimages\beefalo.tex ROOT:D:\WeGameApps\rail_apps\饥荒:单机版(2000013)
D:\WeGameApps\rail_apps\饥荒:单机版(2000013)\mods\pigpetfood\images\inventoryimages\lightsword.xml is up to date.
D:\WeGameApps\rail_apps\饥荒:单机版(2000013)\mods\pigpetfood\images\inventoryimages\pigpetfood.xml is up to date.
D:\WeGameApps\rail_apps\饥荒:单机版(2000013)\mods\pigpetfood\anim\lightsword.zip is up to date.

脚本执行完之后,会打包 贴图文件
饥荒Mod 开发(十五):小地图显示物品_第2张图片

2.3 显示 牛 的位置

拦截 牛的创建过程,设置牛的位置

-- 定义资源,包括图片和图集
Assets = 
{
    Asset( "IMAGE", "images/inventoryimages/beefalo.tex" ), -- 加载图片资源
    Asset( "ATLAS", "images/inventoryimages/beefalo.xml" ), -- 加载图集资源
}

-- 添加小地图图集
AddMinimapAtlas("images/inventoryimages/beefalo.xml")

-- 对"beefalo"预制物体进行后初始化
AddPrefabPostInit("beefalo", function(inst)
    -- 添加小地图实体
    local minimap = inst.entity:AddMiniMapEntity()
    -- 设置小地图图标
    minimap:SetIcon( "beefalo.tex" )
end)


地图上可以用相同的方法显示任何的 物品,代码很简单。

你可能感兴趣的:(饥荒Mod,lua,游戏,饥荒,饥荒Mod)