Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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++ 游戏开发:我应该编程我的关卡还是从文件中解释它们?_C++_Interpreter - Fatal编程技术网

C++ 游戏开发:我应该编程我的关卡还是从文件中解释它们?

C++ 游戏开发:我应该编程我的关卡还是从文件中解释它们?,c++,interpreter,C++,Interpreter,游戏将用C语言编写++ 编程: enemies.puch_back(new DefaultEnemy(200, 300, 3, 5)); enemies.puch_back(new DefaultEnemy(500, 400, 4, 5)); enemies.puch_back(new DefaultEnemy(300, 420, 3, 15)); enemies.at(2).createAward(new Key(4), "pling.wav"); 或者从这样的文件中解释它们: Defaul

游戏将用C语言编写++

编程:

enemies.puch_back(new DefaultEnemy(200, 300, 3, 5));
enemies.puch_back(new DefaultEnemy(500, 400, 4, 5));
enemies.puch_back(new DefaultEnemy(300, 420, 3, 15));
enemies.at(2).createAward(new Key(4), "pling.wav");
或者从这样的文件中解释它们:

DefaultEnemy 200 300 3 5
DefaultEnemy 500 400 4 5
DefaultEnemy 300 420 3 15
CreateAward 2 "pling.wav" Key 4
编程会更容易,人们不能(不说黑客)编辑你的关卡。但这可能是一个有点垃圾的程序吗?选择编程或口译还有其他原因吗

内存管理如何(如果我需要口译)?
当关卡卸载时,如何删除(游戏)对象

第一个变体相当于硬编码游戏资源。这绝对不好,只适合调试

每个游戏都将其资源存储在外部文件(xml、归档包)中,并在运行时对其进行解析和加载

因此,现代游戏引擎几乎每次都会附带一套工具


删除游戏资源也是一个巨大的问题-这取决于。取决于对象的生命周期管理,如果需要将数据解压到临时文件中,则取决于这一事实。

我会将关卡设计保存在一个文件中。这就是脚本编写的目的。这就给了我一种改变等级的方法


此外,它还将保持你的对象(在关卡中使用的东西)与逻辑(游戏逻辑)分离。这将有助于调试并有一个更清晰的结构

取决于您是否可以腾出资源进行解释,以及您还打算让谁使用您的工作。如果只有您和您自己在创建它,那么硬代码本身并没有什么问题


但是,如果您希望用户或任何其他人对其进行修改,请进行解释。

始终将应用程序与数据分开

你的陈述太笼统了,没有证据支持。@Ben,你不认为这种“笼统”的问题需要一个非笼统的答案吗?你说每一场比赛都很糟糕,而事实上这些陈述只适用于某些比赛。也许是大多数,也许不是,但它肯定不是你试图制定的通用规则;XML。TinyXML是一个很好的阅读库。独立于平台,因为二进制存储会带来诸如字节结尾之类的问题。@Poni:谢谢TinyXML!我想我要用这个!注意到一个小错误:push中有一个S,而不是C:)Verder alles ok!分离是好的,可以提高可维护性,但实现这一点的最佳方法可能是通过遵循良好封装实践的模块化代码。除非用户需要更改级别,否则当编译器为您完成所有这些工作时,为什么还要构建自己的解析器、语义检查器等呢?此外,编译关卡将使游戏加载速度更快。我不同意。硬编码意味着每次你想改变一些东西,比如敌人的位置时,都要重新编译所有的东西。即使你独自一人发展,这也是一种痛苦。几乎所有非平凡的游戏都使用外部数据文件,而不是硬编码。这取决于您是否有其他理由重新编译每个构建,以及创建合适的文件格式需要多长时间。在开发时间解释东西也不是免费的。@nico:这也是真的。。。但是,总是在级别加载时重新解释它,或者在级别更改时重新编译一次…级别信息的外部文件可以通过包含代码的动态库轻松地与数据文件一样。无需重新编译所有内容,并且使用一个像样的makefile系统,您只能重新编译单个函数。使用代码,在运行时添加一个钩子来更改内容也会容易得多。实际上,用调试器知道的语言编写级别将有助于调试。有了一个级别的解释器,您只需逐步完成解释器的实现,而遵循高级逻辑将困难得多。