Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 游戏vs游戏引擎?_C++ - Fatal编程技术网

C++ 游戏vs游戏引擎?

C++ 游戏vs游戏引擎?,c++,C++,我想知道是否有人能告诉我游戏和游戏引擎是如何融入游戏开发的。具体来说,我的意思是,游戏引擎实际上没有游戏。所以我不清楚的是,游戏开发人员是否构建了一个引擎,然后创建了一个从引擎继承的新类,这个类就成为了游戏 例: 基本上我不清楚游戏代码在引擎中的位置。 < P>游戏引擎通常考虑可以拔出的代码,并用它来改变它自己的游戏。p> class CoolDiscoLight : public Engine::Light { }; ... //and somewhere in the source "C

我想知道是否有人能告诉我游戏和游戏引擎是如何融入游戏开发的。具体来说,我的意思是,游戏引擎实际上没有游戏。所以我不清楚的是,游戏开发人员是否构建了一个引擎,然后创建了一个从引擎继承的新类,这个类就成为了游戏

例:


基本上我不清楚游戏代码在引擎中的位置。

< P>游戏引擎通常考虑可以拔出的代码,并用它来改变它自己的游戏。p>
class CoolDiscoLight : public Engine::Light
{
};

...
//and somewhere in the source

"CoolDiscoLight cdl = new CoolDiscoLight etc..."

EngineInstance.AddLight(cdl);
...
正如前面所述,如何准确地使用引擎代码取决于引擎本身

通常,您将从引擎库中引用类并使用它们。执行此操作的方式将由发动机决定

class CoolDiscoLight : public Engine::Light
{
};

...
//and somewhere in the source

"CoolDiscoLight cdl = new CoolDiscoLight etc..."

EngineInstance.AddLight(cdl);
...
有些可能提供比其他更多的功能,有些则侧重于模块性

通常情况下,一个完整的游戏引擎只需将不同的子引擎连接在一起,比如一个图形引擎,它可以处理实际绘制到屏幕上的图形。模拟游戏世界的物理引擎。用于UI和菜单的UI引擎。一种网络引擎,用于处理嵌入式工作


“游戏引擎”可能直接内置了这些组件,或者它可能只是包装了另一个引擎/库,以便您以与引擎其余部分类似的方式使用它。

游戏和实际游戏引擎之间的区别在于架构。游戏逻辑是特定于一个游戏的,而游戏引擎是可以重用的。就像操作系统为应用程序提供实用程序一样,游戏引擎也为游戏代码提供同样的功能

class CoolDiscoLight : public Engine::Light
{
};

...
//and somewhere in the source

"CoolDiscoLight cdl = new CoolDiscoLight etc..."

EngineInstance.AddLight(cdl);
...
游戏引擎通常具有不同的API,用于:

  • 加载音频、纹理、3d模型等多媒体数据
  • 提供游戏循环并触发由用户输入引起的各种事件
  • 联网
  • 使用灯光、粒子效果或凹凸贴图进行图形渲染和各种技术,使游戏看起来更漂亮
  • 音频
  • 人工智能
  • 允许定义游戏规则、游戏规则和游戏逻辑的API
大多数游戏开发者并不编写自己的游戏引擎。这将是太多的工作。相反,他们将重新使用他们公司拥有的游戏引擎或许可证。对于第一人称射击手来说,id软件和虚幻是两种流行的选择

一旦他们有了引擎,他们就必须开始编写代码来制作游戏。这是使用游戏引擎提供的API完成的。例如,阀门使开发人员使用C++。如果您想要一个怪物,您可以扩展实体类,并定义这个怪物在该基类中的行为

我建议您阅读各种游戏引擎提供商提供的文档和教程。请记住,有些游戏被归类为“mod”,有些则被归类为“总转换”。通常情况下,mod不会改变游戏引擎,总转换可能会增加或删除游戏引擎的重要功能

以下是我推荐的几个来源:

  • id软件在几年后将游戏引擎发布为GPL。通过阅读他们的代码,您将学到很多:。我还建议大家看看敌方领土,它是基于地震3代码:
    是的,他们说了什么。我要补充的是,游戏引擎通常是为一种游戏风格而设计的。飞行模拟器的需求与地震大不相同。像《遗忘》这样的游戏正在将这些需求合并在一起,因此情况可能很快就不是这样了。

    这也取决于引擎的“级别”。 我的意思是,引擎是从某种游戏风格中抽象出来的。可能会有一些小东西,比如一个专注于FPS的引擎,可能是为了优化室内区域、室外区域以及高速飞行而设计的。因此,即使引擎可能未锁定到游戏,某些游戏类型也会更容易实现某些引擎

    但是如上所述,游戏不会继承引擎,它更可能利用它的功能,并且您可能会将组件附加到它的现有组件。或展开作为发动机一部分的部件

    class CoolDiscoLight : public Engine::Light
    {
    };
    
    ...
    //and somewhere in the source
    
    "CoolDiscoLight cdl = new CoolDiscoLight etc..."
    
    EngineInstance.AddLight(cdl);
    ...
    

    更可能的是,仅通过从light扩展并重载正确的函数,level editor等就可以访问light,因此您根本不会通过源代码创建它们。

    事实上,我无法区分引擎和框架之间的区别。只是两个不同的名字

    真正奇怪的是,游戏引擎完全是关于客户端的,似乎您不需要服务器框架,而纯套接字就足够了

    但事实并非如此,至少应该有一些框架,如rails或django,以简化服务器开发。没有看到游戏服务器在可伸缩性、广播和其他方面比web开发更困难

    有一个商业解决方案叫做smartfox服务器,还有一个新的开源解决方案叫做pomelo框架,我两个都试过了,pomelo要好得多。网易是它的家

    游戏开发者是否构建一个引擎,然后创建一个新类 从哪个引擎继承成为游戏

    视情况而定。大多数情况下,开发者会利用现有的游戏引擎,但有时不会,因为不存在想要的效果

    我尝试了很多不同的游戏引擎。他们中的大多数人的行为如下:

  • 通过扩展精灵的基本实体类来定义精灵和声音元素
  • 定义组以便于管理
  • 为IO和精灵之间的交互定义房间或世界
  • 在诸如“update()”等常见函数中编程逻辑(该函数将按帧调用)
  • 修改程序入口,进入第一个“房间”或“世界”(可以是菜单)
  • 因此,游戏引擎的主要任务是定义如何使用屏幕