游戏开发

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

5
将棋盘游戏理念转变为基于浏览器的慢节奏游戏
假设我要创建一个战略游戏,让所有玩家共享全局可变状态(请考虑游戏板)。但是与棋盘游戏不同,我不希望它是实时动作和/或回合制。相反,玩家应该能够在一天中的任何时间登录,并根据需要每天花费固定数量的动作点。与数小时相反,游戏会话将持续数周。 这是为了奖励良好的策略,而不是花在玩游戏上的时间(作为替代,铁杆玩家可以始终并行玩多个游戏),以及与实时游戏有关的所有问题,例如断开连接和同步。对于休闲玩家而言,该游戏应保持令人上瘾的状态,并且其投资时间仍然很短。 到目前为止,一切都还不错,但这仍然留下了何时解决问题以及何时可见的问题。我想避免“忍者游戏”,例如在重置每日分数前几分钟进行所有动作,以使其他玩家感到惊讶,或者人们向F5发送垃圾邮件以进行适时的动作,从而击败非真实玩家的整个动作。时间游戏。 我想到了几种方法: 解决一个每天运行一次的预定过程中的所有事件。这基本上意味着“盲”游戏,玩家可以采取行动,但不会立即看到结果。关键是,几年前我玩过类似的浏览器游戏,但直到出现了死神告诉你在那段时间内真正发生的事情之前,我才不喜欢自己感到与世隔绝和无能为力的事实。您会看到世界在一天之内以极大的增量进化,这似乎根本不像它在进化一样。 对于对游戏或其他玩家有重大影响的动作(攻击,成就很大),请将其立即显示给所有人,但将其效果延迟24小时左右。发生此类事件时,可能会通知对立的玩家,以便他们做出反应。 您还有其他想法可以解决这个问题吗?在类似的现有游戏中是否存在任何已知方法?

4
LibGDX使相机保持在TiledMap的范围内
我有一个简单的TiledMap,可以很好地渲染它。我有一个玩家在跳来跳去(使用Box2D),而我的相机跟随着该玩家: cam.position.set( player.position().x * Game.PPM + Game.V_WIDTH / 4, player.position().y * Game.PPM, 0 ); cam.update(); 但是,摄像机将“移出” TiledMap。如何将相机保持在TiledMap上,所以当我靠近地图边缘时,相机停止滚动,并且播放器移向相机边缘?

1
图形编程可复制门内Chrono Trigger的过渡
我最近第一次开始玩这个游戏,这真的使我的兴趣达到顶峰 您可以看到运动的过渡从〜12:08开始 那里似乎发生了一些有趣的数学运算。似乎有两个不同的视图组合在一起。首先在背景中渲染蓝色波纹,然后在某种伪3D投影上渲染紫色振荡波。 然而,他们如何精确地达到这一结果超出了我的范围,好奇心使我变得更好。 我不希望很多人知道这是如何完成的,但是如果有人进行了广泛的图形编程,也许他们会启发我。

2
如何将GLFW的键盘输入转发到另一个对象?
我在尝试使用GLFW3在另一个类中执行键盘事件时遇到麻烦。我遇到的问题是GLFW3使用静态函数进行输入,如下所示: static UI u; ... ... static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) { u.controls(window, key, action); } u也是静态的,控件保留WSAD键的输入(这是我获取键事件的唯一方法)。从这里开始,按下一个键将显示在控制台窗口中按下哪个键。我遇到的麻烦是试图使用按下的键来操纵另一个类中的变量。 我还有一个名为MainMenu的类,该类具有该功能。update().是否可以在此函数中使用UI类?
9 opengl  c++  keyboard  glfw 

3
AI代理如何访问有关其环境的信息?
这可能是一个琐碎的问题,但是我很难理解。非常感谢您的帮助。 在使用面向对象设计的游戏开发中,我想了解AI代理如何从游戏世界访问他们需要的信息以执行其动作。 众所周知,在游戏中,人工智能代理商经常需要“感知自己的环境”并根据周围发生的事情采取行动。例如,如果一个代理人足够靠近他,他可能被编程为追逐该玩家,在移动时避开障碍物(使用避障转向行为),等等。 我的问题是我不确定该怎么做。AI代理如何获取有关游戏世界所需的信息? 一种可能的方法是,代理简单地直接从游戏世界中请求他们需要的信息。 有一个叫做GameWorld的类。它处理重要的游戏逻辑(游戏循环,碰撞检测等),并保留对游戏中所有实体的引用。 我可以让这个班成为单身人士。当代理商需要游戏世界的信息时,它直接从GameWorld实例中获取信息。 例如,Seek当玩家靠近时,可以将一个坐席编程给玩家。为了做到这一点,经纪人必须获得球员的位置。因此,它可以直接直接请求:GameWorld.instance().getPlayerPosition()。 代理商也可以只获取游戏中所有实体的列表,并根据需要对其进行分析(以找出,或其他附近有哪些实体): GameWorld.instance().getEntityList() 这是最简单的方法:代理商直接联系GameWorld类并获取他们所需的信息。但是,这是我所知道的唯一方法。有更好的吗? 有经验的游戏开发人员将如何设计?天真的“获取所有实体的列表并寻找所需的东西”的方法吗?有哪些方法和机制可以使AI代理访问他们所需的信息以执行其动作?
9 architecture  ai  oop 

2
导航网格中的“视线”路径
我想计算导航网格中的视线。 考虑下图,黄线仅是A *的结果,红线是使用黄线作为输入的“视线”算法的结果。现在,设备可以直接移动而无需“曲折”。 计算该“视线”的算法是什么?

1
3D相机旋转
拜托,请原谅我,但我需要帮助,而我在这个问题上已经停留了几个星期,我没有取得任何进展,无论我走到哪里,我都会看到一个不同的答案,我尝试的所有方法都无法正常工作。我已经有了足够的技巧和建议,现在我真的只需要一个人给我答案,我就可以从此倒退,因为我不明白这一点。 使该主题最令人困惑的是每个人使用一组不同的约定或规则的方式,他们的答案基于他们自己的约定而没有定义它们的含义。 因此,这是我根据似乎最常见和合乎逻辑的内容形成的一组约定: 轴的右手法则。 正Y向上,正Z朝向观看者,正X朝向右侧。 行主矩阵,发送到着色器时转置。 螺距:绕X轴旋转 偏航:绕y轴旋转 滚动:绕z轴旋转 轮换顺序:横摇,俯仰,偏航(这是正确的吗?有人可以对此进行检查吗?) 从轴的正端向下看,正旋转值会导致顺时针旋转。 沿所有轴旋转0的默认方向是向下指向负Y的向量。 ..鉴于这些约定(如果它们约定不对,请务必纠正我!),如何做: 写一个LookAt函数?(lookAt(矢量位置,矢量眼焦点,矢量向上)) 计算旋转矩阵。(旋转(x,y,z)) 至少在过去的3周内,我尝试自己回答了这两个问题,我至少重写了LookAt&Rotation Matrix函数30次,测试了数十种方法,并通读了我所见过的材料。数百个网站,阅读了许多回答的问题,复制了别人的代码,到目前为止,我所做的一切都没有奏效,所有事情都产生了错误的结果。其中一些产生了一些非常怪异的输出,甚至没有接近正确的旋转。 除昨晚外,我每天晚上都在为此工作,因为我对反复的失败感到非常沮丧,不得不停下来休息一下。 拜托,请告诉我正确的方法是什么,以便我可以逆向工作并弄清楚它是如何工作的,我只是没有得到正确的答案,这使我有些疯狂! 我正在用Java编写,但是我会接受用任何语言编写的代码,我的大多数3D渲染代码实际上都运行得非常出色,这只是我无法理解的数学。 更新:已解决 感谢您的帮助!现在,我有了一个我真正理解的可以正常工作的LookAt函数,而且我再也高兴不起来了(如果有人想问一下,请问)。 我确实曾尝试过根据俯仰/偏航/侧倾变量创建旋转矩阵,但它似乎还是失败了,但是我决定放弃尝试将euler角用于freelook相机,因为它似乎不适合用于角色,而不是我要创建一个四元数类,沿着这条路径走运可能会更好,否则,我将诉诸于使用螺距/偏航作为球面坐标,并依靠新的工作LookAt函数进行旋转。 如果还有其他人遇到类似的问题并想问我问题,请随时。 至少我不会再受困了,谢谢您的帮助!


5
我如何像《炉石传说》那样创建动画卡片图形?
在《炉石传说》游戏中,上面有带有动画图像的卡片。一些例子: http://www.hearthhead.com/card=281/argent-commander http://www.hearthhead.com/card=469/blood-imp 动画似乎由多种效果组成: 粒子系统。 精灵渐入渐出/旋转/旋转 简单的滚动纹理 变形效果,在示例1的斗篷和头发中非常明显。 旋转的烟雾效果,示例1中的灯光和示例2中的绿色/紫色发光。 前三个元素很简单,我想知道后两个元素是如何完成的。甚至可以在游戏中实时完成,还是可以预先渲染动画?
9 graphics 

3
保存资产时如何处理版本更改?
我已经从事RPG已有一段时间了,我使用了两种不同的序列化技术。 敌人,武器,物品将另存为XML。 映射和事件保存为“受控二进制”(每个类都有一个保存/加载方法,它们决定要保存/加载的内容)。 但是我开始质疑我对地图和事件的选择。我的担忧: 我已经创建了一个地图编辑器,但是我仍然想念仅通过打开文件就能更改一些小东西。 变化太多了。假设我想向一个类中添加一个变量,如果我不再次加载/保存每张地图,它将在稍后中断。 首先要解决的问题是不改变我的技术就很难解决。我曾考虑过改用JSON,但这需要大量工作。我还认为,随处可见的[DataContract]和[DataMember]属性看起来很难看。 这让我有第二个顾虑,我想知道如何处理它?您是否创建了一个循环浏览所有地图并使用新变量重新保存它们的小程序?因为我现在开始获取一些地图,但我仍然手动进行。我每次想做一些更改时都会三思而后行,因为它会带来很多额外的工作。


3
移动AI时如何考虑重力
我正在制作2D游戏。当前有一架直升飞机在飞行,由玩家控制。使用箭头键UP,LEFT和RIGHT进行控制。 沿y轴的速度为dy,而沿x轴的速度为dx。 它的物理如下: 只要不按UP,就dy以恒定的加速度无限期地加速。(重力)。dx保持其当前值。 当被按压UP,dy加速在恒定加速度从不管它目前是,高达4(向上,直到它到达速度4)。dx保持其当前值。 当按下左,dx加速在不断加速,从不管它目前,达-4。 当RIGHT被按下,DX加速时在恒定加速度,无论从任何它目前是,高达4。 (当我按下左键或右键而未同时按下UP 键时,我说过:dy由于重力影响直升机,它越来越小) 所有这些使直升机经常沿空中拱形而不是直线。 这产生了看起来很现实的物理学。 我的问题是: 敌方直升机,即AI,应使用相同的物理系统移动。 假设AI希望从当前位置到达B点。 如果游戏中没有重力且没有逐渐加速,那将很容易。我只需从AI的位置绘制一个向量到B点,然后让AI跟随它。 但是,由于存在重力和逐渐的加速度,所以AI永远无法(几乎)沿直线运动。使AI尽可能高效地到达B点的最佳方法是什么? 将AI移至特定目的地时,如何考虑重力? (如果更容易解释,请考虑B点在y轴上与AI处于同一水平,而不是与之成对角线。) 谢谢
9 2d  physics  ai 

3
如何将多个矩阵发送到顶点着色器?
我正在使用骨骼/蒙皮练习动画。我正在尝试为着色器每个顶点发送一个矩阵。我可以想到这两种方法。 方法一 这样的每个骨基质都有一个统一的手柄 u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]"); u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]"); 并在其中onDraw将它们每个发送到着色器: GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0); 如果我有大量矩阵,显然这不是一个好方法。我的第二个想法我还没有尝试过,因为有很多代码可以重构 方法2 是用来glUniformMatrix4fv一次将它们全部发送出去(假设我有20个矩阵) GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0); 哪里matrices是float[16 * 20]。但是,然后修改每个骨骼的矩阵变得有点乏味。例如,如果我想获得第3个矩阵,则需要 float[] _3rd = Arrays.copy(matrices, 3*16, 4*16); 而保存这些值可能会变得更加烦人。 我现在正在使用方法1,但看起来并不十分聪明... 将多个矩阵发送到OpenGL ES 2着色器的最佳方法是什么? LE:我正在使用Android,因此我正在寻找Java解决方案。

3
随着游戏的进行,我如何在攻击浪潮中缩放敌人的数量和挑战?
我目前正在制作一个防御游戏,敌人会生成并攻击玩家的军队。除了只有一个级别外,它类似于塔防游戏。敌人将继续产卵,直到最终用户死亡或他调遣足够大的部队以消灭立即产卵的任何敌人(希望这足以挑战不会发生这种情况)。 目前,我正在努力解决的问题是,如何使这款游戏变得越来越困难,以及敌人产生的可能性最终最终达到100%。 到目前为止,我有类似以下内容 if(Math.random() < 1 - (1/elapsed_time) && spawnTimer <= 0 ){ spawnEnemy() spawnTimer = rand(); // random number between 1 and 3 } 但是似乎一开始就不太统一。目前,我仅生成一种类型的敌人,这种想法是随着时间的推移也会生成更强悍的敌人。 我还认为我需要将随机数spawnTimer更多一些,并随着时间的推移而使速度更快,但是我只是看不出我对整个部分的逻辑面貌有所了解。有人能帮助您大致了解这种公式吗? 我目前正在使用javascript编写游戏,但是显然它更多地是关于这个概念的。

2
源引擎的源代码是否可用?
是否可以使用源引擎的完整C ++源代码? 我知道SDK可以通过购买基于源的游戏获得,但是我的目标是找到一个开放源代码的游戏引擎,其中包括用于学习目的的完整实现细节。

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.