• [游戏开发]为什么我坚持对拓展完全开放?


    本文是基于游戏开发进行讨论,我所使用的语言是脚本语言lua,所以此处拓展为mod,而拓展者为modder。

    设计模式

    设计模式中有一条叫做开闭原则,意思是:程序应该,对扩展开放,而对修改关闭。
    而对拓展完全开放原则却不一样,对拓展完全开放原则坚持,一切都可以被修改,包括原有的函数实现,原有的变量。
    这与设计模式中的开闭原则是相悖的,那么这种设计原则是好的吗?

    为什么选择对拓展完全开放

    为什么我选择对拓展完全开放?因为我是一名我的世界模组开发者,我知道modder们是怎么通过asm和反射等方法肆意修改java的类方法和字段。
    这种修改是极其复杂的,但是也是不可避免的,有需求就有市场,我的世界的种种特性,导致了asm成为大型mod开发不可或缺的工具。很多人也通过asm来处理不同mod之间的不兼容问题。

    为什么不选择对拓展完全开放

    为什么不选择对拓展完全开放?原因很简单,因为不稳定,想象一种情况,两个mod同时修改了同一份代码,但是他们却都毫不知情对方,这样子就容易导致游戏的崩溃。对拓展完全开放必须建立在一个有效的交流和管理的机制上面。

    为什么我选择对拓展完全开放

    为什么我选择对拓展完全开放?因为我做的游戏是开源的,一个开源的mod游戏,既然开源,玩家就可以自己修改源代码,与其让游戏变出很多版本,不如让游戏变得更加开放,所以我选择对拓展完全开放。

    我是怎么实现对拓展完全开放的

    所有函数均为储存在全局的表里,以便于mod对原有函数实现进行替换。
    所有变量均存放在全局的表里,以便于mod对原有变量实现进行修改。

    这样做有啥好处

    数据单独储存,游戏状态只与数据状态有关,有利于lua代码的热更新,也利于游戏的快存,快读。
    所有函数都能直接操控的任意变量,基于所有的mod最高权限,以求最简单的实现功能。
    易于模块化,所有模块均通过全局变量进行交互。
    易于书写。

    再谈设计

    我不知道我这样做耦合度高不高。
    我不知道我这样做好不好。
    我只是这么想了,就这么做了。
    希望这么做不要出大问题。

    最后,向所有开源者和游戏模组作者表示最高的敬意,你们做的是世界上最伟大而美好的事情。

  • 相关阅读:
    Android4.0 以后不允许在主线程进行网络连接
    关于升级linux下apache
    事物复制中大项目(Large Article)出问题如何快速修复
    国企银行面试总结
    Git命令详解(一)-个人使用
    函数体的规模要小,尽量控制在 50 行代码之内
    函数的功能要单一,不要设计多用途的函数
    在函数体的“出口处”,对 return 语句的正确性和效率进行检查
    在函数体的“入口处”,对参数的有效性进行检查
    有些场合用“引用传递”替换“值传 递”可以提高效率
  • 原文地址:https://www.cnblogs.com/jhy16193335/p/11201886.html
Copyright © 2020-2023  润新知