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

陈子昂 · 2019年12月08日 · 最后由 陈子昂 回复于 2019年12月09日 · 1732 次阅读

前言

常规的代码路径跨平台处理和一些类库 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 这块开销基本很小。
主要是对于基础代码可以有其他运用的思想,还有推荐用三目或者叫三元方程式来编写代码。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册