最近E3,微软说可以在任何region玩任何语言的游戏了。换一个语言么,听起来没有那么复杂,其实操作起来还得是从软件工程初期就好好计划。

Windows在很长一段时间,你安装完了,就不能换语言了。大学的时候用Ubuntu觉得,能随时切换语言真方便,后来Mac也是。

最近遇上了一个问题,就某知名游戏因为有多种版本的英文支持,比如英国英语和美国英语,有些用户用美国英语的手机,想要玩英国英语的内容。本来没啥大不了,但是估计涉及到一些文化版权习惯的东西,IP拥有方非常执着地要增加游戏中更换语言的功能。

本来吧,游戏的开发,语言是独立于系统语言的。可是到了App时代,大家会假设很多东西,比如利用系统的语言作为游戏语言。这对于日语、韩语、德语国家可能不是个问题。但是法语分法国法语和加拿大法语,葡萄牙语也分葡萄牙葡萄牙和巴西葡萄牙,西班牙语就更种了。而且随着时代的发展,人们在全球旅游工作学习生活,完全有可能我用英文的系统,但我玩三国志这种用中文吧。所以必须要地区和语言分开才是好的解决方案。

Strings和Assets都是在load的时候根据语言选项选去的文件,其实我们就set一个状态字,然后安全的重启就行。对于windows上的应用似乎不难,可是苹果不让这么做,你app的life cycle都已经在app delegate里面定好了。

按理说,大家可以把所有的游戏update单独拿出来,做一套lifecycle,再做一个state machine转换。

不过这个游戏由于时间久远,加上来来回回添加了很多分析和追踪用户行为的组建,把整个app delegate的结构已经变得非常nasty。如果我重启了主进程,没有办法安全的重置这些store啊,tracking啊的状态字,他们在其它线程跑着。

试图删除root view然后重新建立,就发现很多游戏写的时候内存管理并特别理想。导致很多东西该handle该free的没弄干净,重建了之后指针就乱了。

这就是App时代的软件危机,首先你受制于人家定好的起承转合,只是在填满每一个框架函数里的内容。当然不管怎么样的结构,要做高质量代码,还都是得独立于app life cycle的自己的gameplay life cycle。再加上,苹果iterate的速度比所有开发者都快,今年是iOS 10,你什么都不做都会有很多classes broke。你再好的设计模式,发现接口和底层的类一直在变,也是让人抓狂。不过好的游戏,比如某赛车游戏,从PC平台移植而来,C++的部分很solid,图形引擎数学会自动scale。而对于现代游戏,有非常多的tracking,MTX store,note/alert,网络传输,UI,这些都是在每一版iOS都在变,维护起来不可能轻松。什么东西和人类end user打交道,就没法确定恒久的解决方案,这些地方就得一年一年改。

Anyway,写好代码,做好设计,考虑语言支持,得从一开始就计划!

Localization要从第一天开始计划的更多相关文章

  1. 学习之学习--混沌大学商学院--第一课--HHR计划

    <学习之学习> 第一课:混沌初开 李善友 1,课程目标:建立个人的多元思维模型,帮助企业找到创新驱动的增长战略. 2,创新:第二曲线创新,创新理论之父熊彼特. 3,核心课:第二曲线,非连续 ...

  2. Qt 学习第一步 做计划和确定目标

    接下来開始一步步深入学习Qt. 学习的第一步是整理资料,也就是找书和sample. 逛了一些论坛,推荐以下3本书 1> C++ GUI programming with Qt 4(2nd Edi ...

  3. 《创业者技能树》--创业课--14天复盘第一课candy2--HHR计划

    1,厉害的人是如何分析问题的?

  4. 谈一谈SQL Server中的执行计划缓存(上)

    简介 我们平时所写的SQL语句本质只是获取数据的逻辑,而不是获取数据的物理路径.当我们写的SQL语句传到SQL Server的时候,查询分析器会将语句依次进行解析(Parse).绑定(Bind).查询 ...

  5. linux系统的任务计划crontab使用详解

    linux系统的任务计划crontab使用详解 其实大部分系统管理工作都是通过定期自动执行某一个脚本来完成的,那么如何定期执行某一个脚本呢?这就要借助linux的cron功能了. 关于cron任务计划 ...

  6. Oracle 11g 执行计划管理1

    1. 执行计划管理的工作原理 1.1控制执行计划的稳定性 11g之前,可以使用存储大纲(stored outline)和SQL Profile来固定某条SQL语句的执行计划,防止由于执行计划发生变化而 ...

  7. sql2008 计划自动创建数据库分区【转】

    本文转自:http://jingyan.baidu.com/article/6b97984d9a26ec1ca3b0bf77.html sql2008 计划自动创建数据库分区 固定增量的数据,自动创建 ...

  8. SpirngMVC入门第一天

                                         SpringMVC第一天 1.   计划 第一天 1.SpringMVC介绍 2.入门程序 3.SpringMVC架构讲解 a ...

  9. Linux计划任务及压缩归档(week2_day1)--技术流ken

    计划任务介绍 我们可以通过一些设置.来让电脑定时提醒我们该做什么事了.或者我们提前设置好,告诉电脑你几点做什么几点做什么,这种我们就叫它定时任务.而遇到一些需要执行的事情或任务.我们也可以通过命令来告 ...

随机推荐

  1. LNAMP服务器环境搭建(手动编译安装)

    LNAMP服务器环境搭建(手动编译安装) 一.准备材料 阿里云主机一台,操作系统CentOS 6.5 64位 lnamp.zip包(包含搭建环境所需要的所有软件) http://123.56.144. ...

  2. JavaEE Log4j

    1.Log4j是Apache的一个开放源代码项目,可以通过一个配置文件来灵活的进行配置,而不需要修改应用的代码. 2.Log4j有三个主要部件组成: 记录器:按照布局中指定的格式把日志信息写入一个或多 ...

  3. 【Python①】python简介,安装以及配置

    今天开始学习python,将一些心得和知识点记录下来,如有疏漏或表达问题,欢迎指正.后面所有代码均为Python 3.3.2版本(运行环境:Windows7)编写. 附:2014年8月TIOBE编程语 ...

  4. 深入了解 JavaScript 中的 for 循环

    在ECMAScript5(简称 ES5)中,有三种 for 循环,分别是: 简单for循环 for-in forEach 在2015年6月份发布的ECMAScript6(简称 ES6)中,新增了一种循 ...

  5. JavaScript 字符串常用操作

    JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...

  6. Coding源码学习第二部分(FunctionIntroManager.m)

    接上篇.上篇有一个细节忘了写,在Coding_iOS-Info.plist 里面添加了一个key 是 Status bar is initially hidden  Value 是 YES,在appl ...

  7. Eclipse 项目中有红色感叹号,怎么办?

    /** * JDK1.5中增加了自动拆装箱的语言特性,在基本类型和包装类型之间可以相互地转换和运算. * 大家也都知道Java中==运算符是比较两个对象间的引用是否相同.在自动拆装箱与“==”运算符之 ...

  8. 【译】Permissions Best Practices Android M权限最佳做法

    Permissions Best Practices PreviousNext In this document Consider Using an Intent Don't Overwhelm th ...

  9. JS技术大全

    事件源对象:event.srcElement.tagName  event.srcElement.type 捕获/释放:event.srcElement.setCapture();  event.sr ...

  10. android 加载中、无网络、无数据、出错 四种状态的代码封装

    package com.weavey.loading.lib;import android.content.Context;import android.content.res.TypedArray; ...