游戏开发

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

3
OpenGL顶点数组对象(VAO)中存储什么状态?如何正确使用VAO?
我想知道OpenGL VAO中存储了什么状态。我知道VAO包含与缓冲顶点的顶点规范有关的状态(缓冲区中包含哪些属性,绑定了哪些缓冲区,...)。为了更好地了解VAO的正确用法,我想确切知道它们的状态。 我如何假设应使用VAO 通过简单的示例,我了解到VAO的正确用法如下: 设定 Generate VAO BindVAO ---- Specify vertex attributes ---- Generate VBO's ---- BindVBO's -------- Buffer vertex data in VBO's ---- Unbind VBO's Unbind VAO 渲染图 Bind VAO ---- Draw Unbind VAO 据此,我假设至少顶点缓冲区绑定和顶点属性规范存储在VAO中。但是我不确定这种使用模式如何扩展到(多个)纹理和(多个)着色器程序起作用的情况。是主动着色器程序存储在VAO?并且纹理绑定(及其采样/包装设置)也存储在VAO中吗?同上制服? 因此,我的问题是: OpenGL VAO中存储了什么确切状态?(VBO绑定,属性规范,活动着色器程序,纹理绑定,纹理采样/包装设置,制服...?) 如何在更复杂的渲染设置中正确使用VAO,其中包含(多个)纹理以及相关的采样/包装设置,(多个)着色器程序和均匀性?
25 opengl  vao 

2
我如何教我的艺术家做游戏美术?
因此,我的女友是一名艺术家,而我是一名程序员,我们经常谈论加入才华,并为目前不同的流行平台制作一些小型游戏或其他有趣的东西。 但是因为我还没有真正认真地进行游戏开发,所以我很难向她解释她应该如何创建或打包自己制作的资产,因此我们总是最终不做任何事情。 我在这里主要考虑的是进行逐帧动画处理时。我知道精灵表用于这种事情,但是接下来会出现诸如每秒帧之类的问题。不是程序明智的,而是艺术方面的。 我们应该如何解决呢?
25 art 


6
如何给玩家的决定施加时间压力?
我正在设计一个黑客游戏,玩家通常可以花时间思考如何克服当前面临的障碍。但是,我认为除了提出聪明的解决方案外,骇客还应该感到很紧张,并且游戏需要一些方法来给玩家的决定施加时间压力。 首先,我添加的这种机制使我确信我朝着正确的方向前进:有时玩家可以触发网络跟踪,持续X秒,并且有可能将玩家踢出网络,除非他/她作出足够迅速的反应并成功完成。逃避痕迹。我想添加一两个以上的机制来使玩家承受一定的时间压力,但我有些卡住,并且似乎总是想出“倒计时”的变化形式,即“会有(惩罚)在(X)秒内,除非(采取了某些措施)',但显然所有这些机制最终都过于相似。 用抽象的术语(即,不了解规则集中的特定机制),如何在玩家的决策上施加时间压力?

3
如何使用CD密钥/序列号保护我的游戏?
因此,我决定通过断开与错误或生成的,重复的或被禁止的CD的客户端的连接,以防止我的XNA游戏的盗版副本访问官方游戏服务器(经过审核,因此为游戏付费的人将获得最好的体验)。键(或序列号,因为游戏是数字游戏,没有CD)。 如何将序列号保护系统(包括客户端和主身份验证服务器)放入我的游戏,因此不容易被黑客入侵? 请注意,我没有为软件提供良好保护的经验。 我以前从未做过,但是我了解基本知识。我知道为什么我不能在客户端上进行密钥检查,所以我可以将登录/通过身份验证与一次性密钥输入结合使用。 当前,此保护的目标是防止潜在的作弊者,并破坏玩家的行为,使其脱离官方服务器。任何人都可以在带有或不带有钥匙的私人服务器上玩游戏,但是他们获得与其他玩家的不愉快体验的机会更大。我想购买玩家很容易,因为他们必须在线才能在官方服务器上玩。 因为黑客客户端太容易了,所以我将只保护初始注册(可能还有服务器端身份验证)过程,因此在传输密钥时没有人可以窃取密钥。 也可以看看: 多人游戏应如何处理身份验证?
25 security 

3
您如何以编程方式生成球体?
有人可以解释一下如何创建球体的顶点,索引和纹理坐标吗?令人惊讶的是缺少有关如何执行此操作的文档,这是我感兴趣的东西。 我尝试了显而易见的搜索,在gamedev.net上进行了搜索,等等。但是,没有什么可以涵盖世代的球形点,对其进行索引和构造。

4
“游戏对象”-和基于组件的设计
在过去的3-4年中,我一直在从事一些业余爱好项目。只是简单的2d和3d游戏。但是最近我开始了一个更大的项目。在过去的几个月中,Soo一直在尝试设计一个游戏对象类,该类可以作为我所有游戏对象的基础。因此,在进行了多次尝试和模子测试之后,我转向了Google,该公司迅速为我指出了一些GDC PDF和PowerPoint。现在,我试图掌握基于组件的游戏对象。 我知道引擎会创建一个游戏对象,然后附加不同的组件来处理诸如健康,物理,网络以及您所做的任何事情。但是我不明白的是,组件X如何知道Y是否更改了对象的状态。就像PhysicsComponent如何知道玩家是否还活着一样,因为健康状况由HealthComponent控制。HealthComponent如何播放“玩家死亡动画”? 我的印象是(在HealthComponent中)是这样的: if(Health < 0) { AnimationComponent.PlayAnimation("played-died-animation") } 但是话又说回来,HealthComponent如何知道附加的游戏对象是否附加了AnimationComponent?我在这里看到的唯一解决方案是 检查是否连接了AnimationComponent(在组件代码内部或在引擎侧) 有组件需要其他组件,但这似乎与整个组件设计相抗衡。 像HealthWithAnimationComponent,HealthNoAnimationComponent这样写,如此反复,似乎又与整个组件设计思想相抵触。

6
抢占行为树
我试图绕过行为树,所以我要花一些测试代码。我正在努力解决的一件事是,当出现更高优先级的东西时,如何抢占当前正在运行的节点。 考虑一下以下简单的士兵行为树: 假设经过了一些滴答声并且附近没有敌人,那名士兵正站在草地上,因此选择了“ 坐下”节点以执行该命令: 现在,“ 坐下”动作需要时间才能执行,因为要播放动画,因此它会返回Running其状态。一两个勾号过去了,动画仍在运行,但是敌人在附近吗?条件节点触发器。现在,我们需要尽快抢占Sit down节点,以便执行Attack节点。理想情况下,士兵甚至都不会坐下来–如果他只是开始坐下,他可能会反转动画方向。为了增加逼真度,如果他已经超过动画中的临界点,我们可以选择让他完成坐下然后再站起来,或者让他跌跌撞撞地对威胁做出反应。 尽我所能,我一直无法找到有关如何处理这种情况的指南。过去几天(而且很多)我消费的所有文献和视频似乎都绕过了这个问题。我能找到的最接近的东西是重置运行中的节点的概念,但这并不能使像Sit down这样的节点有机会说“嘿,我还没有完成!” 我想到也许在我的基类上定义一个Preempt()or Interrupt()方法Node。不同的节点可以按照自己认为合适的方式进行处理,但是在这种情况下,我们将尝试让士兵尽快站起来然后返回Success。我认为这种方法还需要我的基地Node将条件的概念与其他行动分开。这样,引擎只能检查条件,如果条件通过,则可以在开始执行动作之前先抢占任何当前正在执行的节点。如果未建立这种区分,则引擎将需要不加选择地执行节点,因此可能会在抢占正在运行的节点之前触发新的操作。 供参考,以下是我当前的基类。再说一次,这是一个高峰,所以我试图使事情尽可能简单,仅在需要时以及当我理解时才增加复杂性,这就是我现在正在努力的目标。 public enum ExecuteResult { // node needs more time to run on next tick Running, // node completed successfully Succeeded, // node failed to complete Failed } public abstract class Node<TAgent> { public abstract ExecuteResult Execute(TimeSpan elapsed, TAgent …
25 ai  behavior-tree 

3
游戏开发是超级精英俱乐部吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 例如,我们都可以通过互联网阅读职位空缺,例如GitHub职位或StackExchange Careers 2.0。您知道,网络应用程序开发,iOS / Android作业和许多其他事情。我们甚至阅读了有关Google,Apple或任何其他大公司的招聘广告。 我们为什么不阅读有关“游戏开发者”职位的信息?对游戏开发者的需求如此低吗?还是游戏开发商真的很稀有? EA,Konami或Activision等公司如何吸引他们的开发人员? 我如何克服对应用程序的这种响应:“您不能为我们工作,因为您没有开发游戏的经验。” 如果我不能在野外工作,应该如何获得经验?
25 career  jobs 


3
图形卡将向量的第四个元素作为最终位置怎么办?
从这个问题看来,您将需要一个四元素位置矢量,因为使用矩阵乘法修改其位置更简单。 就其本身而言,这意味着在将第四个元素视为3D点的表示时(假设不进行变换)应该简单地忽略它,但是我知道这是不正确的,因为当我将vector4提供给GPU时,如果第四个元素元素不是一个,它不会呈现-为什么? 栅格化器中的第四个元素有什么意义? 编辑:经审查,这个问题措辞不佳;第二段更准确地说:“如果第四个元素的值不在某个范围内,则不会'正确'/'按预期'呈现。”

3
在基于瓷砖的游戏中砌墙:我想念的是什么?
在花了一些时间写下有关在我的基于图块的游戏中实现墙壁的一些注释之后,我突然意识到它不会像我以前想象的那样简单。虽然我的工作的当前阶段甚至还不能真正完成与墙相关的代码,但我已经提出了三种不同的方法。现在,我不确定哪一个想法最有效,以及我是否错过了什么。 重要提示:一个字符CAN站在那个有墙,无论其形式的区块。 所有这三个变体的共同点是:瓦片映射将被“保留”在基于一维std :: vector(或类似形式)的容器中。对此的原因(非常)在回答另一个问题时得到了解释。 基于图块的游戏中的容器类。 回到墙壁。 A)简单的方法。 这里没什么好看的。每个图块容器不仅可以容纳角色,而且还可以容纳一个或多个贴在图块内部边缘的Wall对象。 优点:易于实现,引擎没有任何变化。缺点:两件事。一个-可能只是在我脑海中,但有些组合看起来很丑。第二-这种方法可以用两个相邻的瓷砖制作双层墙。建筑物将是游戏的重要组成部分,而双层墙允许建造者放弃通过游戏方式升级墙的材料,而只是通过将现有墙加倍来提高耐用性。那是不可取的。当然,我可以包括一个禁止双壁的程序,但是会对它造成不良影响。 B)聪明(?)方法。 我不会让玩家把整个地图都塞满,而是要击败他们。每堵墙都有两半,从内侧连接到瓷砖的边缘。因此,要制作一个“墙单元”,我必须在两个相邻的图块中创建两个“半墙”对象。 优点:它是对称的!同样,不需要对当前发动机规格进行重大更改。缺点:比较麻烦,对象更多,当然还有“帽子”。如您在图片中看到的,拐角基本上会为“盖帽”对象哭泣。我真的很酷,添加起来并不难。嘿,我已经有一个计划,计划由四个连接的盖子制成的细柱。甜。不过,我仍然对可能的视野和视线问题感到担忧。 C)总检修款。 或者,我可以将边框和角创建为游戏对象的单独容器。就这样 优点:甚至不确定。好吧,这很简单。绝对是 缺点:需要大修。幸运的是,这不是代码,而是当前的游戏机制心态-可以肯定。好处不是那么明显。此外,该aprroach需要多少比前两者更容器。索引数学也会有些痛苦。 因此,在这里我们有了它-在瓷砖之间制作墙的三种不同方法。如果有其他选择-我们将很乐意将其检查出来。如果我没有看到的任何方法都有任何优点/缺点,请指出。

6
免费体素编辑器?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 6年前关闭。 有谁知道一个好的免费体素编辑器和/或体素到网格转换器?
25 tools  models  editors  voxels 

3
如何根据另一个对象的偏移旋转对象?
我有一个围绕Y轴旋转的转塔的3D模型。该炮塔的加农炮明显偏离物体中心。我希望大炮而不是炮塔瞄准特定目标。但是,我只能旋转炮塔,因此我不知道为了达到目标而需要应用什么方程式。 下图说明了我的问题: 如果我的炮塔为“ LookAt()”目标,则来自加农炮的激光将完全错过所述目标。 如果这是完全自上而下的情况,并且加农炮与炮塔完全平行,那么我的逻辑告诉我,假目标应位于等于实际目标的位置,再加上与目标之间的偏移量相等的位置。炮塔和加农炮 但是,在我的实际情况下,我的摄像机倾斜60º,并且大炮有轻微的旋转。 下图说明了这种情况: 我不确定为什么,但是如果应用相同的偏移量,则它似乎仅在瞄准与转塔一定距离的同时起作用。 我的逻辑有缺陷吗?我在这里缺少基本的东西吗? 最终编辑:@JohnHamilton最新更新提供的解决方案以完美的精度解决了此问题。现在,我已经删除了用于说明错误实现的代码和图像。

4
是否有现有的基于FOSS组件的框架?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 基于组件的游戏编程范例正变得越来越流行。我想知道,有没有提供可重用组件框架的项目?用任何语言,我想我都不在乎。不是为了我自己的项目,我只是很好奇。 具体来说,我的意思是说有一些项目包括一个基Entity类,一个基Component类,也许还有一些标准组件?如果您不想重新发明方向盘,或者想要GraphicsComponent使用Direct3D制作sprite 的游戏,那么开始游戏会容易得多,但是您认为它已经完成了十几次。 快速谷歌搜索出现了鲁舍尔。有人听说过吗/有人使用过吗?如果没有受欢迎的,那为什么不呢?使这种可重用的东西太难了,并且他们需要大量的自定义吗?在我自己的实现中,我发现很多样板都可以推入框架中。

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.