游戏开发

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

4
我如何找到适合于平截头体的最大球体?
您如何找到可以透视的最大球体? 从顶部看,是这样的: 补充:在右边的视锥台上,我已经指出了四点,我认为我们对此有所了解。我们可以投影出截头圆锥体的所有八个角以及近端和远端的中心。因此我们知道点1、3和4。我们也知道点2与3之间的距离与4与点3之间的距离相同。因此,我们可以计算线1到4到点2的最近点,以获得中央?但是实际的数学和代码使我无所适从。 我想绘制尽可能大的模型(大约是球形的,我有一个微型球的边界球)。 更新:我已经尝试按照 bobobobo和Nathan Reed的建议实施“在两个平面上作圆”方法: function getFrustumsInsphere(viewport,invMvpMatrix) { var midX = viewport[0]+viewport[2]/2, midY = viewport[1]+viewport[3]/2, centre = unproject(midX,midY,null,null,viewport,invMvpMatrix), incircle = function(a,b) { var c = ray_ray_closest_point_3(a,b); a = a[1]; // far clip plane b = b[1]; // far clip plane c = c[1]; // camera var A = …
12 geometry 


1
什么时候以及为什么需要一个Pool类来保存对象?
我一直在研究opengl es,我看到的一个示例是使用“ Pool”类来跟踪触摸和键盘事件。 有人可以解释为什么以及为什么需要泳池课程。从我阅读的内容来看,它与垃圾收集和限制输入类的数量有关。 这对我来说似乎有点抽象,所以如果有人可以解释发生了什么,我将不胜感激,我将在此处粘贴一些代码: public Pool(PoolObjectFactory < T > factory, int maxSize) { this.factory = factory; this.maxSize = maxSize; this.freeObjects = new ArrayList < T > (maxSize); } public T newObject() { T object = null ; if (freeObjects.isEmpty()) object = factory.createObject(); else object = freeObjects.remove(freeObjects.size() - 1); return …

2
我在美国的游戏公司需要哪种类型的法人实体?
我是四个人中为游戏做出贡献的负责人,引起我注意的是,我们最终将需要某种正式头衔或类似的东西。我们已经就一个名称达成了一致,并且我们已经有了一个域名和我在该品牌下设置的一些后端资源。 我对使它成为“官方”并保护我的资产所需采取的步骤感到好奇。这是我最好不要担心要发布的东西吗? 我看了这篇文章,我也正在看这个页面。但是,我想从过去可能走过类似道路的人们那里得到一些直接答案。
12 business 

5
如何增加深度感?
我在后台绘制了几个山地模型。在此处查看实际的屏幕截图: 在最后面,您会看到那些灰色的山脉。尽管它们是如此之多,但它似乎仍未“处于后台”。 我怎样才能给那些山增添深度感?我希望他们离得很远。 多亏了DarenW,现在的样子
12 art 

3
如何实现门户网站的冲突检测?
例如,采用这种情况(对不起,我的绘画技巧很差): 这是基于“门户”的,火柴人正在通过蓝色门户(链接到红色门户),但是有一堵墙阻止他在红色门户上。因此,他无法完全通过门户。 所以我的问题是:如何与他们进行物理/碰撞检测?我会切播放器吗?有没有办法链接它们?是否有任何物理引擎支持此操作?如果没有,我该怎么做?

1
英雄联盟观众流格式
介绍 我一直在摆弄LoL的旁观者系统,希望最终从流中抓取数据并建立一个数据集进行分析。我知道已经有一些非官方的API和技术,但是我正在寻找真正特定的游戏事件(冠军杀死,炮塔杀死,物品讨价还价,丛林暴民杀死,特定事件的冠军配合等等)。 到目前为止我已经弄清楚了 当您开始观看游戏时(不适用),您的客户端将连接到以下主机: spectator.na.lol.riotgames.com:8088 我假设此主机由Amazon AWS或类似机构支持。无论如何,接下来发生的事情是客户端向版本服务器发送版本请求: GET / observer-mode / rest / consumer / version 这将返回当前观众服务器的版本。例如:“ 1.80.54” 接下来,客户端发送对游戏元数据的请求: GET / observer-mode / rest / consumer / getGameMetaData / NA1 / [gameid] / [一些随机随机数] /令牌 这将返回有关游戏的元数据。此数据的示例:http : //pastebin.com/3N4qs0hx 客户端现在知道观众会话应该通过的参数。它尝试通过调用以下命令来定位最新的数据块: GET / observer-mode / rest / consumer / getLastChunkInfo / NA1 …

4
回合制游戏中的战略性AI?
我对战略性AI引擎的工作方式感兴趣,例如,如何评估在回合制战略游戏中的部队部署位置等。 我确实了解了基于目标的AI的工作原理,我想这是决定在《文明》这样的游戏中构建或研究内容的一种好方法。 但是部队/部队的战术/战略定位。哪些算法/策略用于评估那些东西?有参考文件/文章吗?

3
极度困惑“恒定游戏速度最大FPS”游戏循环
我最近在Game Loops上阅读了这篇文章:http : //www.koonsolo.com/news/dewitters-gameloop/ 推荐的最后一种实现方式使我深感困惑。我不明白它是如何工作的,看起来像是一团糟。 我了解以下原则:以恒定的速度更新游戏,剩下的一切将使游戏尽可能多地渲染。 我认为您不能使用: 获取输入的25个报价 渲染游戏975次 方法,因为您将在第二部分的第一部分得到输入,这会感觉很奇怪吗?还是那是文章中正在发生的事情? 实质上: while( GetTickCount() > next_game_tick && loops < MAX_FRAMESKIP) 那怎么有效呢? 让我们假设他的价值观。 MAX_FRAMESKIP = 5 让我们假设next_game_tick,它是在初始化之后的瞬间分配的,在说主游戏循环之前... 500。 最后,由于我在游戏中使用SDL和OpenGL,并且仅将OpenGL用于渲染,因此假设GetTickCount()返回自调用SDL_Init以来的时间。 SDL_GetTicks -- Get the number of milliseconds since the SDL library initialization. 资料来源:http : //www.libsdl.org/docs/html/sdlgetticks.html 作者还假设: DWORD next_game_tick = GetTickCount(); // GetTickCount() returns …

1
如何创建多个2D聚光灯?
我正在寻找创建2D“聚光灯”效果,以允许在多个实体上聚光灯。即,好像几个精灵在握火炬。对于单个实体(一个聚光灯),我使用一种技术,其中叠加了渐变精灵,并使中心点追逐该实体。该技术对于单个聚光灯效果很好。这是一个截图,以说明我在说什么: 单一焦点-作品 我遇到的问题是该技术无法扩展到多个实体。如果叠加另一个聚光灯图像,则会遇到几个问题。这是一个模拟的屏幕截图: 多个聚光灯=问题 最明显的问题是可见的角。可以通过使聚光灯图像巨大地覆盖整个级别来解决此问题,但这并不正确。第二个也是更棘手的问题是,我正在用这种技术有效地增加黑暗度。因此,添加的每个精灵都会使其他所有人变暗。显然我正在错误地解决此问题。 有任何想法吗? 不断的努力 评论中已经有一些关于混合选项的讨论。这是我目前的想法。在上面的单个Spotlight示例中,我使用了一个看起来像这样的图像文件:(为了更易于说明,我将透明色替换为绿色) 如上所述,问题在于该图像与另一图像的Alpha混合不会产生所需的效果。相反,它将产生以下内容: 作为混合选项问题,这并不令我震惊。在我看来,问题在于这种图像具有透明遮罩和应隔离的图像(黑色正方形)。 因此,我应该使用在运行时针对黑色正方形使用的透明蒙版,而不是内置了切出的透明蒙版的黑色图像。这样做时,我仍然无法使用传统的白色和黑色透明蒙版,否则会遇到相同的问题。这是一个示例,这次白色和黑色代表白色和黑色: 看来,解决方案将是应用本身利用透明度的透明蒙版。像这样:(绿色=透明) 这样,可以将多个透明蒙版混合在一起,然后将其用作黑色正方形的透明蒙版。这是两个Alpha混合在一起的透明蒙版的示例: 无论如何,这就是我正在努力实现的方法。如果可行,我将发布结果。我目前不知道的是我是否可以使用本身具有透明度的透明蒙版。
12 2d  sprites  camera  lighting 

2
如何在大型网络世界中处理实体寻路和运动?
考虑到上面的图像将瓷砖分成32x32的框,我有一个实体被标记为“ aggro”附近的玩家。我希望这个怪物理想地追逐玩家(并继续追逐玩家一段时间)。目前,我的唯一动作是使用一个用于远程实体的简单插补器完成的,这是可行的,因为动作更新之间的差距很小。 我不能成功地仅仅告诉客户怪物想要移动到他/她所处的位置,因为这将导致实体移动得比其应该快得多(这可以通过对插值函数使用一些数学运算来解决) -有效),但更重要的是,它看起来不太现实,可能会夹住墙壁!如果可以避免,我不想在服务器上模拟整个运动……虽然我想我可以,但是仍然不能解决裁剪问题。我怀疑该解决方案涉及一些寻路,并向客户端发送定期的节点更新,并让它们模拟运动,但是我不确定。 谢谢!

8
将2D曲线转换为点以进行数据存储
我创建了一种算法,可以将任何曲线(即路径)转换为最小点数,以便将其保存到文件或数据库中。 该方法很简单:它以相等的步长移动三个点,并测量这些点形成的线之间的角度。如果角度大于公差,则会在该点处创建一条新的三次曲线。然后它将线向前移动并再次测量角度… 对于那些知道Android Path类的人-请注意dstPath是一个自定义类,它将点记录到Array中,以便稍后保存点,而srcPath是Regions联合的结果,因此对我没有关键点保存。 问题在于,如下面的代码所示,该圆形看起来并不平滑,该图像是由下面的代码生成的,其中的源路径由一个完美的圆形和矩形组成。我试图更改公差角度和步长,但没有任何帮助。我想知道您是否可以建议对此算法进行任何改进或采用其他方法。 编辑:我现在为使用Android java的用户发布了完整的代码,因此他们可以轻松地尝试和试验。 public class CurveSavePointsActivity extends Activity{ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new CurveView(this)); } class CurveView extends View{ Path srcPath, dstPath; Paint srcPaint = new Paint(Paint.ANTI_ALIAS_FLAG); Paint dstPaint = new Paint(Paint.ANTI_ALIAS_FLAG); public CurveView(Context context) { super(context); srcPaint.setColor(Color.BLACK); srcPaint.setStyle(Style.STROKE); srcPaint.setStrokeWidth(2); srcPaint.setTextSize(20); dstPaint.setColor(Color.BLUE); dstPaint.setStyle(Style.STROKE); dstPaint.setStrokeWidth(2); …

8
我应该读完高中还是自学?[关闭]
这个问题不太可能对将来的访客有所帮助;它仅与较小的地理区域,特定的时间段或极为狭窄的情况(通常不适用于Internet的全球受众)有关。要获得使该问题更广泛适用的帮助,请访问帮助中心。 7年前关闭。 我想成为一名游戏开发人员,我是一名11年级的学生,觉得自己在浪费高中的时间。我正在考虑改用家庭学校,以便有更多时间专注于自己学习游戏开发,同时在家中完成高中学习。我与之交谈的一些人说,最好留在学校读大学,有些人说我可以通过家庭学校获得文凭,这样我就可以在自己喜欢做的​​事情上占上风,并获得经验。我不确定该怎么做,并且想知道是否有经验丰富的程序员可以给我建议我应该采取的路线?

1
OpenGL-立方体上的白色边缘
在我制作的类似于《我的世界》的游戏中,我的立方体上出现白色边缘: 在深色纹理中更明显。正在按以下方式设置纹理: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 有什么帮助吗?

2
OpenGL:是否可以在不指定VBO的情况下使用VAO
在我可以找到的有关VAO(顶点数组对象)的所有教程中,它们都展示了如何通过配置顶点属性和绑定VBO(顶点缓冲区对象)来使用它们。但是我想创建一个VAO,该VAO将与一组固定着色器一起为一组VBO配置,其中每个缓冲区使用相同的数据模式(顶点,uv,颜色等)。因此,我想为将使用一个着色器绘制的多个VBO创建一个VAO。 我在此上找不到任何演示,所以我决定尝试一下。但它不起作用,并在glDrawArray通话中崩溃。似乎VBO没有绑定。这是我正在使用的代码: 渲染: /* Prepare vertex attributes */ glBindVertexArrayOES(vao); /* Upload the buffer to the GPU */ glBindBuffer(GL_ARRAY_BUFFER, pool->next()); glBufferSubData(GL_ARRAY_BUFFER, 0, parts * buffer.stride() * 6, buffer.getBuffer()); /* Draw the triangles */ glDrawArrays(GL_TRIANGLES, 0, parts * 6); glBindVertexArrayOES(0); VAO创作: glBindVertexArrayOES(vao); glEnableVertexAttribArray(ls.position); glVertexAttribPointer(ls.position, 2, GL_FLOAT, GL_FALSE, buffer.stride(), 0); glEnableVertexAttribArray(ls.color); glVertexAttribPointer(ls.color, 3, …
12 opengl  vbo  vao 

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.