GameStart 通过在我们的库中查找入口点类来调用相应的接口启动我们的应用程序。一旦它找到了入口点,它会调用三个函数来替换掉它自己的应用转向执行我们的游戏循环。游戏入口点对于 GameStart 来说就像ActorPluginRegistry 对于 ActorLibrary 一样。游戏入口点有以下三个函数:
1. Initialize() – 传递任何命令行参数。通常我们可以设置并获取任何我们想要的参数,
除此之外,该函数也是我们进行系统配置工作的地方,这些配置工作需要运行其它
任何工作之前执行,但不要在这里做任何游戏管理的事情,究竟是否需要重写该函
数取决于我们的需要。
2. CreateGameManager() – 创建游戏管理器对象。
3. OnStartup() – 这是最有趣的地方。创建我们的所有游戏组件,加载我们的场景地图,
任何启动我们的游戏时要做的工作都在这里完成,这也是启动我们的游戏循环前要
1. Initialize() – 传递任何命令行参数。通常我们可以设置并获取任何我们想要的参数,
除此之外,该函数也是我们进行系统配置工作的地方,这些配置工作需要运行其它
任何工作之前执行,但不要在这里做任何游戏管理的事情,究竟是否需要重写该函
数取决于我们的需要。
2. CreateGameManager() – 创建游戏管理器对象。
3. OnStartup() – 这是最有趣的地方。创建我们的所有游戏组件,加载我们的场景地图,
任何启动我们的游戏时要做的工作都在这里完成,这也是启动我们的游戏循环前要
做的最后一件事。如果你已经写过 Delta3D 应用程序,你应该已经用过 dtABC::Application 了,这里为什么要用一个 GameEntryPoint 而不是 dtABC::Application 呢?最主要的原因是为了让你的系统可变得可配置。 Well, the primary reason is that itmakes your system configurable. GameStart 镜像了大多数游戏引擎拥有的安装类型,它们只用一个可执行程序来运行不同的游戏应用,而只需要将这些不同的游戏程序做成链接库就可以,先通过运行 GameStart 然后在来选择想要运行的任何游戏程序。
动态链接库中主要函数:
extern "C" XX_EXPORT dtGame::GameEntryPoint* CreateGameEntryPoint()
{
return new TutorialGameEntryPoint;
}
/
/
extern "C" XX_EXPORT void DestroyGameEntryPoint(dtGame::GameEntryPoint* entryPoint)
{
delete entryPoint;
}