游戏测试 文件路径的斜杠来判断系统

陈子昂 · December 08, 2019 · Last by 陈子昂 replied at December 09, 2019 · 744 hits

前言

常规的代码路径跨平台处理和一些类库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平台会自动转义。
以上为一个小技巧的分享。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 6 条回复 时间 点赞

各个语言大多都有判断操作系统的api? 所以用斜杠的意义在于?
另外cygwin这种怎么算?

所以这里列举的只有lua没有这种基本功能😂
node.js有api
如果是说浏览器js只能看ua来猜了

我觉得不是 中国人,不能意味这他就是美国人,因为这世界还有 英/法/德。。。。;除非前提是讨论范围就是这俩国;

你是老顽童么。。。不是可以直接调用接口么。。。

lombok不是这么用的

槽神 回复

lombok没写上去。写上去怕用idea的没安装插件,复制过去运行就抛错了。

统一回复下哈,意义是不大的,api这块开销基本很小。
主要是对于基础代码可以有其他运用的思想,还有推荐用三目或者叫三元方程式来编写代码。

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up