游戏开发

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

4
是否可以在Java游戏中实现Steamworks功能?怎么样?
我有一个基本的游戏,我想最终将其变成更好的东西。到目前为止,该游戏是全Java的,但是我想在我的游戏中实现Steamworks SDK(这样它就可以取得成就,获得Workshop等)。但是Steamworks需要C ++。是否可以使我的完整Java游戏实现Steamworks SDK而无需用C ++重写它?我目前正在为游戏使用jMonkey Engine 3。
11 java  steam 

2
轴对齐空间划分:将空间划分为随机矩形吗?
我需要一种将3d空间划分为随机轴对齐的盒子形状的方法。目前,我目前正在划分2d空间用于测试目的。我想到的最直接的方法是定义一个大小为(1,1)的矩形,然后将所有现有矩形递归地分成两个在X轴和Y轴之间交替的不平坦矩形。 这里的问题很明显。这种方法会导致拉伸线变长(以红色标记) 我想要的是更自然的外观(我提供了一个示例) 看,从上到下或从左到右没有长的直线。 唯一的限制是我可能希望限制矩形的最小大小,而不影响大小的粒度。也就是说,如果最小的rect是1平方厘米,而不是秒,则最小的房间不应是2平方单位。 因此,理想情况下,算法应满足以下三个约束: 矩形不是无限小。 矩形尺寸不是最小矩形尺寸的离散乘积。也就是说,如果最小的rect是3平方单位,则不将较大的rect约束为6、9、12等正方形单位,因此可以是3.2或4.7。 该算法以多项式时间运行(需要快速计算)。

4
2D碰撞检测
假设我正在使用此字符。 (来源:iconbug.com) 您将如何实现碰撞检测?使用边界框似乎不是一个很好的近似值,因为这只鸟的形状远不及正方形。 我正在考虑在对象内部具有一种表示图像部分的四叉树数据结构。每片叶子要么是false(如果它覆盖了鸟类外部的白色/透明空间),要么是true(如果它代表了鸟类的某个区域,例如喙,眼睛等)。然后以某种方式测试场景中与鸟类碰撞的唯一障碍。 但是我遇到的问题是: 我不知道如何初始化四叉树。 一旦四叉树被初始化,一旦障碍物在图像坐标内,我就不确定如何遍历和使用它。 如何处理非方形字符的冲突检测? LE:我见过的另一种方法是使用多个边界框。例如,我将为喙提供一个或几个边界框,然后为头发或尾巴添加一些边界框。但这会很乏味。如果对我而言这是一种有效的方法,我将如何生成这些边界框?我怀疑我是否必须在程序中对它们进行硬编码。 LE2:我关心的是相当精确的碰撞。我无法想象单个边界框或圆形如何至少可以像样地近似该形状,因此这种方法行不通。

3
3D渲染中索引的目的是什么?
假设您正在OpenGL中创建3D立方体。为对象(多维数据集)实现必要的顶点数据。使用索引的意义是什么? void CreateCube() { const Vertex VERTICES[8] = { { { -.5f, -.5f, .5f, 1 }, { 0, 0, 1, 1 } }, { { -.5f, .5f, .5f, 1 }, { 1, 0, 0, 1 } }, { { .5f, .5f, .5f, 1 }, { 0, 1, 0, 1 } …
11 opengl 

2
如何随机生成基于2D磁贴的侧向滚动地形?
我想使用以下tileset随机生成2D Sidecroller游戏的地图: 我发现了一些有关位屏蔽过程的好文章,例如:http : //www.angryfishstudios.com/2011/04/adventures-in-bitmasking/ http://www.saltgames.com/2010/a-bitwise -适用于贴图的方法/ 我喜欢使用位掩码/碎片掩码而不是执行巨大的if子句或switch语句的想法。 但是,我在可视化整个过程时遇到了麻烦,这些文章都没有提到随机化。 我的图块以多种不同的方式组合在一起,而不仅仅是我所链接的示例中的图块看起来的一种方式。 例如,这里仅是一些示例: 由于我的图块可以通过许多不同的方式组合在一起,因此我认为8位遮罩无法正常工作。因此,我正在考虑使用更大的位掩码。类似于char [8]或char 4。 如果有人可以显示一般算法外观的一些伪代码/示例,我将不胜感激。

2
OpenGL中的延迟平铺阴影,平铺视锥面计算
我正在尝试使用计算着色器在OpenGL中进行延迟的平铺着色,但是在尝试为每个平铺创建平截头体时遇到了障碍。我正在使用AMD的Forward +演示(用D3D编写)作为指导,但是当不应该使用时,灯光似乎被剔除了。 更新 阅读下面的更新。 这是我的(完整)计算着色器: #version 430 core #define MAX_LIGHTS 1024 #define MAX_LIGHTS_PER_TILE 40 #define WORK_GROUP_SIZE 16 struct PointLight { vec3 position; float radius; vec3 color; float intensity; }; layout (binding = 0, rgba32f) uniform writeonly image2D outTexture; layout (binding = 1, rgba32f) uniform readonly image2D normalDepth; layout (binding = …

3
为什么可能会遇到大于1或小于0的纹理坐标
我正在研究有关文本texture mapping,在preparing to draw会议中,我读到: 定义纹理包裹参数。这将控制在遇到纹理坐标大于1.0或小于0.0时发生的情况: glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,wrap); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,wrap); 其中wrap是: GL_REPEAT:指定如果遇到转换的纹理坐标小于0.0或大于1.0的情况,此模式将重复(即环绕)。 GL_CLAMP:指定模式将“固定”为0.0或1.0的值。 但是没有任何解释遇到这种纹理坐标的原因是什么? 例如,假设我刚刚绘制了一个矩形,并且想在其上应用图像作为纹理,是否有可能遇到这样的坐标?

3
为什么要从渲染中分离对象?
Disclamer:我知道什么是实体系统模式,但我没有使用它。 我已经阅读了很多有关分离对象和渲染的内容。关于游戏逻辑应独立于底层渲染引擎的事实。这一切都很好,很花哨,而且很合理,但同时也会引起很多其他麻烦: 逻辑对象和渲染对象(保持动画,精灵等的状态)之间需要同步 需要向公众开放逻辑对象,以便渲染对象读取逻辑对象的实际状态(通常使逻辑对象容易在笨拙的getter和setter对象中进行转换) 这听起来对我来说不是一个好的解决方案。另一方面,将对象想象为3d(或2d)表示形式非常直观,并且易于维护(也可能封装得更多)。 有没有一种方法可以将图形表示和游戏逻辑保持在一起(避免同步问题),但又抽象了渲染引擎?还是有一种方法可以将游戏逻辑和渲染分开,而不会导致上述缺点? (可能带有示例,我不太擅长理解抽象演讲)

2
什么是数据驱动设计?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我一直在阅读许多文章,涵盖游戏的数据驱动设计。它似乎可以归结为: 没有硬编码 引擎中没有游戏专用代码 AI,过场动画等脚本。 泛化代码的可重用性 元件设计 模块化 低耦合 编辑器(用于数据,地图,脚本) 外部数据检索 保存在文本文件中的常量(.ini或其他) 通过编辑器公开数据,以供设计师进行脚本编写和操作 现在,我的问题是,这种理解正确吗?

3
有效分离读取/计算/写入步骤,以便在实体/组件系统中对实体进行并发处理
设定 我有一个实体组件体系结构,其中实体可以具有一组属性(它们是纯数据,没有任何行为),并且存在运行运行于该数据上的实体逻辑的系统。本质上,用某种伪代码: Entity { id; map<id_type, Attribute> attributes; } System { update(); vector<Entity> entities; } 只是以恒定的速率沿所有实体移动的系统可能是 MovementSystem extends System { update() { for each entity in entities position = entity.attributes["position"]; position += vec3(1,1,1); } } 本质上,我正在尝试尽可能高效地并行化update()。这可以通过并行运行整个系统来完成,也可以通过为一个系统的每个update()提供几个组件来实现,以便不同的线程可以执行同一系统的更新,但对于在该系统中注册的实体的不同子集而言。 问题 对于所示的MovementSystem,并行化是微不足道的。由于实体彼此不依赖,并且不修改共享数据,因此我们可以并行移动所有实体。 但是,这些系统有时要求实体彼此交互(从/向彼此读/写数据),有时在同一系统内,但经常在彼此依赖的不同系统之间。 例如,在物理系统中,有时实体可能会彼此交互。两个对象发生碰撞,它们的位置,速度和其他属性会从它们读取,更新,然后将更新后的属性写回到两个实体。 并且在引擎中的渲染系统可以开始渲染实体之前,它必须等待其他系统完成执行,以确保所有相关属性都是它们所需要的。 如果我们试图盲目地并行化它,这将导致经典的竞争条件,其中不同的系统可能同时读取和修改数据。 理想情况下,将存在一种解决方案,其中所有系统都可以从其希望的任何实体读取数据,而不必担心其他系统同时修改相同的数据,而无需程序员关心正确地排序执行和并行化。这些系统是手动的(有时甚至是不可能的)。 在基本实现中,这可以通过将所有数据读写放在关键部分中(用互斥锁保护它们)来实现。但是,这会导致大量的运行时开销,并且可能不适用于对性能敏感的应用程序。 解? 在我看来,可能的解决方案是将数据的读取/更新和写入分开的系统,以便在一个昂贵的阶段,系统仅读取数据并计算其需要计算的内容,以某种方式缓存结果,然后将所有内容写入将更改后的数据通过单独的写入传递回目标实体。所有系统都将以数据在帧开始时的状态对数据进行操作,然后在帧结束之前,在所有系统完成更新后,会发生序列化写入过程,其中所有不同的缓存结果系统遍历并写回到目标实体。 这是基于(可能错了?)的思想,即简单的并行化胜利可能足以超过结果缓存和写入过程的成本(在运行时性能以及代码开销方面)。 问题 如何实现这样的系统以获得最佳性能?这样的系统的实现细节是什么?要使用此解决方案的实体组件系统的先决条件是什么?

2
如何同步多人游戏中的跳跃等动作?
我是新手游戏开发人员,并且我一直在研究多人游戏。我观察到总会有一些延迟,玩家总是会从过去的动作中获得更新。但是,有诸如航位推测法之类的技术可以处理延迟。我可以预测运动并使运动平稳。但是我将如何使动作同步,例如跳跃,停止行走等。 假设客户A在移动,他以100m / sec的速度在10.2时处于100m并发送了此信息。客户B稍后会收到此信息,设为10.4。因此,在客户端B,我可以使用预测并将客户端A放置在120m处。但是,如果客户在10.3跳到110m,该怎么办?我无法预测,并且由于我一直在使用预测,所以无法显示客户A的过去。 我可能根本不发送跳转动作来解决此问题。但是,如果我的游戏中存在一些空隙,玩家可以跌倒并死亡。因此,如果我不同步跳跃动作,其他玩家将观察到一个玩家在跑步,然后他陷入虚无,然后再次出现在屏幕上,破坏了视觉吸引力。 跳转只是一个例子,可能在许多情况下无法进行预测。因此,如何处理它们。这样的示例之一可以是像Awesomenauts这样的多人在线战斗竞技场游戏。

4
如何在基于回合,基于距离的策略游戏中确定可能的运动范围?
我正在使用c ++和SFML-2.0创建一个二维的,基于回合的策略游戏。运动是基于距离的,而不是基于网格的,具有几个不同的三角形块,这些三角形块在给定的转弯中可以就位旋转或向前移动。 移动将以这样的方式进行:玩家选择棋子要移动到的位置,从而为棋子生成一条可能的路径。玩家确认自己的决定后,棋子将沿着该路径移动到所需位置。路径受到两个因素的限制:距离,一块东西可以走多远,考虑任何转弯(因此,如果有一条曲线,它将是沿着曲线的长度,而不是直接从一点到另一点);和转向角,即在移动(例如,从-30度到30度)时,该零件在任何(以及每个点)可以旋转多远。 我的问题是,我应该如何确定玩家可以选择将棋子移动到的潜在位置范围? 我不确定要在这里使用什么方程式和/或算法。我最初的计划过于复杂,以至于几乎无法实施,更不用说解释了,在这一点上,我因项目停滞而完全迷失了。 考虑到其转弯半径,如何确定设备可以移动的范围? 例如,在下图中。红线,蓝线和绿线的长度都相同。紫色圆圈表示单位可以移动的移动范围。(形状可能不准确,线条的长度实际上可能不相同,但您会明白的)

3
我知道超级简单的多人游戏设置可能不是一个好主意,但是为什么呢?
我正在做一个简单的小MOBA,只是为了好玩。我把所有东西都做成单人游戏,然后我意识到:“糟糕,我应该添加多人游戏,对吧。” 我以前从未进行过联网工作,因此学习如何将Lidgren集成到我的游戏中既有趣又很棒。问题是,据我所知,我几乎知道我做事的方式是错误的,因为据我所知,它不足以使主流游戏使用,但是这又有什么问题呢? 基本上,我正在做的是,只要玩家执行某项操作,它就会向服务器发送一条消息,说“嘿,我刚刚做了这件事”。服务器和客户端都运行相同的模拟。然后,服务器向所有其他客户端发送一条消息,告诉他们该家伙做了那个事情。 在大多数情况下,除了在少数情况下,当玩家做某事时,客户会认为它很酷,并自行进行。因此,当您右键单击某个位置以将其移动到该位置时,该玩家的客户便开始将他的家伙移至该位置,然后向服务器发送一条消息以告知其相关信息。 所以基本上: 玩家1发射一个咒语,使他的移动速度提高100%,持续6秒 玩家1的本地客户将该buff添加到他的Unit对象中 玩家1的客户端向服务器发送一条消息,说“嘿,我刚刚施放了此咒语” 服务器确保他确实有足够的魔法来施放该咒语,如果是,则将该buff添加到该Unit对象的服务器副本中 服务器向所有其他客户端发送一条消息,说“嘿,这个家伙刚刚施了这个咒语” 其他所有客户端都会收到此消息,并“很酷”,然后将该buff添加到该玩家的本地Unit对象中 我一直在浏览一些东西,以了解大型游戏是如何进行多人游戏的,这对于刚开始涉足此游戏的人来说有点令人困惑,但是看起来Source引擎发送了一个包含所有更改的数据包。世界每一刻?再说一遍,对于这些东西来说是全新的,但是您真的可以经常推送那么多数据吗? 抱歉,这有点不合理,但是基本上,我想知道为什么我的简单系统不是正确的方法,因为如果是这样,其他游戏会使用它,对吗?

1
如何知道播放器是否已登录?
我想知道是否有办法知道“玩家”是否已登录? 像这样: if (GamePad.GetState(PlayerIndex.Two).IsConnected && !Gamer.PlayerTwo.IsSignedIn) 这样就可以连接控制器并可以使用它,但播放器未登录到帐户。有点像猜测。

2
什么时候应该在RPG中使用技能树而不是技能列表?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 在角色扮演游戏中,技能树与固定技能列表的优缺点是什么?在哪种情况下比另一种更合适? 这是一个技巧列表的示例,摘自上古卷轴IV:遗忘: 这是一个来自《暗黑破坏神II》的技能树示例: 一些其他问题: 技能树在本质上比技能列表更复杂吗? 技能列表是否倾向于广泛地涵盖角色的能力,而技能树则专注于角色的特定咒语或方面? 上古卷轴:晨风使用技能列表,并拥有一项称为竞技的技能,该技能已在天际中删除。技能列表中技能的松散耦合是否会使创建无用或无关的技能更容易?
11 game-design  rpg 

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.