例如,人们如何让模组在游戏中发挥作用?
我所说的 mods 是指对最终可执行文件的添加。
如果我要制作游戏(使用编译语言),我是否可以允许自己或其他人在无需创建某种脚本语言的情况下对其进行添加。
我的想法:(这行得通吗?)
最佳答案
通常您会向模组编写者公开您的一些应用程序(游戏?)内部接口(interface)和对象。 mod 编写器将构建一个 dll,它使用这些对象和接口(interface)来做一些有用的事情。然后应用程序将动态加载 mod dll 并在必要时调用 mod 实现。
另一种思考方式是,假设您的游戏是一个操作系统(Windows),而您的 mod 是一个应用程序(Word)。操作系统提供了一些 API 来创建和管理窗口,应用程序在必要时使用它们。
因此,作为游戏开发者,您可以创建和分发以下界面:
//mod.h
class Mod {
//takes suggested damage as an arg and returns modified damage
virtual int takeDamage(int damage);
};
并指导用户提供导出函数来实例化和删除mod对象。
实现它:
//godmod.h
class GodMod : public Mod {
int takeDamage(int damage) { return 0; } // god mode!!
}
__declspec(dllexport) Mod *create_mod() { return new GodMode(); }
__declspec(dllexport) void delete_mod(Mod *mod) { delete mod; }
然后你必须加载 dll(Windows 上的
LoadLibrary
API),使用 create_mod
API 导出 delete_mod
和 GetProcAddress
符号。之后在游戏中的某个地方,您将使用 create_mod
实例化 mod,并在需要时使用它:int damage = 100; //original damage
for (int i = 0; i < mods_count; i++) {
damage = mods[i]->tageDamage(damage);
}
decrease_health(damage);
毕竟,您必须从相应的 dll 中使用
delete_mod
发布 mod。关于c++ - mods是如何工作的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4978568/