游戏开发

专业和独立游戏开发人员的问答

1
我应该如何构建可扩展的资产加载系统?
对于Java的业余游戏引擎,我想编写一个简单但灵活的资产/资源管理器。资产是声音,图像,动画,模型,纹理等。经过几个小时的浏览和一些代码实验,我仍然不确定如何设计这个东西。 具体来说,我正在寻找如何设计管理器的方式,以便它抽象出如何加载特定资产类型以及从何处加载资产。我希望能够同时支持文件系统和RDBMS存储,而程序的其余部分不需要了解它。同样,我想添加一个XML动画描述资产(FPS,要渲染的帧,对Sprite图像的引用等)。我应该能够为此编写一个类,该类具有查找和读取XML文件以及创建和返回AnimationAsset带有该信息的类的功能。我正在寻找数据驱动的设计。 我可以找到大量的信息是什么资产管理者应该做的,而不是如何去做。涉及的泛型似乎导致某种形式的类级联,或某种形式的助手类。但是,我还没有看到一个清晰的例子,看起来不像是个人黑客,也不是共识。

4
设立独立游戏工作室(英国)-怎么样?
我来自英国,希望建立自己的游戏工作室-本质上,只是我自己在家工作,希望开发休闲游戏应用程序。我想问大家我需要经历哪些步骤或过程才能做到这一点,特别是法律方面。听到那些自己经历过这些的人,将是很棒的!作为个体经营者,需要向HRMC注册是我唯一要做的事情,但还有什么? 我需要注册/商标自己的公司/工作室名称吗?如果是这样,我在哪里做,要花钱吗?还是我可以简单地按原样使用名称? 我需要为自己制作的任何游戏/应用IP也这样做吗?还是自动假定版权? 我现阶段担任独家交易员是否更合适?在什么时候(如果有的话),我应该考虑转移到实际的有限责任公司吗? 仅为此业务开设一个新的银行帐户是否明智? 我认为我的计划仅仅是:1.找到一个合适的域名,并根据我的公司名称创建网站-假设该域名可用,并且与其他竞争对手的名称有所不同; 2.注册为HRMC的自雇人员; 3.在应用商店中出售我的游戏 就是这样!这样可以吗?还是我需要考虑其他问题,例如上面的问题? 感谢您的阅读和任何建议!
19 legal  business 

4
为什么行业从C转向C ++?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 首先,我想得到一个真实的答案,我一直在尝试从各种来源和文章中获取更多信息,当我阅读C ++之类的东西时,速度很慢,因为它具有虚函数,并且因为C更好,所以我真的不知道该说些什么,并想像一个有大脑的人。因此,请避免在答案中达到此水平。 我的问题是关于是否已通过Doom 3或多或少地完成了对C ++的大规模转换。 对我来说有趣的是,在达到这一里程碑之前,大多数游戏引擎和游戏本身都是用C语言编写的,就像自Quake时代以来那样。有趣的是,ID软件决定完全重写C ++中IdTech 4的代码库,说实话,如果没有很好的理由,我将无法理解大量的工作。 我专注于《毁灭战士3》,因为我主要对OpenGL世界感兴趣,并且在我的旅途中,我一直专注于这个话题,所以我读了很多关于此的内容,但是我认为这样的问题可以是render-API -不可知论,没有太多问题。 为什么在某个时间点,行业大量转向C ++?选择ID的原因是什么? 我要说的最后一件事是,C语言更易于实现,并且提供的功能更少,因为与C ++实际不同,C语言被碎片化的机会要少得多。用最简单的话来说,我有更多的机会找到一个真正好的C编译器,而不是一个好的C ++编译器,它具有以良好方式实现的所有功能。 例如,适用于Android的NDK仍然没有很好的C ++支持(带有r8b版本),具有所有最新和最强大的功能,它是世界上最受欢迎的移动OS的本地工具包! 如果我用现代C ++编写代码,那么现在可能会很痛苦,因为世界上最流行的操作系统之一对我来说是个禁区。和Android一样,许多其他编译器也不是很好。 我应该编写C ++代码,引用2-3版本的C ++版本吗?
19 c++  c 

3
回合制游戏的设计,其中动作有副作用
我正在编写游戏Dominion的计算机版本。这是一种基于回合制的纸牌游戏,其中动作卡,宝物卡和胜利点卡累积在玩家的个人卡组中。我已经很好地开发了类结构,并且我开始设计游戏逻辑。我正在使用python,稍后可能会在pygame中添加一个简单的GUI。 玩家的回合顺序由一个非常简单的状态机控制。顺时针旋转通过,玩家无法在游戏结束之前退出游戏。单圈游戏也是一种状态机。通常,玩家经历“行动阶段”,“购买阶段”和“清理阶段”(按此顺序)。根据问题的答案,如何实现回合制游戏引擎?在这种情况下,状态机是一种标准技术。 我的问题是,在玩家的动作阶段,她可以使用对自己或其他一个或多个玩家有副作用的动作卡。例如,一张动作卡允许玩家在当前回合结束后立即进行第二回合。另一张动作牌会使所有其他玩家从其手上弃掉两张牌。在当前回合中,还有另一张动作卡不起作用,但允许玩家在下一回合中抽出额外的卡。为了使事情变得更加复杂,游戏中经常会有新的扩展添加新的牌。在我看来,将每个动作卡的结果硬编码到游戏的状态机中既丑陋又不适应。回合制策略循环的答案 并未详细介绍解决该问题的设计。 我应该使用哪种编程模型来包含一个事实,即转弯时的一般模式可以通过转弯内发生的动作来修改?游戏对象是否应该跟踪每张动作卡的效果?或者,如果卡应实现自己的效果(例如,通过实现接口),则需要什么设置才能赋予它们足够的功率?我已经想出了一些解决此问题的方法,但是我想知道是否存在解决该问题的标准方法。具体来说,我想知道哪个对象/类/什么负责跟踪每个玩家由于打出一张动作卡而必须执行的动作,以及与正常顺序中的临时更改有何关系转弯状态机。

3
如何在游戏中生成随机的湖泊和河流?
我有一个2D方块建筑游戏,正在尝试制作随机生成的湖泊和河流。我已经研究了Perlin噪声算法,但是无法获得它来生成随机且不错的结果。 我一直在尝试使用python noise库,但是它并不是随机创建地图。 我在该库中缺少一些种子函数来使其更加随机吗?如果我希望它变得更随机,该更改什么变量?如果可能的话,给我一个不太技术的答案,减少数学运算,增加更多python术语。 该地图是2D平铺的地图。这是其他算法的非随机性的一些示例。以下代码连续输出3次。我使用以下方法将八度和频率随机化:freq = 16.0 * random.randint(1, 500000) * 0.000001 + 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 …

5
如何判断对象是在连接路径上顺时针还是逆时针运动?
假设我们有一个锯齿状的形状: 两个生物沿着它的轮廓移动。 然后,我们通过拉出拐角来完全平滑形状。 我们得到这个: 现在很容易看到Orange正在移动CW,而绿色正在移动CCW。如何在不使形状变平滑的情况下知道它们向哪个方向移动? 新图片
19 geometry 

3
历史记录生成算法如何工作?
我听说过游戏《矮人要塞》,但只有现在我在YouTube上关注的一个人对此进行了评论……当我注意到矮人要塞实际上如何为世界创造历史时,我感到非常惊讶! 现在,这些算法如何工作?他们通常做什么除了模拟的时间长度,将作为输入?它们的具体程度如何? 更重要的是 可以用Java语言制作,还是Java语言太慢?(我猜这取决于模拟的深度,但以矮人要塞为例。)

8
确定扑克手
我一直在做德州扑克游戏,作为评估的一部分,并且我一直在思考如何检查7张可用的卡并确定是否存在手牌。 我能想到的唯一可能的方法是对卡片进行数字排序,然后检查每组5张卡片,并检查它们是否与每只可能的手的列表匹配。这将花费很长时间,这将仅适用于确定对,因为该诉讼是无关紧要的。 这些牌都是由数字/ a / j / q / k和一套西装(char)3(用小黑桃符号表示)组成的字符串。 有没有人有任何建议,公式或链接可用来帮助创建手部分析系统? 不必担心彼此之间排名靠前,那是另一回事。
19 c++  card-game  poker 

6
给定兼容性和性能考虑,我应该为哪个版本的OpenGL编码?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 去年关闭。 更新OpenGL规范后,它们只会添加功能。因此,从理论上讲,支持Core和Compatibility配置文件的最新最好的硬件应该可以很好地运行超老的OpenGL1.1代码。事实证明这是事实。我花了12个月的时间学习OpenGL1.1,并且对它有了一个相当的了解。 我阅读了其中一些花哨的新OpenGL4.2书的一些章节。我所依赖的几乎所有功能都已弃用(例如“显示列表”),这使我认为可以采用更好的方法来完成所有这些操作。 让我们考虑一下,所有现代硬件都可能完全支持1.1。1.1发布于1992年。我不是编码硬盘的方式只是支持20岁的电脑。:-p我认为,假设大多数游戏者所运行的硬件都达到5年左右的中端水平,这是合理的。 我认为,较新的方法被设计为普遍成为以下两种情况之一:更好的性能或更易于编写代码。我读过某个地方,但从来没有!XD 大约5岁以下的硬件最广泛地支持哪种版本的OpenGL?考虑到这些考虑因素,最适合使用哪个版本?
19 opengl 


4
哪些操作码在CPU级别上更快?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 3年前关闭。 在每种编程语言中,都有建议使用的操作码集。我已经尝试按照速度在这里列出它们。 按位 整数加/减 整数乘法/除法 比较方式 控制流 浮点加法/减法 浮点乘法/除法 在需要高性能代码的地方,可以对C ++进行手工优化,以使用SIMD指令或更有效的控制流,数据类型等进行汇编。因此,我试图了解数据类型(int32 / float32 / float64)还是所使用的操作(*,+,&)影响在CPU级别的性能。 CPU上的单倍乘法是否比加法慢? 在MCU理论中,您了解到操作码的速度取决于执行所需的CPU周期数。那么,这是否意味着乘法需要4个周期,加法需要2个周期? 基本数学和控制流操作码的速度特性到底是什么? 如果两个操作码需要执行相同数量的周期,那么两者可以互换使用而没有任何性能增益/损失? 您可以分享有关x86 CPU性能的任何其他技术细节,

5
计算圆(图像)内的随机点(像素)
我有一个图像,该图像在特定位置包含一个圆,并具有特定的直径。我需要做的是能够计算圆内的随机点,然后操纵与这些点相关的像素。我已经有以下代码: private Point CalculatePoint() { var angle = _random.NextDouble() * ( Math.PI * 2 ); var x = _originX + ( _radius * Math.Cos( angle ) ); var y = _originY + ( _radius * Math.Sin( angle ) ); return new Point( ( int )x, ( int )y ); } …
19 c#  algorithm 

2
在Pygame中执行SNES模式7(仿射变换)效果
关于如何在pygame中执行Mode 7 / mario kart类型效果有一个简短的答案吗? 我已经在Google上进行了广泛的搜索,可以提供的所有文档都是数十种其他语言(asm,c)的页面,其中包含许多看起来很奇怪的等式。 理想情况下,我想找到一些用英语而不是用数学术语解释的东西。 我可以使用PIL或pygame来操纵图像/纹理,或者其他必要的东西。 我真的很想在pygame中实现模式7的效果,但是我似乎快要结束了。帮助将不胜感激。即使您提供的任何资源或说明都不如我希望的那么简单,也将是非常棒的。 如果我能弄清楚,我将为新手页面写一个明确的方法7。 编辑:模式7文件:http://www.coranac.com/tonc/text/mode7.htm
19 pygame 

3
如何对渲染输出进行单元测试?
我最近一直在接受测试驱动开发(TDD),它对我的​​开发输出和代码库的弹性产生了出色的影响。我想将此方法扩展到我在OpenGL中所做的一些渲染工作,但是我一直找不到任何好的方法。 我将从一个具体的例子开始,以便我们知道我想测试什么类型的东西;可以说,我想创建一个绕某个轴旋转的单位立方体,并且要确保对于一定数量的帧,每个帧都可以正确渲染。 我如何为此创建一个自动化测试用例?最好,我什至能够编写一个测试用例,然后再编写任何代码以呈现多维数据集(按照常规的TDD惯例。)除其他外,我想确保多维数据集的大小,位置和方向是在每个渲染帧中正确。我什至可能要确保着色器中的光照方程在每帧中都是正确的。 我遇到的唯一对此有用的远程方法是将渲染的输出与参考输出进行比较,这通常会妨碍TDD的实践,而且非常麻烦。 我可以继续执行其他所需的要求,但恐怕我已经列出的要求已无法实现。

7
您发现C ++代码中的异常安全性有多重要?
每当我考虑使我的代码强烈地异常安全时,我就不这样做,因为这样做会非常耗时。考虑以下相对简单的代码段: Level::Entity* entity = new Level::Entity(); entity->id = GetNextId(); entity->AddComponent(new Component::Position(x, y)); entity->AddComponent(new Component::Movement()); entity->AddComponent(new Component::Render()); allEntities.push_back(entity); // std::vector entityById[entity->id] = entity; // std::map return entity; 为了实现基本的异常保证,我可以在new调用中使用作用域指针。如果任何调用引发异常,这将防止内存泄漏。 但是,假设我要实现一个强大的异常保证。至少,我需要实现我的容器共享光标(我不使用升压),一个无抛出Entity::Swap的原子添加组件和某种成语的原子添加到两个Vector及Map。实施这些不仅耗时,而且由于与异常不安全解决方案相比涉及更多的复制,因此它们也很昂贵。 最终,在我看来,花时间做所有这些事情是不合理的,因此一个简单的CreateEntity函数是绝对例外安全的。我可能只想让游戏显示一个错误并在该点关闭。 您在自己的游戏项目中走了多远?为可能会在出现异常时崩溃的程序编写异常不安全代码,通常是否可以接受?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.