Creator 切换语言升级版


Creator 切换语言升级版

之前写过一版切换图片语言的国际化,但是需要通过刷新页面来完成,由于facebook messager不支持刷新页面重载游戏,所以升级如下:

  1. 流程为 切换语言 -> 切换到Loading场景重载语言 -> 进入主页面

  2. Loading场景

  • 判断是否是第一次打开游戏还是游戏内重载

  • 第一次打开游戏则loading所有其他资源等,包括当前语言图片

  • 游戏内重载则只重新加载新语言图片

目前只实现了两个语言的切换,自行扩展即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
let enUrl = "texture/Language_EN";
let zhUrl = "texture/Language_ZH";
let useMap = false; // 是否使用缓存的Map资源
if(!this._mAtlasMap) {
this._mAtlasMap = {"en":{},"zh":{}}; // 用于缓存加载到的资源
}else{
useMap = true;
}
cc.loader.loadRes(enUrl, cc.SpriteAtlas, (err, enAsset) => {
cc.loader.loadRes(zhUrl, cc.SpriteAtlas, (err, zhAsset) => {
for (let key in enAsset._spriteFrames) {
let enSF = enAsset._spriteFrames[key];
let zhSF = zhAsset._spriteFrames[key];
if(!useMap){
this._mAtlasMap["en"][key] = {};
this._mAtlasMap["zh"][key] = {};
}
for (let i in enSF) {
if(!useMap){
if(this.language == "zh"){
this._mAtlasMap["en"][key][i] = enSF[i];
this._mAtlasMap["zh"][key][i] = zhSF[i];
}else{
this._mAtlasMap["zh"][key][i] = enSF[i];
this._mAtlasMap["en"][key][i] = zhSF[i];
}
}
if(i == "_originalSize"){
enSF[i] = this._mAtlasMap["en"][key]["_originalSize"];
}else if (!(enSF[i] instanceof Function) && i != "isValid" && i != "nativeUrl" && i != "_uuid") {
enSF[i] = this._mAtlasMap[this.language][key][i];
}
}
}
// 切换到主界面
...
});
});