新逻辑系统New Logic System
自Unigine 2.2版本以来,C++ 和 C# 应用程序的逻辑实现具有不同的方法。
从现在开始,不必再与引擎中的主循环发生冲突,引擎会提供应当被继承的类。
这些类的逻辑与运行脚本形同:
- WorldLogic class 与 world script具有相同的逻辑。
- SystemLogic class 与 system script具有相同的逻辑。
- EditorLogic class与 editor script具有相同的逻辑。
在相当于脚本的方法之后,新类中的方法会被引擎自动进行调用。
本文基于读者已经了解下列话题的相关知识而创作。请在开始之前阅读这些内容:
创建新项目时,所有所需的类会自动从相应的新逻辑系统类中得以继承。
发生的根本变化#
在Unigine的早期版本中,需使用my_update(), my_render(), my_swap() 函数(在开发 C++/C# 应用程序时)来中断引擎的主循环。下方是这种动作过程的一段代码示例:
while (engine->isDone() == 0) {
// 在主循环中更新
engine->update();
// 应用程序更新
my_update();
// 在主循环中进行渲染
engine->render();
my_render();
// 在主循环中进行调换
engine->swap();
my_swap();
}
当引擎::update()内的所有函数执行以后,引擎会调用这些函数:
现在应使用继承的WorldLogic, SystemLogic, EditorLogic类来创建新的类并在内部执行您自己的方法(此处为一个AppWorldLogic.h的示例):
#include <UnigineLogic.h>
#include <UnigineStreams.h>
class AppWorldLogic : public Unigine::WorldLogic {
public:
AppWorldLogic();
virtual ~AppWorldLogic();
virtual int init();
virtual int shutdown();
virtual int destroy();
virtual int update();
virtual int render();
virtual int flush();
virtual int save(const Unigine::StreamPtr &stream);
virtual int restore(const Unigine::StreamPtr &stream);
};
在对应的世界脚本方法如 init(), update(),等之后,引擎会调用所有得以实施的WorldLogic类中的函数。
您应当使用这些方法(应为这些为虚拟方法),创建这些类的实例并传送给引擎的主函数:
#include <UnigineEngine.h>
#include "AppSystemLogic.h"
#include "AppWorldLogic.h"
#include "AppEditorLogic.h"
using namespace Unigine;
#ifdef _WIN32
int wmain(int argc,wchar_t *argv[]) {
#else
int main(int argc,char *argv[]) {
#endif
AppSystemLogic system_logic;
AppWorldLogic world_logic;
AppEditorLogic editor_logic;
Unigine::EnginePtr engine(UNIGINE_VERSION,argc,argv);
engine->main(&system_logic,&world_logic,&editor_logic);
return 0;
}
最新更新:
2021-04-09
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)