oops-framework框架 之 多语言设置文本、精灵和骨骼动画

news2024/11/18 14:38:10

引擎: CocosCreator 3.8.0

环境: Mac

Gitee: oops-plugin-excel-to-json

注: 作者dgflashoops-framework框架QQ群: 628575875


简介


作者dgflashoops-framework的框架中提供了多语言,主要用于对文本、图片、骨骼动画的支持。

不同国家内容的展示,会进行分门别类的标记,比如:

  • zh 代表中文
  • en 代表英语

框架提供了两种方式用于配置多语言内容:

  • …/resources/language 配置json、spine、texture等不同文件目录,设置不同语言的具体信息
    请添加图片描述

  • excel/Language.xlsx 配置多语言的文本内容
    请添加图片描述

注: 针对于excel的使用可参考博客: oops-framework框架 之 Excel转Json

在CocosCreator中使用多语言只需要在属性检查器 中增加对应的多语言组件即可。
请添加图片描述

文本设置如下:
请添加图片描述

精灵设置如下:
请添加图片描述

骨骼动画的设置如下:
请添加图片描述

注: 设置文本、精灵、骨骼动画的关键字段均为Data ID

在添加对应的多语言组件后,如果语种变换,框架会自动下载对应的语言包内容,并进行页面更新。


Language


作者dgflash提供的oops-framework框架中, 多语言的主要入口是:

// ../oops-plugin-framework/assets/core/Oops.ts
export class oops {
    /** 多语言模块 */
    static language: LanguageManager;
}

多语言的初始化主要在项目启动加载必备资源中执行的,主要代码如下:

// ../initialize/bll/InitRes.ts
entityEnter(e: Initialize): void {
	var queue: AsyncQueue = new AsyncQueue();

	// 加载自定义资源
	this.loadCustom(queue);
	// 加载多语言包
	this.loadLanguage(queue);
	// ...

	queue.play();
}

// 主要用于加载多语言对应的字体文件,比如ttf等
private loadCustom(queue: AsyncQueue) {
  queue.push(async (next: NextFunction, params: any, args: any) => {
    oops.res.load("language/font/" + oops.language.current, next);
  });
}

// 主要用于下载对应语种资源
private loadLanguage(queue: AsyncQueue) {
  queue.push((next: NextFunction, params: any, args: any) => {
    // 从本地存储中获取语言,如果为空则默认中文
    let lan = oops.storage.get("language");
    if (lan == null || lan == "") {
      lan = "zh";
      oops.storage.set("language", lan);
    }
    // 设置语言包路径
    oops.language.pack.json = oops.config.game.languagePathJson;
    oops.language.pack.texture = oops.config.game.languagePathTexture;
    // 加载语言包资源
    oops.language.setLanguage(lan, next);
  });
}

框架很好的为我们提供了多语言的初始化及资源的下载相关。

oops.language的主要实现是LanguageManager,它对外提供的主要参数或接口:

参数或接口说明
languages设置或获取支持的语言列表,比如: [“zh”, “en”]等
default设置默认语言
current获取当前语言
pack获取当前语言包,主要包括Json、texture、spine等资源目录相关
isExist()检测指定语种是否存在
setLanguage()设置当前语言,语言包下载结束后,会有回调,true表示成功; false表示失败
getNextLang()获取下一个语言
getLangByID()获取langId获取语言的内容,用于文本
loadLanguageAssets()下载指定语言的资源,包括Json、texture、spine等
releaseLanguageAssets()释放不需要的语言包资源

该管理类,主要管理的文件有:

  • LanguageData 用于根据languageId 获取文本对应语种的内容
  • LanguagePack 用于下载或释放对应语种的纹理、动画、Json、Excel表内容
  • LanguageLabel/LanguageSpine/LanguageSprite 多语言文本、骨骼动画、精灵组件,既然能在属性检查器中加载,他们都继承于Component

LanguageData主要用于根据文本设置的多语言字段获取内容,主要实现代码如下:

export class LanguageData {
  /** 当前语言 */
  static current: string = "";
  /** 语言JSON配置数据 */
  static json: any = {}
  /** 语言EXCEL中的配置数据 */
  static excel: any = null!;

  /*
  通过多语言关键字获取语言文本,注意:
 	1、先获取language/json中的配置数据,如果没有则获取config/game/Language配置表中的多语言数据
  2、config/game/Language配置表可选使用,不用时不创建同名配置表即可
  3、config/game/Language配置表使用oops-plugin-excel-to-json插件生成
  */
  public static getLangByID(labId: string): string {
    var text = this.json[labId];
    if (text) {
      return text;
    }

    if (this.excel) {
      var record = this.excel[labId];
      if (record) {
        return record[this.current];
      }
    }

    return labId;
  }
}

注:可爱的作者dgflash已经告知获取内容的方式,因此看个人习惯,配置Excel表或Json格式都支持


使用示例


作者dgflash针对于多语言已经在oops-framework框架中做了有效的处理。在项目中我们可能需要做的事情就是:

  1. 通过配置,设置项目支持的语言列表
  2. 切换语言,并移除不需要的语言

针对于第一个问题,需要打开: resources/config.json, 新增数据:

{
  "config": {
    "version": "1.0.5",
    "package": "com.oops.game",
    "localDataKey": "oops",
    "localDataIv": "framework",
    "httpServer": "http://192.168.0.150/main/",
    "httpTimeout": 10000,
    "frameRate": 60
  },

  "languageList": ["zh", "en", "tw"],   //   
  "language": {
    "type": [
      "zh",
      "en"
    ],
    "path": {
      "json": "language/json",
      "texture": "language/texture"
    }
  }
}

主要代码如下:

// 通过config.json自定义配置语言列表
let languageList = oops.config.game.data.languageList;
if (languageList && languageList.length > 0) {
  oops.language.languages = languageList;
}

// 改变语种
let curLanguage = oops.language.current;
if (curLanguage !== "zh") {
  oops.language.setLanguage("zh", (sucess) => {
    if (sucess) {
      oops.language.releaseLanguageAssets("en");
    }
  })
}

注:如果想学习i18n的多语言,可参考博客: cocosCreator 之 i18n多语言插件的使用

再次感谢作者dgflash的分享,作者CSDN博客: dgflash CSDN

最后,祝大家学习和生活愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1298625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Verilog基础:寄存器输出的两种风格

相关文章 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 Verilog中的寄存器操作一般指的是那些对时钟沿敏感而且使用非阻塞赋值的操作。例如状态机中的状态转移,实际上就是一种寄存器操作,因为这相…

【docker 】centOS 安装docker

官网 docker官网 github源码 卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 安装软件包 yum install -y yum-utils \device-mapper-persistent-data…

自下而上-存储全栈(TiDB/RockDB/SPDK/fuse/ceph/NVMe/ext4)存储技术专家成长路线

数字化时代的到来带来了大规模数据的产生,各行各业都面临着数据爆炸的挑战。 随着云计算、物联网、人工智能等新兴技术的发展,对存储技术的需求也越来越多样化。不同应用场景对存储的容量、性能、可靠性和成本等方面都有不同的要求。具备存储技术知识和技…

基于 Gin 的 HTTP 中间人代理 Demo

前面实现的代理对于 HTTPS 流量是进行盲转的,也就是说直接在 TCP 连接上传输 TLS 流量,但是我们无法查看或者修改它的内容。当然了,通常来说这也是不必要的。不过对于某些场景下还是有必要的,例如使用 Fiddler 进行抓包或者监控其…

Flink 本地单机/Standalone集群/YARN模式集群搭建

准备工作 本文简述Flink在Linux中安装步骤,和示例程序的运行。需要安装JDK1.8及以上版本。 下载地址:下载Flink的二进制包 点进去后,选择如下链接: 解压flink-1.10.1-bin-scala_2.12.tgz,我这里解压到soft目录 [ro…

redis之缓存穿透,击透,雪崩~

以下为一个我们正常的缓存流程: 缓存雪崩: 在双十一的时候,淘宝的首页访问量是非常大的,所以它的很多数据是放在redis缓存里面,对应redis中的key,假设设置了缓存失效的时间为3小时,超过这三个小…

视觉学习笔记12——百度飞浆框架的PaddleOCR 安装、标注、训练以及测试

系列文章目录 虚拟环境部署 参考博客1 参考博客2 参考博客3 参考博客4 文章目录 系列文章目录一、简单介绍1.OCR介绍2.PaddleOCR介绍 二、安装1.anaconda基础环境1)anaconda的基本操作2)搭建飞浆的基础环境 2.安装paddlepaddle-gpu版本1)安装…

区块链实验室(29) - 关闭或删除FISCO日志

1. FISCO日志 缺省情况下,FISCO启动日志模块,日志记录的位置在节点目录中。以FISCO自带案例为例,4节点的FISCO网络,24个区块产生的日志大小,见下图所示。 2.关闭日志模块 当节点数量增大,区块高度增大时&…

利用Wix打包安装包

利用Wix打包安装包 背景具体步骤1、安装 WiX Toolset 工具集2、安装 WiX Toolset 系列 Visual Studio 插件3、创建Wix工程4、添加工程文件5、修改Product元素6、修改Package元素7、修改MajorUpgrade元素8、修改Media属性9、设置安装引导界面10、添加WPF项目文件11、添加桌面快捷…

资源三号卫星数字表面模型库

资源三号卫星数字表面模型库(简称ChinaDSM-China Digital Surface Model)是以资源三号卫星立体影像为数据源,采用自主知识产权的基于多基线、多匹配特征的地形信息自动提取技术,快速处理和生产提取的高精度、高保真15米格网数字表…

排序算法之四:直接选择排序

1.基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。 2.直接选择排序 在元素集合array[i]--array[n-1]中选择关键码最大(小)的数据元素 若它不是这组元素中的…

第 119 场 LeetCode 双周赛题解

A 找到两个数组中的公共元素 模拟 class Solution { public:vector<int> findIntersectionValues(vector<int> &nums1, vector<int> &nums2) {unordered_set<int> s1(nums1.begin(), nums1.end()), s2(nums2.begin(), nums2.end());vector<…

keepalived+lvs 对nginx做负载均衡和高可用

LVS_Director KeepAlivedKeepAlived在该项目中的功能&#xff1a; 1. 管理IPVS的路由表&#xff08;包括对RealServer做健康检查&#xff09; 2. 实现调度器的HA http://www.keepalived.orgKeepalived所执行的外部脚本命令建议使用绝对路径实施步骤&#xff1a; 1. 主/备调度器…

《深入浅出进阶篇》洛谷P3197 越狱——集合

洛谷P3197 越狱 题目大意&#xff1a; 监狱有 n 个房间&#xff0c;每个房间关押一个犯人&#xff0c;有 m 种宗教&#xff0c;每个犯人会信仰其中一种。如果相邻房间的犯人的宗教相同&#xff0c;就可能发生越狱&#xff0c;求有多少种状态可能发生越狱。 答案对100,003 取模。…

Python 网络爬虫(三):XPath 基础知识

《Python入门核心技术》专栏总目录・点这里 文章目录 1. XPath简介2. XPath语法2.1 选择节点2.2 路径分隔符2.3 谓语2.4 节点关系2.5 运算符3. 节点3.1 元素节点(Element Node)3.2 属性节点(Attribute Node)

MongoDB——基本概念+docker部署+基本命令

1.MongoDB相关概念 业务应用场景 MongoDB简介 BSON二进制的JSON 数据类型 MongDB的特点 2.单机部署 windows上的安装启动 windows版本的直接去官网下载即可&#xff0c;这里的安装运行我试了一次没有成功。干脆不用了&#xff0c;反正以后也不会在windows系统上用的这个 li…

NSSCTF第15页(1)

[CISCN 2019华东南]Web4 点击read something&#xff0c;发现访问了百度 读到了源码 就是ssrfflask import re, random, uuid, urllib from flask import Flask, session, requestapp Flask(__name__) random.seed(uuid.getnode()) app.config[SECRET_KEY] str(random.rando…

JSON字符串转泛型对象

JSON字符串转泛型对象 以下问题只仅限于博主自身遇到&#xff0c;不代表绝对出现问题 相关类展示&#xff1a; 参数基类 public class BaseParams { }基类 public abstract class AbstractPush<Params extends BaseParams> {protected abstract void execute(Params…

Shell数组函数:数组——数组和循环(四)

使用数组统计&#xff0c;用户shell的类型和数量 一、脚本编辑 [root192 ~]# vim shell.sh #!/bin/bash declare -A shells while read ii dotypeecho $ii | awk -F: {print $7}let shells[$type] done < /etc/passwdfor i in ${!shells[]} doecho "$i: ${shells[$i]…

开源电子合同签署平台小程序源码/电子文件签字+在线合同签署系统源码/电子合同小程序源码

源码简介&#xff1a; 开源电子合同签署平台小程序源码&#xff0c;它是电子文件签字在线合同签署系统源码/电子合同小程序源码 目前商业端和开源端一致&#xff0c;免费开源状态&#xff01; 聚合市场上各类电子合同解决方案商&#xff0c;你无需一个一个的对接电子合同厂商…