开启左侧

NCM & LMTR 自定义导视牌资源包制作流程

[复制链接]
mrt114514 作者认证 2 小时前

还没有账号?赶快去注册吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 mrt114514 于 2026-8-19 18:48 编辑

本教程仅适用于即将发布的 南滨创意3.1 以及 LMTR
自定义导视牌资源包
导视系统为乘客带来便利,自定义你的导视系统是必要的


JSON导视系统
先创建资源包基本格式,在
  1. assets/nanbin/signs.json
复制代码
中编写你的导视项,它大概是这样的
  1. {
  2.   "signs": [
  3.    {
  4.    "id": "nanbin_arrow",
  5.    "textureResource": "nanbin:textures/block/sign/arrow"
复制代码
接下来我来详细介绍一下它们各自的接口
1、"id"(必修)这是你的导视内容的唯一ID,应使用 英文小写 与 英文下划线“_“ 以及数字构成
2、"textureResource"(必修)你的显示图标
3、"backgroundColor":背景颜色(hex颜色)
4、"customText":显示文本
5、"flipTexture":翻转图标
6、"flipCustomText":文字靠右
7、"small":缩小图标
8、"textColor":文本颜色(原版指示牌不可用)
9、"textSize":文本大小(1.0为默认大小)(原版指示牌不可用)
10、"textBold":文本加粗(原版指示牌不可用)

JavaScript导视
首先,创建
  1. assets/nanbin/js_signs_config.json
复制代码
大概是这样的
  1. {
  2.    "scripts": [
  3.        {
  4.          "id": "example_clock",
  5.          "path": "assets/nanbin/js/example_clock.js",
  6.          "icon": "nanbin:textures/block/sign/js_icon.png",
  7.          "name": "js_sign.nanbin.example_clock"
  8.        }
  9. ]}
复制代码
1、"id"这是你的导视内容的唯一ID,应使用 英文小写 与 英文下划线“_“ 以及数字构成
2、"path"你的js文件位置
3、"icon":显示图标
4、"name":名称(可使用lang文件做翻译)



然后,制作你的js文件
首先,遵循nte的js三件套
  1. function create(ctx, state, sign) {
  2. }

  3. function render(ctx, state, sign) {
  4. }

  5. function dispose(ctx, state, sign) {
  6. }
复制代码
不同的是,最好不要随意使用print函数,它会打印到玩家的聊天框
然后,我们来介绍一下绘制函数:
1、文本绘制函数
Text.create()
   .pos(i * barW, barH)   //左上角顶点位置坐标
   .size(barW, h * 0.4)   //大小坐标
   .text("Hello World")   //绘制的内容
   .color(0xFF000000)   //绘制的文本颜色(hex)
   .scale(0.65)   //缩放(默认1.0)
   .centered()   //是否居中显示(没有的时候默认左对齐)
   .draw(ctx);

值得注意的是,我们会自动完成中英文的分割,想原版MTR一样用 “|” 分割开就行
2、材质绘制函数
  1. Texture.create()
  2.    
复制代码

3、图形绘制函数
  1. Rect.create()
复制代码
图形只提供了矩形,各位自己看吧

那么我们都提供了什么接口呢,各位自己看吧
  
api
  
屏幕数据 API
  
state
  
生命周期内的共享状态对象(create 创建、render 读取)
  
ctx
  
绘制上下文(世界单位坐标:x∈[0,getWidth()],y∈[0,getHeight()])  
  
Text / Texture / Rect / Line
  
绘制工具类

然后是数据接口
  
分类
  
  
API 方法
  
  
说明
  
  
屏幕信息
  
getScreenKey() / getScreenType()
屏幕唯一标识;类型:platform/route/exit/station/custom
getCellCount()
格数
getWidth() / getHeight()
渲染宽度 / 高度(世界单位)
getCellSize()
单格世界尺寸
getCellIndex() / getSignIds() /  getCellSignId(i)
格子槽位数据
getBackgroundColor() / getSelectedIds() /  getSelectedStationIds()
背景颜色、选中 ID、选中车站  ID
getPos()
方块坐标(出口定位用)
  
车站 / 线路
  
getStationName(platformId) /  getStationNames()
获取站台 ID 对应车站名称 / 获取全部车站名称
getRouteName(color) / getRouteName(color,  english)
中 / 英文线路名
getRouteNumber(key) / getRouteNumbers()
线路编号
getRouteDestination(color)
终点站
isLoopRoute(color)
是否环线
getSelectedColors() / getRouteColor(i)
线路颜色(ARGB)
  
出口
  
getExitCount() / getExitNumbers() /  getExitDestinations(i) / getExitInfo(i)
出口数量、出口编号、出口目的地、出口详情信息
  
时间 / 结果
  
getWorldTime() /  getFormattedTime("HH:mm")
世界时间 / 格式化时间输出
createResult(text, ...)
旧接口结果构造

需要注意的是,部分接口我们会提供屏幕,玩家可以直接打开它们,开发者也无需重写屏幕
考试完连夜把出卷人家里的锅换成不粘锅
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表