游戏开发

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



6
如何决定哪个GameObject应该处理碰撞?
在任何碰撞中,都涉及两个GameObjects,对吗?我想知道的是,如何确定哪个对象应包含我的对象OnCollision*? 作为示例,假设我有一个Player对象和一个Spike对象。我首先想到的是在播放器上放一个脚本,其中包含一些如下代码: OnCollisionEnter(Collision coll) { if (coll.gameObject.compareTag("Spike")) { Destroy(gameObject); } } 当然,可以通过在Spike对象上包含一个包含以下代码的脚本来实现完全相同的功能: OnCollisionEnter(Collision coll) { if (coll.gameObject.compareTag("Player")) { Destroy(coll.gameObject); } } 虽然两者都有效,但在Player上放置脚本对我来说更有意义,因为在这种情况下,发生碰撞时,正在对Player进行操作。 但是,令我感到怀疑的是,将来您可能希望添加更多会在碰撞时杀死播放器的对象,例如敌人,熔岩,激光束等。这些对象可能具有不同的标签。因此,播放器上的脚本将变为: OnCollisionEnter(Collision coll) { GameObject other = coll.gameObject; if (other.compareTag("Spike") || other.compareTag("Lava") || other.compareTag("Enemy")) { Destroy(gameObject); } } 而在脚本位于Spike上的情况下,您要做的就是将相同的脚本添加到所有其他可能杀死Player的对象上,并命名该脚本为KillPlayerOnContact。 另外,如果您在播放器和敌人之间发生碰撞,那么您可能想对两者都执行操作。那么在那种情况下,哪个对象应该处理碰撞?还是应该同时处理碰撞并执行不同的动作? 我以前从未开发过任何大小合适的游戏,而且我想知道,如果一开始就把这种事情弄错了,代码是否会变得混乱并且难以维护。也许所有方法都是有效的,这并不重要吗? 非常感谢任何见解!感谢您的时间 :)


5
游戏架构/设计问题-在避免全局实例的同时构建高效的引擎(C ++游戏)
我对游戏体系结构有一个疑问:使不同组件相互通信的最佳方法是什么? 如果这个问题已经被问了一百万遍,我真的很抱歉,但是我找不到任何与我正在寻找的信息完全相同的信息。 我一直在尝试从头开始构建游戏(如果需要的话,请使用C ++),并观察了一些开源游戏软件的灵感(超级玛丽纪事报,OpenTTD等)。我注意到许多此类游戏设计在整个地方使用全局实例和/或单例(用于渲染队列,实体管理器,视频管理器等)。我试图避免使用全局实例和单例,并构建一个尽可能松散耦合的引擎,但是由于我对有效设计的缺乏经验,我遇到了一些障碍。(此项目的部分动机是解决这个问题:) 我已经建立了一个设计,其中有一个主要GameCore对象,该对象的成员类似于我在其他项目中看到的全局实例(即,它具有一个输入管理器,一个视频管理器,一个GameStage控制所有实体和游戏玩法的对象)对于当前加载的任何阶段等)。问题在于,由于一切都集中在GameCore对象中,所以我没有一种简单的方法来使不同的组件相互通信。 例如,以《超级玛丽纪事》为例,每当游戏的某个组件需要与另一个组件进行通信时(即,一个敌对对象想要将其自身添加到要在渲染阶段绘制的渲染队列中),它只会与全局实例。 对我来说,我必须让我的游戏对象将相关信息传递回该GameCore对象,以便该GameCore对象可以将该信息传递给需要它的系统的其他组件(即:对于上述情况,每个敌人对象会将其渲染信息传递回GameStage对象,对象将收集所有信息并将其传递回GameCore,然后依次将其传递给视频管理器进行渲染)。这确实感觉像是一个非常可怕的设计,而我正试图考虑一个解决方案。我对可能的设计的想法: 全局实例(Super Maryo Chronicles设计,OpenTTD等) 让GameCore对象充当中间对象,所有对象都通过该中间人进行通信(上述当前设计) 为组件提供指向它们将要与之交谈的所有其他组件的指针(即,在上面的Maryo示例中,敌人类将具有一个与之交谈的视频对象的指针) 将游戏分为子系统-例如,在对象中具有管理器对象,以GameCore处理子系统中对象之间的通信 (其他选项?...。) 我以为上面的选项4是最好的解决方案,但是我在设计它时遇到了一些麻烦……也许是因为我一直在考虑使用全局变量的设计。感觉就像我正在处理当前设计中存在的相同问题,并在每个子系统中以较小的比例复制它。例如,GameStage上面描述的对象为此在某种程度上做了尝试,但是该GameCore对象仍然参与该过程。 有人可以在这里提供任何设计建议吗? 谢谢!
28 c++  architecture 

4
是否有一种算法可以检测2D地图上的“大陆”?
在此地图上,“大陆”是指可以在四个基本方向(北,南,东,西-而不是对角线)上连接到地图中心的所有土地。 我想发现大陆并填补其中的空白。我想到了三件事: 如果可以使用路径查找算法将每个非水(暗单元)单元连接到地图中心,则进行搜索。太贵了!但这可能适用于这些岛屿。 大陆上满是一桶绿色的油漆。每个孔都被油漆包围着...现在呢?如果我检查大陆内部的每个水位是否相邻,我将删除海岸线上显示的一些半岛和其他地理特征。 某种边缘检测可以弄清楚大陆。保留里面的东西,如果是水则填满,除去外面的东西。复杂? 也许一些有游戏经验的开发人员可以帮我解决这个问题,也许可以给我一些已知算法或技术的名称?
28 algorithm  maps 

3
地图生成的随机种子函数?
我正在寻找一个函数来生成随机的,基于图块的地图,因为地图的视觉边界发生了变化(通过地图)。我希望地图无限大,并具有迷宫般的结构。 但是,如果世界是无限的,那么回到玩家之前所处的位置会带来问题。游戏必须记住那里所有东西的实际外观。 所以,我在想-“我的世界如何解决这个问题?” 我以为自己必须使用某种带有种子的随机数函数,该函数既可以向前又可以向后移动,这样就可以像以前一样完全重新生成旧的图块,但是在新的实例中。 您对此有何想法?

2
俄罗斯方块是公共领域吗?[关闭]
是俄罗斯方块的概念在公共领域中使用,还是有人仍在为该概念收取版税?我的意思是,如果我要编写《俄罗斯方块》的变体,我会欠别人一些钱吗?谢谢。
28 legal 

6
设计游戏-从哪里开始?[关闭]
我和我的一个朋友正在计划一起比赛,以便在我们的业余时间工作。这不是一个广泛的游戏,但也不是一个简单的游戏。 在我研究图形和代码的同时,他正在研究游戏背后的故事。 我真的不知道从哪里开始。我们知道游戏的基本类型以及如何进行游戏,但是我很难知道从哪里开始。 我已经打开Xcode,但是我什至不知道我应该先设计什么。 对这个作家的障碍有什么建议?从哪里开始游戏的好地方?我应该在接触Xcode之前设计所有图形和布局吗?我应该先编程一下我知道会遇到困难的东西,然后再去学习简单的东西吗?


2
有没有办法以程序方式产生一个世界的历史?
我发现这里的图表代表了一个人在一个虚构的世界中1800年的文化历史,对此我颇有兴趣。 就世界设计而言,这种东西似乎在游戏开发中具有强大的应用。 看起来他是手工绘制的。我感兴趣的是查看是否有一种以编程方式创建这种图表的方法。 如果您负责从随机值生成上述样式的图表,您将如何处理?您是否会考虑任何特定的数据结构或算法?

10
使飞船飞快的效果
我有一个太空飞船,并且创建了一个“加速”功能来加速我的太空飞船,我应该实现什么效果才能产生高速感? 我当时想使除飞船之外的所有物体变得模糊不清,但我认为会丢失一些东西。有任何想法吗? 顺便说一句。我正在使用XNA C#,但如果您对XNA不熟悉,则描述某些效果仍然有用。 游戏是3D游戏,我附上了游戏的一些印刷屏幕 这是正常模式(无增强) 这是升压模式(当相机以正常速度加速时,飞行器向前加速,非升压速度)

4
游戏故事事件编程
我用c / c ++和DirectX开发了一个游戏引擎。 我有一个用于地图的图块引擎,动画播放器/ npc精灵,与npc对话,菜单和级别更改,但没有游戏,只是感觉很空。 我环顾四周,不断听到流行语的答案,但我想知道如何在游戏中实现一个故事。 有人说过一个保存文件,其中包含用于控制游戏中所有可能的动作/状态的标志,但这听起来很荒谬。 这有点雄心勃勃,但我的目标是让游戏像老式的Pokemon / Final Fantasy游戏一样。 有谁知道这些游戏的运作方式或所使用的理论吗? 我已经寻找了一段时间,非常感谢人们的投入。
28 c++  directx 

2
Android游戏应使用多少个线程?
至少,一个OpenGL Android游戏具有一个UI线程和一个由创建的Renderer线程GLSurfaceView。 Renderer.onDrawFrame()应该做最少的工作以获得最佳的FPS。物理,AI等不需要运行每一帧,因此我们可以将它们放在另一个线程中。现在我们有: 渲染器线程-更新动画并绘制多边形 游戏线程-逻辑与周期性物理学,AI等更新 UI线程-仅适用于Android UI交互 由于您永远不想阻塞UI线程,因此我为游戏逻辑运行了一个线程。也许那不是必需的?有没有理由在渲染器线程中运行游戏逻辑?


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.