c++ - 如何创建新功能并在游戏运行时执行?

标签 c++ cocos2d-x-3.x

我正在使用 Cocos2d-x v3.17 制作游戏。

我希望玩家在游戏场景中编写他们的代码,然后他们按下提交,然后游戏执行它。

我想将他们的代码保存到一个文件中并从中调用一个函数,所以我创建了 2 个这样的文件:

//PlayerCode.h
#pragma once
int PlayerFunction(int a, int b);

//PlayerCode.cpp
#include "PlayerCode.h"
int PlayerFunction(int a, int b){ return 0;}

然后我运行游戏。

在主场景中,当玩家按下提交时,我根据他们的代码重写.cpp 文件,假设它变成:

//PlayerCode.cpp
#include "PlayerCode.h"
int PlayerFunction(int a, int b){ return a+b;}

然后运行这个来执行播放器代码

try{
    int result = PlayerFunction(2,3);
    CCLOG("%d",result);
}
catch (string somethingError){
    CCLOG("%s",somethingError);
}

但不管玩家写了什么,结果总是 0。即使每次按下提交时 .cpp 文件都发生变化,程序也只会从第一个旧文件运行代码。

这就是我的所有问题,请帮助我解决它,或者如果您知道其他方法来执行此功能,请指导我。

谢谢。

最佳答案

C++ 是一种编译型语言,这意味着您不会在运行时直接读取任何源文件。如果您在应用程序运行时更改源代码并不重要,因为您还没有编译它。

您可以尝试的一件事是使用脚本语言并将其嵌入到您的 C++ 中。然后播放器可以使用该语言编写脚本,您可以运行该脚本。

在游戏中编写脚本的流行选择是 LUA 语言。

我建议你看一本用 C++ 编写游戏的书,比如 Game Coding Complete, Fourth Edition

关于c++ - 如何创建新功能并在游戏运行时执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54304312/

相关文章:

c++ - 使用引用类型的成员变量复制 C++ 类

ios - 是否可以使用 swift 3 将小型 cocos2d-x 3.2 游戏集成到现有的 IOS 应用程序中?

android - Cocos2d-x 3.14 Android崩溃

c++ - 如何检查 cocos2d-x v3.1 中的特定冲突? C++

ios - Cocos2d-x 按钮 - MenuItemSprite 与按钮

c++ - 编译cocos2d-x v3 IOS项目时出错,关于集成AdMob(IOS)框架

c++ - 使用 gmp mpz_pow_ui 的 mpz 类型溢出

c++ - 修改 unordered_set 中的值

c++ - 对已删除的数组进行指针运算仍然合法吗?

c++ - dllspec(dllimport) 和 dllspec(dllexport) 是什么意思