游戏开发

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

4
如何为抽象的2d自上而下的水纹理制作动画?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 我目前正在实施一款具有自上而下的海洋景观的游戏。我使用以下抽象纹理: 实际的纹理是透明的,为清晰起见,我添加了绿色。 我现在遇到的问题是,我不知道如何为该纹理设置动画,因此水看起来不错。我试图用正弦波移动纹理: texture.y += sin(angle)。当然,现在整个纹理正在移动,这看起来有点不现实。我尝试的下一件事是添加另一层并实现视差效果。这样,水面下的反射也会移动,但速度要慢得多。看起来好一点,但还不够好。 我认为,如果单个单元会膨胀和收缩,则外观最好的动画就像是一块网或一块布。想象一下,如果有人稍微拉动这些单元格的一个顶点,而相邻的单元格会扩张,而我拉向(或推向)的单元格就会收缩。有点像弹簧网(?)。但是我不知道如何实现这样的事情: 什么是数学模型?带有弹簧的东西,力在哪里推/拉? 如果是这样,如何将模型映射到给定的纹理?保持所有曲线,不保持曲线... (我也对如何为给定的纹理设置动画有不同的想法/答案。现实主义并不是这里的重点,只是一些像运动一样漂亮的水...) DMGregory的解决方案 我在这篇文章中发布了一个libgdx示例:2d水动画呈锯齿状且不平滑(请参阅有关纹理过滤的答案)
24 2d  libgdx  animation  water 

4
如何在2D侧滚动游戏中检测“房间”?
我正在寻找一种能够识别您可以在游戏中创建的某些类型的建筑物和房间的系统,例如Terraria如何检测“住所”。在该游戏中,可以通过构建满足一组条件的区块区域来在基于图块的世界中构建房屋: 该区域通过玩家放置的块与“外部”完全隔离。 该区域可以容纳5x7的矩形。 封闭区域内至少有一张桌子,一个光源和椅子。 有一个门从该区域引出。 Terraria同时具有前景和背景图块层。该区域的整个背景必须充满玩家放置的方块。 如何有效地检测玩家何时构造了适当大小的区域,以及如何有效地检查该区域是否包含所有必需的家具/组件? 满足所有住房要求的内部区域示例:

4
如何在最小/不使用可视化编辑器的情况下在Unity中构建游戏?
我想完全用C#编写游戏。在搜索引擎时,我找到了Unity3D,但是所有教程和文档都在谈论可视化编辑器和Unity IDE,您可以在其中单击并指向以创建场景和脚本。 我不想那样做。我更喜欢完整的代码覆盖范围,而不是设计师从我身上抽象出来的东西。我只想从头开始编写纯C#代码,或者如果需要,可以编写Unity脚本。我找不到有关此操作的任何解释或文档。我该如何使用Unity来构建游戏并最小化(或不使用)可视化编辑器?
24 c#  unity 

6
丢失之后和重新启动之前的延迟是否可以防止倦怠,或者它们是成瘾的机器?
在Super Hexagon甚至Everwing之类的游戏中,从迷失到重新开始都有一个非常短暂但明显的延迟:等待重新启动按钮出现,按下它等等。 这是对球员倦怠的防御吗?如果没有暂停可以将一个游戏与另一个游戏分开,则游戏可能会感觉永无止境,并迅速烧毁玩家。 还是让玩家沉迷的一种方法?我经常在Everwing中对此表示怀疑,因为该游戏的顽强性几乎不容小y。也许让玩家等待再玩才能产生心理上的效果,例如建立起渴望的习惯? 或者,也许没有这种延迟是为了保持流程的畅通,可以这么说吗?Ori和盲人森林在Ginso树级别上的作用类似。它具有非常快速的重新启动,没有按钮等功能,并且死亡不会重新启动BG中正在播放的音乐。结果是死亡并不会破坏游戏的流程,尽管死亡仍然使整个关卡感觉无缝。 那么,对此有任何研究吗?除非这些,轶事?我什么都找不到。

2
使用四元数:我该怎么办?(没有数学)
我是游戏开发人员,没有学习数学。所以我只想使用四元数作为工具。为了能够进行3D旋转,有必要使用四元数(或矩阵,但在本问题中,我们先保留四元数)。我认为对于许多开发人员来说,使用它们很重要。这就是为什么我想分享我的知识并希望填补我的空缺。现在.... 据我了解: 四元数可以描述两件事: 3d对象的当前方向。 对象可以执行的旋转变换。(rotationChange) 您可以使用四元数: 乘法: 四元数endOrientation =四元数旋转Change *四元数currentOrientation; 因此,例如:我的3D对象向左旋转90°-我乘的旋转就是向右旋转180°,最后我的3D对象90°向右旋转。 四元数rotationChange =四元数endRotation * Quaternion.Inverse(startRotation); 这样,您将获得一个rotationChange,可以将其应用于另一个方向。 Vector3 endPostion =四元数rotationChange * Vector3 currentPosition; 因此,例如:我的3D对象位于位置(0,0,0)上,并且我乘以的旋转是向右旋转180°,我的端点类似于(0,-50,0)。在四元数内部有一个轴-以及围绕该轴的旋转。您围绕该轴Y度旋转点。 Vector3 rotationOffsetVector =四元数rotationChange * Vector3 currentOffsetVector; 例如:我的开始方向显示为UP-(0,1,0),我乘以的旋转方向是向右旋转180°,我的结束方向显示为向下。(0,-1,0) 混合(Lerp和Slerp): 四元数currentOrientation =四元数.Slerp(startOrientation,endOrientation,插值器) 如果插值器为1:currentOrientation = endOrientation 如果插值器为0:currentOrientation = startOrientation Slerp插值更精确,而Lerp插值更高效。 我的问题: 我到目前为止所解释的一切都正确吗? 四元数可以做到这一点吗?(不可以) 您还能对他们做什么? 两个四元数之间的点积和叉积有什么好处? 编辑: 更新了问题并提供了一些答案


8
与软件渲染相比,OpenGL,SFML和SDL有什么优势?
我开始观看Handmade Hero系列视频,其中Casey Muratori在不使用框架等的情况下创建了一个游戏引擎。昨天我到了那儿,他展示了如何在屏幕上绘制图像。据我了解,他只是分配了一些内存,该内存与他要绘制的屏幕大小一样大。然后,他创建了一个位图,然后将其传递到分配的缓冲存储器中,并使用特定于操作系统的功能将其绘制到屏幕上。 这似乎很简单。我曾经使用GameMaker,后来改为Love2D,并与Sprite Kit一起工作了一些,但我一直想知道在有时令人困惑的图层下到底发生了什么。 既然如此,为什么当您只需要分配一些缓冲区,传递位图并将其绘制到屏幕上时,为什么还要使用图形库(OpenGL,SFML,SDL等)呢? 如果要在屏幕上绘制不同的内容,只需将它们写入位图,然后将其传递到缓冲区中。我对编程很陌生,但这对我来说似乎很简单。如果我错了,请纠正我。

1
我的游戏似乎与录制软件不兼容。是什么原因造成的?
我刚刚完成了一个大学的Game-Dev小项目,我需要录制一个视频以伴随我的提交(以防万一他们无法使我的资料投入工作)。基本上,当FRAPS或Bandicam尝试附加游戏时,我的游戏根本无法正常工作,我从错误报告代码中得到了黑屏和GL INVALID OPERATION消息流。Dxtory似乎根本无法正确连接到它,它没有显示FPS计数器或任何东西。我的游戏逻辑似乎从调试跟踪中正确运行,似乎所有gl库调用都中断了。 我对这些程序的运行方式一无所知,所以我真的不知道该怎么做才能导致这种情况。我听说它们是从OpenGL帧缓冲区读取的,所以也许我在这里做错了什么?我让GLFW和GLEW进行所有的低级初始化,但是我已经使用相同的设置和录制软件成功录制了项目。 从本质上讲,是否有人曾经遇到过这样的事情,或者您对这些程序的工作方式一无所知,从而可以找出问题的起因吗?

4
这段代码中“增量”的含义是什么?它反映了游戏开发人员的标准吗?
我对游戏编程了解甚少,但想了解更多。我正在尝试了解此游戏的代码。我试图理解为什么代码会将“ delta”传递给Shipcontrols.js,后者会根据用户输入来更改飞船的方向。 基本上,游戏每个循环都会计算“增量” ... 这是使用delta到一个循环的堆栈的缩写版本... var delta = now - this.time; this.time = now; this.current.render.call(this.current, delta, this.renderer); 走进这里... ctx.manager.add("game", scene, camera, function(delta, renderer) { if(delta > 25 && this.objects.lowFPS < 1000) this.objects.lowFPS++; var dt = delta/16.6; this.objects.components.shipControls.update(dt); 走进这里... bkcore.hexgl.ShipControls.prototype.update = function(dt) { var pitchAng; var yaw; var roll; if (undefined …

7
如何避免Unity中紧密的脚本耦合?
不久前,我开始与Unity合作,但我仍然在紧密耦合脚本的问题上挣扎。如何构造代码以避免出现此问题? 例如: 我想在单独的脚本中拥有健康和死亡系统。我还希望拥有不同的可互换步行脚本,这些脚本可让我更改玩家角色的移动方式(如Mario中的基于物理的惯性控件,以及Super Meat Boy中的紧致,抽搐控件)。Health脚本需要保留对Death脚本的引用,以便在玩家的Health达到0时可以触发Die()方法。Death脚本应该保留对所使用的walking脚本的一些引用,以禁止在死亡时行走(I厌倦了僵尸)。 我通常创建界面,比如IWalking,IHealth和IDeath,这样我就可以改变在心血来潮这些元素没有打破我的代码的其余部分。我希望它们由播放器对象上的单独脚本设置,例如PlayerScriptDependancyInjector。也许这脚本将会为社会IWalking,IHealth和IDeath属性,使依赖可以通过从检查关卡设计师通过拖放相应的脚本进行设置。 这样一来,我可以轻松地将行为添加到游戏对象中,而不必担心硬编码的依赖项。 Unity中的问题 该问题是,在团结,我不能在检查暴露的接口,如果我写我自己的检查人员,引用不会得到序列化,这是一个很大的不必要的工作。这就是为什么我只剩下编写紧密耦合的代码的原因。我的Death脚本公开了对脚本的引用InertiveWalking。但是,如果我决定要让玩家角色紧密控制,就不能只拖放TightWalking脚本,就需要更改Death脚本。糟透了 我可以应付,但是每次我做这样的事情,我的灵魂都会哭。 Unity中接口的首选替代方法是什么?我该如何解决这个问题?我找到了,但是它告诉了我我已经知道的,并且没有告诉我如何在Unity中做到这一点!这也讨论了应该做什么,而不是如何做,也没有解决脚本之间紧密耦合的问题。 总而言之,我觉得这些是为那些具有游戏设计背景来到Unity的人而写的,他们只是学习如何编写代码,而对于普通开发人员而言,关于Unity的资源很少。有什么标准的方法可以在Unity中构造代码,还是我必须弄清楚自己的方法?
24 c#  unity  scripting 

6
隐藏统计信息是个好主意吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我想到的是RPG,FPS或基于回合的游戏(并不重要),其中玩家不知道其角色的确切统计数据。当然,它们作为正态分布的随机变量存在于游戏引擎中。因此没有可见的HP条,水平,ATK或DEF。您只能通过生命迹象(好心情,疲倦,垂死,死亡等)来确定其状态。关于施法,当法术力低时,您施法失败的机会会增加(因此,当您需要寻找下一个加油站进行加气时,就不会有“零”点)。要衡量您的技能,您可以与始终具有固定(但未知)统计数据的怪物战斗。 使用它们时,统计数据会有所改善,但是每个角色都有随机的天赋,因此某些技能比其他技能更容易提高。 所以我对游戏开发者和游戏玩家的疑问是,让角色的真实自我成为一个谜是个好主意吗? 更新: 从答案看来,这很大程度上取决于游戏的类型。 对于角色扮演游戏,我认为找出适合自己角色的内容很有趣。从回答看来,这似乎并不那么有趣,因为玩家通常具有既定的打法,并会竭尽所能地从角色中逼迫这种打法。 我梦about以求的实际游戏理念是类似于《口袋妖怪》游戏系列的类似经理的游戏。主角在虚拟世界中有多个冠军和漫游者,并以类似HOMM的方式在竞技场中与其他人作战。而那些冠军将拥有隐藏的统计数据。我没有在最初的问题中提到这一点,因为我不想围绕这个特定的游戏概念偏向于答案。 对于给玩家的反馈(在两种情况下):将具有类似于国际象棋棋手的elo等级的等级。一种用于近战击打,近战格挡,远程击打,远程阻挡技能,另一种用于魔法能力。如果敌人挡住了被击中的近战命中率降低,则用剑击中对手会增加近战的命中率。如果对手用剑击中我们,我们的近战格挡等级会降低,成功的格挡等级会提高,与远程攻击相同。对于魔术技能来说有点棘手。强大的魔法能力意味着:更容易成功施放法术,更难以受到诅咒法术的影响,并且更容易受到结界法术的影响。 根据冠军的表现来估算标准能力,例如生命值,韧性,力量,魔力。这些决定了成功命中后造成的实际伤害。将会有具有固定和已知统计数据的“标准冠军”,并且可以根据他们衡量其他冠军的统计数据来引导系统。 因此,如果玩家尝试了冠军的方方面面,那么他可以找出冠军拥有的技能组,如果玩家不喜欢该技能组,那么他可以交易冠军以得到自己喜欢的技能组。 更新2: 因此,直截了当:如果我将游戏的重点放在了解您的角色/冠军的概念上,而不是将所有统计数据轻松提供给玩家,这会很有趣吗? 这将类似于足球运动员。教练将需要查看他们的球员在各个位置的表现如何,以将他们分配给最适合他们的位置。因此,他将需要尝试每个人作为守门员,后卫或前锋。经过几场比赛,很明显哪个位置对他们有利。

1
路径查找算法?
我首先在堆栈溢出中发布了这个问题,但是我猜那里没有人对视频游戏非常感兴趣... 所有类型的游戏中都使用哪些寻路算法?(无论如何,所有类型的角色都会移动)Dijkstra是否使用了很多?我认为不会,因为它实际上并未找出到达某个地方所需采取的步骤,对吗?如果我理解正确,它只会确定哪个对象是最近的。我并不是真的想编写任何代码;只是做一些研究,尽管如果您粘贴伪代码或其他内容,那也很好(我能理解Java和C ++)。我基本上是在总体上寻找路径查找的快速概述。 我知道A *就像在2D游戏中使用的算法。那太好了,但是不是基于网格的2D游戏又如何呢?帝国时代或Link的觉醒之类的东西。没有可导航的独特正方形空间,那么它们做什么? 3D游戏做什么?我已经读过这个令人毛骨悚然的http://www.ai-blog.net/archives/000152.html,听说它是该主题的权威,但是一旦设置了网格,它并不能真正解释如何操作,路径查找完成。如果他们使用的是A *,那么在3D环境中如何做?花键如何精确加工圆角?

9
一个人如何逃离GPL?
免责声明我不假装对许可一无所知。实际上,我在下面说的所有内容可能都是错误的! 幕后故事: 最近,我一直在寻找一款不错的游戏引擎,并且我想我已经找到了我真正喜欢的游戏引擎Cafu Engine。 但是,他们有双重许可计划,在这种情况下,除非您为商业许可付费,否则使用GPL强制执行您使用引擎进行的所有操作。我并不是说这是一个糟糕的引擎,他们甚至说他们对许可费非常放松。但是,它甚至涉及GPL的事实使我感到恐惧。 所以我的问题基本上是,一个人如何逃离GPL。 这是一个示例:id Tech引擎(也称为Quake引擎或Doom引擎)是流行Source引擎的基础。但是,id Tech引擎已根据GPL发布,并且Source引擎是专有的。Valve是否获得了其他许可?还是他们为逃避GPL做些什么?有没有办法摆脱GPL?或者,如果您将GPL的源代码用作另一个项目的基础,则必须使用GPL,并使您的源代码对全世界可用。某些随机人士可以使用id Tech引擎,对其进行修改,使其超出识别的范围,然后将其用作商业产品的专有引擎吗?还是要求它们使其开源。 最后一件事,我通常对开源没有任何问题。但是我觉得开源有它的用,但是在世界的泥泞中却没有。
24 licensing 


2
一个人如何购买游戏的权利?
让我们一次来看看一些流行但被遗弃的游戏:WorldRacing / HiOctane / Constructor /其他。假设我和一个团队合作,希望振兴上述游戏,并在不进行重大更改的情况下将其发布到2011年,然后进行改进(例如添加多人游戏)。保持游戏的精神,资产,故事,音乐也很重要,因此基本上游戏保持不变,但会变得更好(例如使DOS游戏适应Win7)。 我的问题来自“通常如何制作?” 区域: 我如何购买标题和游戏资产(图形,声音,音乐,故事情节)的权利。与谁联系以及可以选择哪些购买方式?是否有可能获得源代码,设计文件。 如何处理各种平台,合同条款是否规定了如果有多个平台,则允许使用哪些平台? 如何处理其他语言的本地化版本,它们是从其他公司那里获得还是属于主发行商? 例如,上述游戏的合理价格是多少? 是否可以要求所有者以开放源代码形式发布游戏? 请记住,新世界计算公司拥有《英雄与魔法》英雄,但后来将其所有者更改为Nival。我对这种过程很感兴趣。

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.