c++ - 在 C++ 中,GameMaker类似于功能

  显示原文与译文双语对照的内容
0 0

年轻的时候,我用了一个叫游戏机的工具。 我开始从它开始学习程序。 我现在远远超过了这个目标,但是回顾它的一些特性和设计是非常有趣的。 我是wondering-如何使用 C++ 实现类似于这里工具的功能? 我在想:

  • 对象/类

一个叫做'instance_create''对象'list的列表,它实际上是不同的类,它们都是来自同一个基类的( 我现在叫它游戏对象),它是一个名为的系统函数,它将对象类型作为函数。 在 C++ 中,这看起来像这个( 虽然syntatically非常不正确):


class MyGameObject : GameObject
{
//...
}
GameObject instance_create(class objecttype)
{
 objecttype newinstance = new objecttype();
 return newinstance
}
GameObject* gameobjectinstance = instance_create(MyGameObject);

那我该如何实现?

  • 系统变量/函数

游戏厂商有系统变量和可以从任何地方访问的函数。 句号任何地方我想全局但我知道这是个糟糕的设计。 我想有一个全局类,把变量/函数作为 static,但是它们不能被改变。 我 怎么 开口 呢?

  • var

游戏厂商只有一个数据 type- 。 它可以是一个字符串,一个整数,一个小数,任何。 还有一些系统功能可以用来。

最后,如何在某种脚本中定义对象类型? 如果要添加新的对象类型,请创建新的脚本? 我认为 C++ 在运行时不能创建对象类型,那么我该怎么做?

时间: 原作者:

0 0

使用模板。


template<typename T> GameObject* instance_create()
{
 return new T;
}
GameObject* gameobjectinstance = instance_create<MyGameObject>();

然而,你所指定的设计是非常有疑问的( at ),肯定不适合 C++ 。 你应该努力实现一个设计良好的系统,一个适合该语言的系统,而不是从过去创建一个系统。

我特别认为,由于你提到了脚本的运行时解释,实际上GameMaker类和 C++ 类与其他类之间没有任何关系。 当然,不能在运行时创建 C++ 类,也不能在运行时传递类型;也不能在运行时实例化模板。

你最适合简单地完成一种脚本语言,比如 Lua,并只在 C++ 中编写必要的高性能组件。

原作者:
0 0

游戏制造商使我们能够通过"对象"控制游戏功能,每个游戏都由"事件"在游戏中触发。 首先,比较游戏机开发与的比较,这就像比较粉笔和奶酪一样,这是值得的。 但是,从理论上讲,我假设你可以在 C++ 中镜像通用功能( 尽管非常低效),如下所示:

基本对象类的外观类似于:


class CObjectBase
{
public:
 CGameSprite* sprite;
 int x, y;
. . .

 virtual void onEventCreate( void ) {};
 virtual void onEventDestroy( void ) {};
. . .
 virtual void onEventKeyPressedUp( void ) {};
 virtual void onEventKeyPressed...
. . .
. . . (there are lots of these)

//The draw event in GM (from memory) had in-built functionality:
 virtual void onEventDraw( void ) 
 {
 CGameEngine::getSingleton()->DrawSpriteAtLocation( sprite, x, y );
 }
};

你从这个类派生并覆盖了与对象( 组成这些函数的语句是你的"操作") 相关的函数("事件") 。 ,对象实例管理器singleton包含当前"聊天室"中的所有对象实例列表,并通过调用各自的函数触发相关事件,触发相关事件。

有趣的是,这实际上说明了像游戏机这样的系统缺乏一定的效率。 还存在额外的不必要开销,以便为开发人员保留选项。 对于特定情况,所有对象派生的臃肿的基对象通常是多余的。 例如,假设只有两个事件使用的对象- 对象管理器仍然盲目检查所有它的他事件。 显然可以进行优化,但总体来说,发动机的宽度最终会降低性能。

至于与单个'var'类型相关的查询,已经说明了,这更是脚本的特性,而不是 C++ 。 这证明了游戏机不能仅仅由 C++ 来建模。

原作者:
...