常规的代码路径跨平台处理和一些类库 API 只能作用到指定平台并且有更优质支持的,这个全行业都需要的。
在游戏场景中有不少需要通过不同操作系统不同处理的,比如以下:
1.windows 平台下不区分文件和函数等大小写,引用不会失效,但一旦运行时环境变化就需要触发检查,当然很多语言也有可以去掉 windows 特性的类库。
2.文件拷贝和创建方式在不同平台下的差异,比如时间差异。
3.so 文件和 dll 文件不同平台下载入不同的文件格式。
4.资源混淆在不同平台下区分处理等等。
等等等等等等
说了这么多,回到主题,只使用各语言的内置库通过 文件路径的斜杠 来区分是什么平台的,截取部分代码,还有就是三目/三元方程式来编写代码。
不同语言如下,python 推荐在实例变量区域,虽然 os.sep 打印出来时"\",但为啥会判断\,这个如果不了解的可以自行学习下啊。
python os.name 本身也可以会比 os.sep 简单,这里只是 Demo 例子,可以无视。
class Global:
"""驱动器全局设置"""
def __init__(self):
self.os_name = self.set_os_name()
def set_os_name(self):
return "linux" if os.sep != "\\" else "windows"
if __name__ == '__main__':
gob = Global()
print(gob.__dict__["os_name"]) #后面可以通过实例变量区域缓存字典来使用
java 如下,设置器和访问器可以使用 Lombok 插件
/**
* 游戏安卓馄饨实验adb工具类
*/
public class AdbUtils {
public String getOsName() {
return osName;
}
public void setOsName(String osName) {
this.osName = osName;
}
private String osName;
/**
* 设置当前工程系统环境用于其他逻辑处理
*/
public final void setGlobalOsName(){
String osResult = File.separator.equals("/")?"linux":"windows";
setOsName(osResult);
}
public static void main(String[]args){
AdbUtils adbUtils = new AdbUtils();
adbUtils.setGlobalOsName();
System.out.println(adbUtils.getOsName());
}
}
Lua 游戏产业当年最主流的语言
--通过文件分隔符来判断系统
local function get_os_name()
return "\\" == package.config:sub(1,1) and "windows" or "linux"
end
local os_name = get_os_name()
print(os_name)
Js 因为文件斜杠特性,统一用反斜杠,windows 平台会自动转义。
以上为一个小技巧的分享。