游戏开发

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

3
为什么我的瓷砖之间有线条?
我正在制作自上而下的XNA游戏。地图是由图块创建的。我最近注意到的一个问题是磁贴之间的线条“网格”。它仅在某些时候出现,并且仅取决于相机的位置。我让XNA处理定位,为什么这些行显示出来? 这是带有线条的图片: 但是,将相机稍微移动一点之后,它神奇地回到了应该出现的样子: 谢谢你的帮助! 编辑: 对于源代码,这是我能做的最好的事情,这是一个非常大的项目,并且在多个区域进行渲染: 主渲染循环 对于诸如图块之类的动态元素: spriteBatch.Begin(SpriteSortMode.Deferred, Nothing, SamplerState.LinearClamp, Nothing, Nothing, Nothing, Matrix.CreateTranslation(CameraX, CameraY, 0)) Mode.Render(spriteBatch, False) For Each j As [Delegate] In DynamicInjectionList j.DynamicInvoke(spriteBatch) Next DynamicInjectionList.Clear() spriteBatch.End() Mode.Render: For x As Integer = 0 To GRIDMAX - 1 For y As Integer = 0 To GRIDMAX - …

7
在构建基于浏览器的游戏时要画布还是不画布?
背景:我具有广泛的开发背景,但是我上一次编写游戏的代码是在多年前。我的Javascript技能非常有限,我打算通过构建一个简单的游戏(俄罗斯方块,吃豆人或类似复杂程度的东西)来改进它们。 问题:在我看来,我需要做出的基本选择是是否应该对<canvas>元素进行渲染。 使用画布,我拥有用于​​渲染点,线和更复杂物体的基本工具。大概有或将会有各种框架来帮助实现这一目标。 没有画布,我可以将对象保留在DOM树中,就像普通的网页一样,只是非常复杂,并且具有许多重叠的元素。 一种方法比另一种更好吗?它们相互排斥吗?我怎么知道该选哪个?

4
如何有效地连续找到半径内的所有实体?
我有大量的实体(单位)。在每个步骤中,每个单元都需要知道其附近所有单元的位置(距离小于给定常数R)。所有单元连续移动。这是3D模式。 平均而言,在具有给定约束的任何其他给定单位附近,将有总单位计数的1%。 我如何能有效地做到这一点,而无需强加于人?

7
管理变化的设计师数据和变化的球员数据的方法
我有一个在线游戏,玩家可以通过某种方式塑造世界-例如。Ultima Online的房屋,您可以在其中直接在世界地图的某些部分上建造房屋。这些变化应作为持久世界的一部分随着时间的流逝而持久。 同时,设计团队正在添加新内容并修改旧内容,以改善和扩展新玩家的游戏。他们将首先在测试期间在开发服务器上执行此操作,然后再将其工作与实时服务器上播放器的“工作”合并。 假设我们解决了游戏设计问题-例如。玩家只能在指定区域内建造游戏,因此他们永远不会与设计者进行地理上的冲突- 处理新数据或安排数据结构的最佳方法是什么,以避免在将新设计者数据与新玩家数据合并时发生冲突? 示例1:玩家制作了一种新的物品,然后游戏为其分配了ID 123456。该项目的实例全部回溯到123456。现在想象游戏设计师有一个类似的系统,而设计师创建了一个新项目,编号也为123456。如何避免这种情况? 示例2:某人制作了一个流行的mod,可以为您的所有龙赋予法国口音。它包括一个带有新对象的脚本assignFrenchAccent,他们使用该脚本将新的语音资产分配给每个龙对象。但是,您将部署具有相同名称的对象的“拿破仑与史矛革” DLC-如何在没有很多客户服务问题的情况下做到这一点? 我想到了以下策略: 您可以使用2个单独的文件/目录/数据库,但是读取操作非常复杂。“显示所有项目”必须在设计器DB上执行一次读取,在播放器DB上执行一次读取(并且仍然必须以某种方式区分这两个)。 您可以在一个商店中使用2个不同的名称空间,例如。使用字符串作为主键,并以“ DESIGN:”或“ PLAYER:”作为前缀,但是创建这些名称空间可能并非易事,并且依赖关系不清楚。(例如,在RDBMS中,您可能无法有效地将字符串用作主键。您可以使用整数并将低于某个数字(例如1百万)的所有主键分配为设计器数据,而高于该数字的所有主键则分配为玩家数据。但是该信息对于RDBMS是不可见的,并且外键链接将跨越“分隔线”,这意味着所有工具和脚本都需要明确地解决它。) 您始终可以实时处理同一个共享数据库,但是性能可能很差,损坏播放器数据的风险可能会增加。它也不会扩展到在具有不同世界数据的多于一台服务器上运行的游戏。 ...还有其他想法吗? 在我看来,尽管这主要是在线游戏的问题,但这些概念也可能适用于改装,即社区在开发人员修补其游戏的同时创建mod。是否有任何策略可以用来减少新补丁发布时模块破解的机会? 我也将其标记为“版本控制”,因为在一个层面上这就是-需要合并的2个数据开发分支。也许某些见解可能来自该方向。 编辑-上面添加了一些示例以帮助阐明问题。我开始认为这个问题实际上是命名空间问题之一,可以通过组合键在商店中实现。至少,这简化了合并策略。但是可能还有其他我看不到的选择。

5
如何处理尺寸不一致的Sprite板?
对于具有spritesheet 不均匀精灵的尺寸,我怎么可以得到边界,矩形为每个精灵(即蓝色框下面的图片/我只画了几个例子)? 我想确定的是: offset_x, offset_y, width, height 到目前为止,我仅使用了所有精灵都具有相同尺寸的精灵表。在那种情况下,只需要指定x和y偏移即可获得特定的精灵。然而,对于spritesheets 非均匀的尺寸,这并不工作。 编辑:阅读完评论和答案后,我改写了我的问题,以使其更具包容性。在游戏中使用Spritesheet的实际过程。以前,该问题包含以下要点:人们为什么会生成尺寸不一致的Spritesheet,以及我该如何处理。


3
如何实现基于四元数的相机?
更新这里的错误是一个非常简单的错误。我错过了弧度到度的转换。如果您还有其他问题,则无需阅读全文。 我看了几本关于此的教程,当我以为自己理解时,便尝试实现基于四元数的相机。问题是,旋转大约10分钟后,它无法正常工作。10度会跳回-10度。我不知道怎么了 我正在使用openTK,它已经有一个四元数类。我是opengl的菜鸟,我只是出于娱乐目的而做,并不真正了解四元数,所以我可能在这里做一些愚蠢的事情。这是一些代码:(实际上,除了加载和绘制vbo的方法外,几乎所有代码(它取自于演示vbo-s的OpenTK示例)) 我将多维数据集加载到vbo中并初始化相机的四元数 protected override void OnLoad(EventArgs e) { base.OnLoad(e); cameraPos = new Vector3(0, 0, 7); cameraRot = Quaternion.FromAxisAngle(new Vector3(0,0,-1), 0); GL.ClearColor(System.Drawing.Color.MidnightBlue); GL.Enable(EnableCap.DepthTest); vbo = LoadVBO(CubeVertices, CubeElements); } 我在这里加载透视投影。每次我调整窗口大小时,它都会在开始时加载。 protected override void OnResize(EventArgs e) { base.OnResize(e); GL.Viewport(0, 0, Width, Height); float aspect_ratio = Width / (float)Height; Matrix4 perpective = …

1
台式机是否有基于回合的游戏服务(例如iOS上的GKTurnBasedMatch)?
Game Center的GKTurnBasedMatch似乎为处理回合制游戏提供了非常强大的服务,而OpenFeint似乎也有类似的功能。问题是,我想要在桌面上使用类似的东西。我本来打算在Rails上滚动我自己的基于REST的服务,但是在查看了GameKit文档之后,我意识到要花很长的时间才能使它牢固。我不认为在搜索中已经错过了类似的东西吗?

2
如何处理碰撞检测,以便不允许快速的物体穿过墙壁?
我正在创建一个2D横摇射击游戏,但在子弹的碰撞检测方面遇到了一些麻烦。包括项目符号在内的所有事物都是具有自己的多边形/更新方法的对象。 问题在于子弹速度很快,并且以每秒60帧(游戏运行时)的速度,子弹通常会直接跳过一堵墙-因为它在更新间隔内移动的速度超过了墙的宽度-并且继续愉快地前进,因为多边形实际上不会重叠。 我该怎么办?我唯一能想到的就是从旧位置到新位置绘制一条线,并在该位置上进行碰撞检测,但是slick2d文档建议针对碰撞检测使用线图。我该如何解决?

3
是否存在用于编写通过套接字与n个客户端通信的基于回合的服务器的模式?
我正在使用一种通用游戏服务器,该服务器可以为任意数量的TCP套接字网络客户端在玩游戏时管理游戏。我有一个“设计”与管道胶带一起被破解,但它既脆弱又不灵活。对于如何编写健壮而灵活的客户端/服务器通信,是否存在一种完善的模式?(如果没有,您将如何改善下面的内容?) 大概我有这个: 设置游戏时,服务器为每个玩家套接字提供一个线程,以处理来自客户端的同步请求和来自服务器的响应。 然而,一旦游戏开始,除了一个睡眠之外,所有线程都将循环,并且该线程一次循环遍历所有玩家,以传达有关其行动的信息(反向请求响应)。 这是我目前所拥有的图表;单击以获取较大的版本/可读的版本,或单击66kB PDF。 问题: 它要求玩家用正确的信息准确地依次做出回应。(我想我可以让每位球员随机回应,只有在他们给我有效举动后才继续前进。) 除非轮到他们,否则不允许玩家与服务器交谈。(我可以让服务器向他们发送有关其他播放器的更新,但不处理异步请求。) 最终要求: 性能不是最重要的。这将主要用于非实时游戏,并且主要用于使AI相互对抗,而不是抽动的人。 游戏将始终基于回合制(即使分辨率很高)。每个玩家总是在其他所有玩家获得回合之前获得一招。 服务器服务器的实现恰好在Ruby中,如果有所不同的话。

3
对个人游戏项目进行快速编码的切实好处
我注意到一些程序员为自己设置了对时间敏感的挑战,通常是在“用Y倍的时间编写类型为X的游戏”或“编写X个游戏,每个游戏仅给出Y时间”的领域。以这种方式将您的工作流程设置为快速编码一段时间有什么实际好处?感觉就像您必须权衡有效的代码才能快速完成任务。而且我认为在这些挑战中添加最后一层抛光并不是优先考虑的事情,因此可以使用程序员。 几年前,我做了一些简单的2D滚动射击游戏和益智游戏,出于愚蠢,我删除了大部分代码。所以现在我很好奇使用速度编码方法再次完成一些简单的事情,并使自己更多地参与游戏逻辑。


3
是否有经验法则可以将环境扩大33%?
我正在阅读有关Gamasutra的文章,即“合理的赛车游戏轨道设计方法”,发现以下内容: 公认的第三人称游戏规则是,应将环境扩大33%左右(第2页) 我只是很好奇:其他人听说过这样的规则吗?如果是,我还能在哪里找到参考呢?

4
我应该在3d之前学习2d游戏开发吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 3年前关闭。 我是iPhone应用程序开发人员。我想进入iOS游戏。问题是-我应该先学习像Cocos 2D或Corona SDK这样的2D,然后再学习像Unity这样的3D游戏吗?我对3D游戏更感兴趣,但是您认为了解2D游戏是学习3D开发的先决条件吗?
14 2d  3d  ios 

3
PC游戏更新系统
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,这样成为Game Development Stack Exchange 的主题。 6年前关闭。 我几乎已经完成了PC游戏(我将在一两天内发布它)。我想一种方法可以通过网络轻松地发布补丁,以防万一发布后立即发现游戏中的错误,或者以后要添加功能。 我正在使用InstallJammer作为我的安装系统。是否有好的更新/补丁程序(最好是免费的),可以通过Internet检查并发送更新到播放器? 例如,如果玩家打开我的游戏,则游戏首先启动检查更新的更新程序。如果有可用更新,它将使用户知道从何处获取它。我可以修改自己拥有的游戏引擎的源代码,但我不希望重新发明轮子。

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.