Questions tagged «software-engineering»

软件工程是指应用于游戏开发领域的软件设计和开发。使用此标签的问题应与与创建或设计软件的任务有关的理论概念和实践有关。不应仅因为问题涉及编程或包含代码而使用此标记。

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函数是绝对例外安全的。我可能只想让游戏显示一个错误并在该点关闭。 您在自己的游戏项目中走了多远?为可能会在出现异常时崩溃的程序编写异常不安全代码,通常是否可以接受?

4
什么是“工具开发”?
我一直在寻找游戏行业中的不同职位,而我看到的很多招聘职位都是“工具开发人员”职位。我不知道这到底是什么。 有人可以向我解释这是什么吗?而且,如果任何人都有任何链接到材料可以帮助我更多地理解它,那么我们将不胜感激。

3
添加或删除单元时,如何保持矩形形状?
我有带有行和列的矩形形式的机器人。在从地层中添加或删除机器人时会出现问题。发生这种情况时,漫游器必须重新布置自己,以使矩形形状的纵横比仍大致相同,并尽可能地为矩形。这该怎么做? 一些想法: 添加或删除机器人时,请使用新的机器人总数和所需的恒定长宽比来计算最适合该长宽比的地层的新宽度和高度。然后以某种方式重新调整机器人以适应新的尺寸。 移除机器人后,将其后面的机器人移到其位置,然后继续直到到达编队的尽头。然后通过以某种方式改组后排机器人来尽可能地使后排保持平衡。 另一个完全不同的想法是模仿分子结构保持在一起的方式。通过吸引四个最接近的机器人,然后排斥其余所有机器人,使每个机器人都希望被其他四个机器人包围。击退所有机器人(包括四个机器人),它们太近以至于无法使用平方反比法确保分离。您还需要额外的力来塑造整个结构。但是,这听起来非常昂贵。 更新:因此,研究萨拉赫姆的答案,我想出了一个很好的通用函数,它给出了良好的尺寸。 首先,我解决了下面的宽度和高度联立方程,然后对答案进行了四舍五入。 width/height=aspect ratio of your choice width*height=number of bots 这为您的机器人数量提供了最接近该纵横比的整数矩形。最接近的矩形一半时间太大,一半时间太小(当然,有时会恰到好处,但谁在乎那些矩形)。在矩形是一个案件有点过大,需要做什么需求。后排最终将几乎满,这是理想的。在矩形是一个案件有点太小了,你有问题,因为极小的微小溢出将不得不去到它自己的等级创建了一个等级上它只有几个机器人,它并不十分好看。在某些情况下,差异也很大(大于宽度的一半),在这种情况下,相加或减去一级即可使差异变小。然后,当矩形太小时,添加一列以使其稍大一点。这样做之后,看起来后排机器人将始终至少具有其他排机器人的一半。 更新 获得尺寸后,将其与当前尺寸进行比较。如果新维度的边界较大,则对于每个等级,从下面的等级弹出bot,并将它们推入当前等级,直到该等级上的bot数量等于正面。继续执行该算法,直到获得第二名。使用此算法,机器人将可以有效地适应新的维度。在那之后,我只是将新旧的推到后排。对于新的门面较小的情况,该算法略有不同,但是您可以弄清楚! 接下来还有两个问题。删除,以及一种更灵活的添加方法,其中不必将新漫游器分配给后排,而是在添加新漫游器时最接近它们的位置。

4
对程序员的影响[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 有没有人有针对程序员的良好资源来创建特殊效果。我对粒子效果没有特别的兴趣,但是更广泛的东西例如: 全屏效果,模糊,景深,损坏 爆炸,冲击波 武器,激光,射弹 环境-轻的“发光”和光束,水,气泡,灰尘等 我对这些东西感兴趣的是技术角度而非艺术角度。 编辑:澄清一下,我对诸如“在SPU上进行深度剥离的方法”或“具有顶点纹理的快速粒子渲染”之类的低级细节不感兴趣,我对人们如何将各种技术结合到配方中很感兴趣为游戏展现特殊效果。 例如-渲染“空间”爆炸时: 在中心绘制不透明的明亮球体。 围绕随机轴绘制Alpha'd冲击波。 扩大球体并降低alpha。 扩展冲击波并旋转UV。 产生的粒子从中心随机喷出。 当冲击波到达观看者位置时摆动摄像机。

10
C#在游戏开发方面是否有未来?
我最近从CVG.co.uk上的一次采访中了解到MMO Minecraft是由Java驱动的,该采访涉及两位以前和现在竞争的同事之间可能的合作。在接受采访时,他直截了当地说Minecraft的创始人是Java编码器,而他是C或C ++编码器,因此它们彼此不兼容。因此,在未来的项目上进行合作将很困难。 这让我开始思考,如果Java可以做到这一点?就游戏或主流游戏开发而言,MS非常流行的C#语言和.Net平台的未来将如何发展?

15
考虑艺术家的简单游戏引擎/开发工具?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 6年前关闭。 我已经在游戏的2D艺术方面工作了一段时间,我的全职工作使我在事物的艺术方面非常忙,但是我对学习为自己的游戏制作原型越来越感兴趣。 我知道的编程很少,尽管我确实读过一些大学(用TorqueScript编写的东西),虽然我可能可以花一些时间来学习它,但是学习曲线对我来说有点太陡峭了,因为它与我目前的工作。 我想知道是否有任何游戏引擎在设计时就考虑了艺术家的界面,对我来说学习曲线可能更容易,对我当前的技能设置更容易应用。我为Torque Game Builder购买了Indy许可证,但它仍然需要大量脚本编写,并且很难找到好的,基本的入门级教程。 基本上,我正在寻找一种工具,可以专注于艺术和游戏设计,并且编程最少,易于学习且文档非常好。不知道是否存在类似的东西,但是值得一试。:] 有任何想法吗?

4
每个图形程序员应该写些什么[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我已经在SO上看到了这个问题,但是在这里我希望它专注于GFX。 因此,您认为每个有抱负的GFX程序员应该编写/更改哪些应用程序/功能以使其变得更好? 社区Wiki,因为没有“正确答案”。 LE:不是指实际的游戏,而是指图形功能,例如更改引擎中的某些内容(例如,它如何加载对象),制作合成器等等。

4
我该如何避免在整个代码中出现一次性标记和检查?
考虑一个纸牌游戏,例如《炉石传说》。 有成百上千种卡片可以做各种各样的事情,其中​​有些甚至对于一张卡片来说都是独一无二的!例如,有一张牌(称为Nozdormu)可将玩家回合减少到仅15秒! 当您具有如此广泛的潜在影响时,如何在整个代码中避免幻数和一次性检查?如何避免PlayerTurnTime类中的“ Check_Nozdormu_In_Play”方法?以及如何组织代码,使得当您添加更多效果时,您无需重构核心系统即可支持以前从未支持过的东西?

4
值得在游戏中添加“未来派”功能,还是应该将重点放在其他地方?
我是一家中型独立游戏工作室的首席程序员。这是我们作为团队的第一场比赛。我们正在开发一款具有收益分享业务计划的未来派FPS游戏。 无论如何,我们有一些非常优秀的程序员,他们有能力创建前所未有的功能(真正的逼真流体,过程网格破坏,过程天空盒等)。我想知道实现这些东西是否有意义吗?他们花了很长时间,但看上去很漂亮。我们的目标是12个月的开发周期。所以我们应该这样做,还是仅仅制作一个标准游戏。

14
大澳真的重要吗?
在学术界最糟糕的情况下,Big O会教给其他所有人。与空间复杂度相比,通常情况下的分析,复杂性之上的简化等等。 特别是对于游戏编程和行业,真正重要的是什么,为什么? 参考将非常有帮助。

1
如何模拟Google Play购买?
我想知道当用户通过Google Play购买商品/道具并用真钱购买时,该如何测试功能的最佳做法? 例如,基本上,创建一个简单的测试,使用游戏货币在游戏期间购买和保存存储在库存中的物品。(例如,《最终幻想》系列的吉尔(Gil)或Tron Bonne的珍妮(Zenny )的PlayStation 1)我只在Unity3D或带有LibGDX库的Eclipse中编程时,才知道如何仅通过游戏赚钱来进行购买更新。 现在,让我说我必须创建一个程序来检查用户是否实际使用真钱购买了增能产品。接下来,系统需要检查在线状态。如果已连接,它将仅转到Google Play对话框,并询问用户是否要继续购买商品。如果是,并且信用卡余额足够,则返回游戏应用程序,并检查布尔值是否返回true,则将保存购买用户的商品。 另一个例子是,真实货币的金额将通过编程计算,如果不足,用户要求通过Google Play购买来增加真实货币的价值。如果返回true,则将重新加载真实货币值。 游戏开发人员基本上需要这个概念。但是,有没有一种安全的方法可以在不使用信用卡价值或其他功能的情况下,在不使用信用卡价值的情况下测试真实货币购买测试物品,并在此功能中将游戏应用实际发布到Google Play之前?是否有教程,入门指南,建议或其他相关内容?拜托,我想知道我将如何开始。谢谢。

6
您如何并行化二维Boids模拟
您如何以这样的方式编写2D boids仿真程序,使其可以使用来自不同来源(群集,gpu)的处理能力。 在上面的示例中,无色粒子四处移动,直到它们聚集(黄色)并停止移动。 问题是,尽管左上方的实体不太可能与右下方的实体进行交互,但所有实体都可能彼此交互。如果将域划分为不同的段,则可能会加快整个过程的速度。但是,如果实体希望跨入另一个段,则可能会出现问题。 目前,该仿真可用于具有良好帧速率的5000个实体,如果可能,我想尝试使用数百万个实体。 可以使用四叉树进一步优化吗?还有其他建议吗?

3
C ++中的有限状态机
因此,我已经阅读了很多有关使用FSM进行游戏状态管理的知识,例如FSM是什么,以及使用堆栈或状态集构建状态。我经历了所有这些。但是,我一直坚持为此目的编写一个经过精心设计的FSM 实际实现。具体而言,一个人如何干净地解决状态之间的转换问题(一个状态应该如何使用其他状态的数据),等等。有没有人有使用C ++设计或编写实现的技巧,或者还有更好的代码示例?

6
电子游戏如何在屏幕外存储信息?
我正在尝试从零开始制作视频游戏,但是我对此确实很陌生,并且一直遇到基本问题。最重要的是,视频游戏如何存储屏幕外信息?我的意思是,程序如何知道接下来要在屏幕上显示什么?甚至,如果播放器更改了环境,下次将其加载到屏幕上时,该更改如何保留? 例如,在“新超级马里奥兄弟”中,如果您打了?阻止,然后离开屏幕,然后返回,它仍然保持点击状态。如何保存此信息,然后在玩家下次加载该块时执行该信息?为什么不重置呢?


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.