我想知道是否有人可以告诉我游戏和游戏引擎如何适应游戏开发。具体来说,我的意思是,游戏引擎实际上没有游戏。那么基本上我不清楚的是,游戏开发者是否构建了一个引擎,然后创建一个继承引擎的新类,从而成为游戏?
例如:
class ShooterGame : public Engine
{
};
所以基本上我不清楚游戏代码在引擎中的位置。
答案 0 :(得分:24)
游戏与实际游戏引擎之间的区别在于架构。游戏逻辑特定于一个游戏,而游戏引擎是可以重复使用的东西。就像操作系统为应用程序提供实用程序一样,游戏引擎对游戏代码也是如此。
游戏引擎通常会有不同的API:
大多数游戏开发者都不会编写自己的游戏引擎。这将是太多的工作。相反,他们将重用他们公司拥有的游戏引擎或许可一个。对于第一人称射击游戏,id Software和Unreal是两种流行的选择。
一旦他们拥有引擎,他们就必须开始编写代码来制作游戏。这是使用游戏引擎提供的API完成的。例如,Valve使开发人员使用C ++。如果你想要一个怪物,你可以扩展出Entity类,并定义这个怪物在该基类中的行为。
我建议您阅读各种游戏引擎提供商提供的文档和教程。请记住,有些游戏被归类为“mods”,有些则归为“总转化次数”。通常,mod不会改变游戏的引擎,并且总转换可以向游戏引擎添加或移除重要特征。
以下是我建议的几个来源:
答案 1 :(得分:4)
实际上,我无法区分引擎和框架之间的区别。这只是两个不同的名字。
奇怪的是,游戏引擎完全是关于客户端的,似乎你不需要服务器框架,而纯套接字就足够了。
但现实并非如此,至少应该有一些像rails或django这样的框架来简化你的服务器开发。在可伸缩性,广播和其他领域,不要看到游戏服务器比Web开发更难。
有一个名为smartfox服务器的商业解决方案,以及一个名为pomelo framework的新开源解决方案,我试过两个,pomelo要好得多。 pomelo.netease.com就是它的家。
答案 2 :(得分:1)
它还取决于引擎的“级别”。 我的意思是,引擎是如何从某种游戏风格中抽象出来的。可能会有一些小东西,例如专注于FPS的引擎,可以针对室内区域,室外区域以及高速飞行而优化。因此,即使引擎可能无法锁定游戏,某些游戏类型也会更容易实现某些引擎。
但如上所述,游戏不会继承引擎,它可能会更多地利用它的功能,你可能会将组件附加到它的现有组件上。或者扩展属于引擎的组件。
class CoolDiscoLight : public Engine::Light
{
};
...
//and somewhere in the source
"CoolDiscoLight cdl = new CoolDiscoLight etc..."
EngineInstance.AddLight(cdl);
...
更可能的事实是,只需从光线延伸并重载正确的功能,光线就可以被水平编辑器等访问,所以你根本不会通过光源创建它们。
答案 3 :(得分:0)
游戏引擎通常会考虑可以拔出的代码,而无需更改自己的游戏。
就像已经说过的那样,你如何使用引擎的代码取决于它自己的引擎。
通常,您将从引擎库中实例化类并使用它们。你这样做的方式将取决于引擎。
有些可能会提供更多功能,而有些功能则集中在模块上。
通常,完整的游戏引擎只会将各种子引擎绑定在一起,例如处理实际绘图到屏幕的图形引擎。用于模拟游戏世界的物理引擎。 UI和菜单的UI引擎。一个处理有事情的网络引擎。
“游戏引擎”可能会直接内置这些组件,或者它可能只是包装另一个引擎/库,以便您以与引擎其余部分类似的方式使用它。
答案 4 :(得分:0)
游戏开发者是否构建引擎,然后创建一个新类 继承自成为游戏的引擎?
这取决于。大多数时候,开发人员会使用现有的游戏引擎,但有时他们不会因为不存在想要的效果。
我尝试了很多不同的游戏引擎。他们中的大多数都表现得像这样:
因此,游戏引擎主要负责定义屏幕应如何在中间层显示,而开发人员无需担心will there be too many sprites loading outside the view-port?
或When I press a key, where should the callback be located?
等问题,“它们是实体吗?相撞?“但注重游戏的更高层逻辑。
答案 5 :(得分:0)
我一直在寻找游戏创作帮助,并发现引擎是整个游戏的基础,就像玩家创建更容易以及自定义图形和物理或类似项目。你还需要考虑你打算做的下几场比赛,并使用引擎在你已经为你构建的游戏中构建很少。
如果你想了解游戏引擎是什么,那么如果功能或想要在这里构建一个引擎是怎么回事。
GLFW - 用于打开OpenGL窗口。这是一个很棒的小C库 几乎可以打开窗户。这很棒,因为 这不用担心。
GLEW - 管理OpenGL扩展。如果你要做OpenGL,那真的没有解决这个问题。
Lua - 脚本。虽然我的游戏还没有使用它,但它几乎是业界脚本的首选语言 快速虚拟机实现。
Protobuf - 管理外部状态。你可以在这里找到它的文档。缺点 这是你可以在任何你通常使用XML的地方使用protobuf。
Qt - 用于标准容器和字符串操作。你不需要使用整个Qt库集,只需要使用QtCore库。这给了 您可以访问QList(std :: vector),QHash(优化的std :: map),QString (具有多个编码支持的std :: string)和许多其他 好吃的东西。你应该采用它的部分原因是因为 文档非常棒。
GLM - 数学库。如果您只想在游戏中使用数学,那么这就是您的库。
freetype-gl - 文本渲染。它是一个用于在OpenGL中渲染文本的编写良好的库,您可以这样做 更糟糕的是。
libRocket - 基于HTML和CSS的GUI库。当你只想在屏幕上显示一个用户界面时,这很棒,但如果你想要的话会有问题 添加动画。
查找列表here
对于引擎来说,这些都是很好的想法,只需将图书馆组合起来,然后根据你自己构建的引擎构建游戏,如果你没有一支优秀的团队,你需要花一些时间才能完成。此外,我已阅读此列表和许多其他人,这是最好的2d列表。此外,您不需要构建引擎UI,因为您只需要引擎的基础知识并为每个游戏构建单独的项目。这是如何正确的。
(对于引擎使用.h而不是.cpp,因为你不能引用engine.cpp但你可以引用engine.h) 在构建之后
以这样的方式构建引擎但不是100%这样才是最佳的
找到此here
像这种
一样构建它答案 6 :(得分:0)
它经常喜欢这个
class ShooterGame
{
Engine anEngine;
public void Run();///run the world here
};
答案 7 :(得分:-1)