游戏开发

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

1
在同一过程中运行服务器和客户端
题 我才刚刚开始与Lidgren和网络合作,并且我意识到可以在同一过程中同时运行服务器和客户端。 是否出于任何原因不鼓励这种做法? 语境 我问的原因是因为我从理论上讲,该概念可能使我将单人游戏模式和多人游戏模式都视为同一模式,这将非常有帮助。 按照我的思路,这是我想到的分布: 单人游戏-1个服务器+ 1个客户端在同一过程中。通信速度有多快? 多人游戏-与主机的单人游戏相同,彼此之间有 1个附加客户端。 我正在描绘的执行流程是供客户端接收用户输入并将通知发送到服务器的。然后,服务器对其进行验证,并广播将由所有客户端执行的操作。只有一个客户端(即单人游戏)还是多个客户端(即多人游戏)都没关系。

3
如何像Minecraft一样处理Block World
我想写一个像《我的世界》这样的带有方块世界的简单游戏。我的理论问题是在播放期间处理此块信息的最佳方法是什么。我的第一个想法是一个庞大的数组,但是我认为这将导致内存不足。也许我只需要在播放器附近加载块。 如何处理从文件中加载所需的块信息并仅将所需的信息保留在内存中?

2
重播系统:记录输入或事件?
我读了这篇文章:如何设计一个重放系统,但是它并不能真正回答我的问题。 我的游戏是用游戏的客户端“视图”作为与服务器“模型”和“控制器”分开的程序构建的。(有点像mmo或以此方式构建的任何多人游戏)。服务器端始终是游戏的“真相”,它仅接受动作请求作为来自客户端的输入,并输出事件和“当前状态”消息。 游戏模型和规则是完全确定的,并且具有固定的“刻度”更新周期,因此在服务器端,我既可以记录发送到客户端视图的事件,也可以记录操作请求。两者都与特定的循环编号相关。 问题是:在这种情况下,要设置重放系统,我应该使用输入内容还是用户操作请求(如此处所建议)或事件? 在我看来,两者将给出完全相同的输出。我可以看到的唯一区别是: 事件提供真正的输出,而必须处理操作请求以提供事件。 动作请求可能要记录的数据要少得多。 还有其他事情要考虑吗?


3
基于实体组件系统的引擎
注意:我正在用Javascript编程,但是在大多数情况下,它应该与语言无关。 我正在考虑将引擎转换为基于ECS的引擎。 我有基本的想法(注意:这是错误的,请参见我的回答): 实体是游戏对象。 组件是可以“粘合”到实体的功能(reactToInput())或状态(position)的一部分。 系统具有它们管理和更新的实体的列表。 但是,我不确定我是否可以获得实现和一些细节... 问题:系统可以在不同种类的实体上运行吗?我通常以Scene在引擎中称为类的示例为例,它现在也将用于此目的。场景是所有可以渲染,更新,影响渲染(灯光)的对象的容器,甚至将来甚至可能是2DSoundEmitter对象。它具有一个高级界面,因此用户无需担心他正在播放的对象的类型scene.add()以及所有类似的东西。 我意识到这Scene可能是一个系统。它接受实体,进行存储,然后可以调用其更新方法,甚至可以进行一些状态更改。但是,有一个问题:如上所述,Scene可以为不同类型的对象喂食!例如,在场景中既包含可渲染对象(“可绘制对象”)又包含灯光的情况下,我该怎么办?互动之前,我应该让它进行类型检查吗?或者,我应该在更低的层次上解决它:制作一个LightSource可以添加到任何对象的组件,并且灯光将仅仅是具有LightSource和Position组件的实体。可以接受吗? 另外,仍然使用常规继承和传统类是否是一个好习惯?例如,我只是不知道我Renderer会是什么!它不是一个系统,因为它的唯一功能是获取摄像机和场景,渲染所有内容并应用效果(例如阴影)。它还管理游戏的上下文,宽度和高度,进行翻译……但是它仍然不是系统! 编辑:您是否可以链接在ECS上找到的任何资源?我很难找到好的。

3
QuadTree:仅存储点还是区域?
我正在开发四叉树,以跟踪移动物体以进行碰撞检测。每个对象都有一个边界形状,假设它们都是圆形。(这是一个二维的自上而下的游戏) 我不确定是否只存储每个对象的位置或整个边界形状。 如果使用点,则插入和细分很容易,因为对象永远不会跨越多个节点。另一方面,对对象的邻近查询可能会错过碰撞,因为它不会考虑对象的尺寸。只有点时如何计算查询区域? 如果使用区域,如何处理跨越多个节点的对象?即使它超出了节点的容量,也应该将其插入到完全包含它的最近的父节点中吗? 谢谢。
9 quadtree 

4
可变长度循环对GPU着色器的影响
它很流行在GPU内渲染程序内容,例如在演示场景中(绘制单个四边形以填充屏幕并让GPU计算像素)。 雷行军很受欢迎: 这意味着GPU正在每个像素执行一些未知数量的循环迭代(尽管您可以将上限设为maxIterations)。 具有可变长度的循环如何影响着色器性能? 想象一下简单的光线行进伪代码: t = 0.f; while(t < maxDist) { p = rayStart + rayDir * t; d = DistanceFunc(p); t += d; if(d < epsilon) { ... emit p return; } } 各种主流GPU系列(Nvidia,ATI,PowerVR,Mali,Intel等)如何受到影响?顶点着色器,尤其是片段着色器? 如何进行优化?

3
宝石迷阵下一个最佳珠宝选择
有没有我可以使用的游戏设计技术,这样我就可以完全消除“不再留左手”的情况。即。游戏中不应包含任何不可能的场景。 据我猜测,这完全取决于3或4个珠宝组溶解后所用的珠宝和位置。 可能吗 ? An always infinitely solvable Bejewelled game?

1
人们如何绕过Carmack的Reverse专利?
显然,创新对卡马克的反向专利,以及他们成功地迫使ID来修改他们的技术源下降,以及包括EAX在Doom 3。 但是Carmack的Reverse经常被讨论,显然,它是延迟着色的一个不错的选择,因此大概也可以在许多其他高预算产品中使用它。 尽管Creative不太可能会追随较小的公司,但我想知道较大的工作室如何解决这个问题。他们只是希望自己的手指交叉并且希望Creative不会拖拉他们,还是根本不使用Carmack的Reverse?

3
如何在运行时的动态环境中生成二维导航网格?
因此,我已经掌握了如何使用A *进行路径查找,并且能够在网格上使用它。但是,我的游戏世界很大,我有很多敌人向玩家移动,而玩家是移动的目标,因此网格系统对于寻路太慢。我需要通过使用导航网格来简化节点图。 我掌握了网格“如何工作”的概念(通过顶点和/或多边形边缘中心找到一条路径)。 我的游戏使用在运行时程序性生成的动态障碍。 我不太了解如何拍摄一个有多个障碍物的飞机,并以编程方式将可步行区域划分为用于导航网格的多边形,如下图所示。 我从哪里开始?我怎么知道何时已经定义了一个可行走区域,或更糟糕的是,当我意识到我需要在算法“遍历”地图时细分一个先前定义的可行走区域时? 如果有问题,我正在nodejs中使用javascript。

2
帧率限制
最成功的竞技游戏引擎喜欢id Tech,GoldSrc,Source和这样的允许帧率限制。 您可以玩30、60、99、72、68等。总之,您可以设置其上限并控制上限。 我想知道如何限制帧率? 对代码不感兴趣,但对理论不感兴趣。


3
轻量级局域网对等发现的解决方案?
我建立了一个用于纯跨平台编程的库。我用它制作的游戏在Android,Pc,Linux,Mac等系统中运行良好。 ENET库提供了网络功能,因此我的应用程序之间的所有通信都不兼容TCP或UDP,而只能使用自定义协议,即使最终基于UDP也是如此。 我认为用ENET无法实现我想要的功能,这就是为什么我在这里寻求帮助! 可以说,我的Android手机,笔记本电脑和PC中都运行着相同的游戏。它们都在同一个wifi网络中,因此都在LAN中,无论是其Wifi热点(?)还是家用路由器。 我需要这3个对等方中的每一个来发现网络中的其他2个。这仅意味着在LAN网络中找到运行中的应用程序的IP,以便能够在它们之间托管多人游戏。 我只能想到一种有效的方法,即UDP广播,等待响应,但是如果这是解决方案,则我需要一些小东西,因为这是实现的唯一目的。 其他方法可能是尝试连接到LAN地址子范围中的所有IP,但是我不认为OS会和我一起在此:p

3
第一次阴影贴图问题
我第一次使用着色器在OpenGL中实现了基本的阴影映射,现在遇到了一些问题。在下面,您可以看到我渲染的场景的示例: 我要进行的阴影映射的过程是,我使用“视图矩阵”从光的角度以及用于正常渲染的投影和模型矩阵将场景渲染到帧缓冲区。 在第二遍中,我将上述MVP矩阵从光的角度发送到顶点着色器,该顶点着色器将位置转换为光空间。片段着色器进行透视划分,并将位置更改为纹理坐标。 这是我的顶点着色器, #version 150 core uniform mat4 ModelViewMatrix; uniform mat3 NormalMatrix; uniform mat4 MVPMatrix; uniform mat4 lightMVP; uniform float scale; in vec3 in_Position; in vec3 in_Normal; in vec2 in_TexCoord; smooth out vec3 pass_Normal; smooth out vec3 pass_Position; smooth out vec2 TexCoord; smooth out vec4 lightspace_Position; void main(void){ pass_Normal …

2
处理场景中的许多灯光(带有着色器)
我很好奇如何处理场景中的许多灯光。给定角色扮演游戏中非常大的地图,其中包括地牢(其中有灯光)等。我知道延迟照明,但这只能回答如何渲染许多灯光。但是我的问题更多:如何不渲染很多灯光。仅渲染影响场景的灯光显然是可取的,但是我不知道将其存档的技术/算法。没有人希望甚至能够渲染500个点光源,仅仅是因为地图上的某个地方。但是,人们不能只是从灯光到玩家的直线,并测试两者之间是否有直线。距离似乎也不是一个好的指标。(阳光?) tl; dr:如何找出仅影响渲染的灯光会影响场景?

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.