前言

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


↙↙↙阅读原文可查看相关链接,并与作者交流