Questions tagged «software-engineering»

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

1
将物理和游戏逻辑与UI代码分开
我正在研究一个简单的基于块的益智游戏。 游戏过程由游戏区域中的许多移动块组成,因此这是一个简单的物理模拟。但是,我认为我的实现还远远不够理想,我想知道您是否可以为我提供任何有关如何更好地实现的建议。 我将代码分为两个区域:游戏逻辑和UI,就像我处理许多益智游戏一样: 游戏逻辑负责游戏的一般规则(例如国际象棋中的正式规则系统) UI显示游戏区域和棋子(例如棋盘和棋子),并负责动画(例如棋子的动画移动) 游戏逻辑将游戏状态表示为逻辑网格,其中每个单位是一个单元格在网格上的宽度/高度。因此,对于宽度为6的网格,可以将宽度为2的块移动四次,直到其与边界碰撞。 UI会获取此网格,然后通过将逻辑大小转换为像素大小(即,将其乘以一个常数)来绘制它。但是,由于游戏几乎没有任何游戏逻辑,因此我的游戏逻辑层[1]除了碰撞检测之外没有其他工作。运作方式如下: 玩家开始拖动一块 用户界面要求游戏逻辑确定该棋子的合法移动区域,并让玩家将其拖到该区域内 玩家放手 UI将样片捕捉到网格(以便它位于有效的逻辑位置) UI告诉游戏逻辑新的逻辑位置(通过mutator方法,我宁愿避免) 我对此不太满意: 我正在为我的游戏逻辑层而不是UI编写单元测试,结果所有棘手的代码都在UI中:阻止该部分与其他对象或边界碰撞并将其捕捉到网格中。 我不喜欢UI告诉游戏逻辑有关新状态的事实,我宁愿让它调用movePieceLeft()方法或类似的方法,就像我在其他游戏中一样,但是我对这种方法没有了解,因为游戏逻辑对用户界面中可能发生的拖动和捕捉一无所知。 我认为最好的办法是摆脱游戏逻辑层,改为实现物理层。我对此有一些疑问: 这样的物理层是常见的,还是让游戏逻辑层更典型地做到这一点? 捕捉到网格和片段拖动代码是属于UI还是物理层? 这样的物理层通常可以与像素大小或某种逻辑单位(例如我的游戏逻辑层)一起使用吗? 我曾经在游戏的代码库中看到过基于事件的碰撞检测,即玩家只需拖动棋子,UI就会顺从地渲染并通知物理系统,物理系统将调用onCollision()方法一旦检测到碰撞,就会在工件上撞上。更常见的是什么?这种方法还是先要求法律流通领域? [1] 层可能不是我所要表达的正确词,但是子系统听起来有些夸大其词,而类却是错误的,因为每一层都可以包含多个类。

3
P2P多人游戏与客户端服务器的局限性
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我正在阅读多人游戏架构。 到目前为止,我发现的大多数文章都是关于客户端-服务器模型的。 我想知道使用p2p架构的局限性是什么?可以使用哪些“类”游戏(或更常见的游戏)来实现?不是吗 总体而言,它与客户端-服务器模型的主要区别和局限性是什么?

2
在简单的冒险游戏中实现行为
我最近一直在通过编写一个简单的基于文本的冒险游戏来娱乐自己,而我一直停留在看似非常简单的设计问题上。 简要概述一下:游戏分为Room对象。每个对象都有该房间Room中的Entity对象的列表。每个对象Entity都有一个事件状态,它是一个简单的string-> boolean映射,以及一个动作列表,它是一个string-> function映射。 用户输入采用形式[action] [entity]。在Room使用实体名称返回合适的Entity对象,然后使用操作名称来找到正确的功能,并执行它。 为了生成房间描述,每个Room对象显示其自己的描述字符串,然后附加每个的描述字符串Entity。该Entity描述可基于其状态(“门被打开”,“门关闭”,“门被锁定”,等等)。 问题出在这里:使用这种方法,我需要快速实现的描述和动作函数的数量就一发不可收拾。我的起居室仅在5个实体之间就具有约20种功能。 我可以将所有动作组合为一个函数,并通过if-else /进行切换,但是每个实体仍然是两个函数。我还可Entity以为常见/通用对象(例如门和钥匙)创建特定的子类,但是到目前为止,这还不多。 编辑1:根据要求,这些动作函数的伪代码示例。 string outsideDungeonBushesSearch(currentRoom, thisEntity, player) if thisEntity["is_searched"] then return "There was nothing more in the bushes." else thisEntity["is_searched"] := true currentRoom.setEntity("dungeonDoorKey") return "You found a key in the bushes." end if string dungeonDoorKeyUse(currentRoom, thisEntity, player) if getEntity("outsideDungeonDoor")["is_locked"] then getEntity("outsideDungeonDoor")["is_locked"] := …

1
如何为XNA演示创建安装程序?
我有一个使用VS2008在XNA3.1中编码的演示。我真的很希望能够将此内容发送给具有PC的任何人,并让他们安装并运行它,而无需他们安装VS或.Net框架等。 我以为会是发布选项,但对此有些困惑。谁能阐明这件事? 先感谢您。

7
低耦合和紧密内聚
当然这要视情况而定。但是,当较低级别的对象或系统与较高级别的系统通信时,是否应首选回调或事件而不是将指针指向较高级别的对象? 例如,我们有一个world具有成员变量的类vector<monster> monsters。当monster类与进行通信时world,我应该更喜欢使用回调函数,还是应该在world类内部具有指向该类的指针monster?

2
音频程序员应该知道什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我是一名音乐创作专业的学生,​​在计算机科学方面也获得了辅修知识。我喜欢写音乐和制作音效,也想写游戏音乐。但是,我也意识到每个人及其母亲都想这样做。考虑到这一点,并且由于我已经同样喜欢编程,所以我有兴趣关注将我的教育中计算机科学部分的某些方面重点放在游戏的音频实现上。 我已经/正在做的事情: 编写了“ MusicManager”类,这些类了解音乐时机和基于游戏事件的少量自动混音 读谁是傅立叶?当我努力理解傅里叶分析和实现FFT时 学习FMOD Designer并在游戏中使用Designer API(当然,不专门讲授此类,我很适合自己学习API) 在这种背景下,我有一个分为两个部分的问题。 因此,除了上面列出的内容以及计算机科学的良好基础知识(数据结构和算法,离散数学,OO /结构化设计)之外,录音棚在音频程序员中还在寻找什么? 此外,GANG和音频工程学会的讲师似乎说音频程序员是游戏中的下一个热门话题,但是许多工作室甚至有或考虑雇用专门的音频程序员吗?

12
在某些情况下,全局变量/子集在游戏开发中有用吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我知道拥有全局变量或单例类会创建很难测试/管理的案例,而我在代码中使用这些模式的工作已陷入困境,但常常需要交付。 那么在游戏开发中是否存在全局变量或单例实际上有用的情况?

5
跨平台底层图形API
创建系统抽象时,最好在有意义的最低级别上用通用接口隐藏平台不同的API。 考虑到不同的现代(无固定功能管道)本地图形API:OpenGLES 2.0 +,OpengGL 3.0 +,DirectX 10.0 +,Xbox DirectX 9,LibGCM 如果要创建一个无状态的低级图形API放在所有这些之上,那么使它尽可能薄且尽可能快的最佳方法是什么?

2
将第三人称相机旋转到目标
我有一台第三人称相机,它不直接看玩家,而是在他面前的某个地方。 当用户进入拍摄模式时,我希望相机转向播放器以面对目标。 在上图中。“ O”是玩家(来源),“ L”是角色,“ C”是摄像机位置,“ T”是目标。我想旋转后视线C-> L,以使其绕原点(“ O”)经过T(C'-> L'-> T')。 基本上,我需要找到在图片中以红色显示的角度alpha。 我将相机位置存储在这样的结构中: struct CameraTarget { Quaternion absoluteRotation; Vec3 absolutePosition; Vec3 cameraOffset; Vec3 lookatOffset; float FOV; } 因此,如果可以找到所需的角度,则可以执行以下操作: cam->absoluteRotation = cam->absoluteRotation * alpha; 为了让玩家始终注视目标。 如果look望通过原点,我可以简单地做 Vec3 origDir = cam->lookAtOffset - cam->absolutePosition; origDir.normalize(); Vec3 newDir = cam->target - cam->absolutePosition; newDir.normalize(); Quaternion …

4
如何制作没有OOP的游戏?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我目前正在研究游戏开发和练习制作游戏。 我在游戏中经常使用OOP。例如,发射的每枚导弹都是一个Missile对象的实例,并添加到Missile对象列表中。游戏中的每个坦克都是一个Tank物体。等等。 该程序的整个设计都基于此。例如,拥有一个Missile物体列表可以使我每一帧移动导弹,牵引导弹等。而Tank每个坦克都有一个对象实例可以让我检查每个坦克是否与某些物体发生碰撞等。 我很难想象如何用非OO语言编写游戏(比《吃豆人》更复杂)。(当然也要尊重非OO程序员)。不仅要花费多长时间,而且主要要以这种方式设计游戏。 我无法想象不使用面向对象的程序设计游戏,因为我对如何设计游戏程序的全部理解是基于OOP的。 我想问一问:今天,有没有像我上面所描述的那样没有使用OOP编程的游戏?是否有没有将OOP用作开发过程中主要因素的“专业”游戏? 如果是这样,您能否给我一个想法,例如,在没有OOP的情况下,如何实现坦克与N枚导弹之间的碰撞检测?

6
在评估制作游戏的库,引擎和框架时应该考虑什么?
我要去做个游戏。我注意到有很多可用的游戏引擎,库和框架,并且在确定使用哪个引擎时遇到了一些麻烦。 我已经对某些编程语言非常满意,但是有些我根本不了解。我不反对学习新的编程语言(如果有帮助的话),但我的真正目标只是制作自己的游戏。 我应该使用什么标准来比较引擎,库和框架之间的相互比较,以便可以决定哪个标准可以使我最有效率地完成比赛?

3
在六角形网格上显示范围
这是情况。 我有一个六角板,上面有一个单位,具有速度或移动值。4。地形不同,成本也不同。当我单击该单位时,游戏应向我显示移动范围。 我的解决方案是使用A *寻路来检查4个范围内的每个十六进制,如果路径成本小于4,则此范围内的十六进制。最后,游戏很好地向我显示了该单元的范围。 我的问题是:是否有其他解决方案可以在十六进制网格或正方形网格上搜索范围,因为即使我为自己在解决方案中所做的事情感到非常自豪,我认为这还是有点夸张了吗? 是什么让我问这个问题?我注意到,当单位速度为4或6甚至8时,我的计算机达到计算范围的时间确实不错,但是当速度为10或更高时,我注意到我需要等待几秒钟来进行计算在真实游戏中,我宁愿看不到这样的东西,而且我的A *寻路功能已经过优化,因此我认为我的解决方案是错误的。 感谢您的任何答复。

12
如果我不喜欢编程,如何制作视频游戏?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 6年前关闭。 我正在学校学习C ++代码(我的专业是计算机编程)。老实说,我的成绩不是很好,而且作业真的很辛苦。有时,我为将来的工作每天花8-10个小时(这很压力)感到难过。 但是我仍然想做电子游戏。也许这是我参加所有这些压力课程的唯一原因。我总是写下情节,故事,人物,虚构的游戏世界……曾经,我认为我应该学习艺术技术,例如游戏设计,而不是计算机技术,例如C ++,C#等。 但是,大多数受欢迎的游戏设计师(或导演),例如小岛,宫本等,过去都是优秀的程序员。公司会切实地将程序员分配给导演,因为他们了解如何制作游戏。 我试图找到其他大学或大学教授游戏设计程序的大学。但是,一篇列出北美排名前10位游戏设计学校的文章似乎并不可信,因为该调查公司仅从学生的干预中获得评分。 有一次,我试图去参加根据该文章排名第七的温哥华艺术学院。但是,曾经在那儿当过讲师的一位程序员告诉我一个事实:研究生的就业率很低。 如果我不喜欢编程,该如何将来开发游戏?


8
“级别字符串”的最佳解决方案?
我有一个会在关卡开始时生成随机关卡地图的游戏。我想实现某种保存和加载级别的方法。 我当时在想XML可能是保存所有变量的好选择,那么对我来说,构建可以解析XML并生成完全相同级别的内容很容易。 但是XML可能对我的需求而言过于严格。我记得当初使用旧的Sega游戏机无法保存您的游戏(我认为Worms游戏也可以保存游戏),它们会给您很多角色,您可以写下来。如果稍后再打入该字符串,它将加载准确的电平。 “级别字符串”会是一个不错的选择吗?会是某种“ base60”转换吗?我将如何实施呢?

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.