游戏开发

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

3
在持久性在线游戏中多久保存一次玩家的状态?
在在线游戏中,人们喜欢随时随地登录和注销。通常,他们的游戏成就会无缝保存在服务器上。这并不是很难实现,但是我想知道如何以有效且可行的方式完成并扩展规模。 每次发送时都保存玩家的坐标和状态是否有意义?我的node.js服务器可以轻松地做到这一点而不会阻塞响应,我想使用Mongo数据库,但是也许每秒一次并且在服务器范围内的事件中一次收集所有一次更合适?

1
我在此组件体系结构方面走的正确吗?
我最近决定修改游戏架构,以摆脱深层的类层次结构,并用可配置的组件替换它们。我要替换的第一个层次结构是Item层次结构,我想了解一些有关我是否处在正确轨道上的建议。 以前,我的层次结构如下所示: Item -> Equipment -> Weapon -> Armor -> Accessory -> SyntehsisItem -> BattleUseItem -> HealingItem -> ThrowingItem -> ThrowsAsAttackItem 不用说它开始变得凌乱,而对于需要多种类型的物品来说,这并不是简单的解决方案(例如,某些设备用于物品合成,某些设备可抛弃,等等)。 然后,我尝试将功能重构并将其放置到基础项目类中。但是后来我注意到该物料具有大量未使用/多余的数据。现在,我尝试为我的其他游戏类创建至少一个类似于建筑的组件,至少要为我的物品做一个。 这是我目前正在考虑的组件设置: 我有一个基础项目类,该类具有用于各种组件的插槽(例如,设备组件插槽,修复组件插槽等,以及任意组件的映射),因此如下所示: class Item { //Basic item properties (name, ID, etc.) excluded EquipmentComponent* equipmentComponent; HealingComponent* healingComponent; SynthesisComponent* synthesisComponent; ThrowComponent* throwComponent; boost::unordered_map<std::string, std::pair<bool, ItemComponent*> > AdditionalComponents; } 所有项目组件都将从基本ItemComponent类继承,并且每种Component类型都负责告诉引擎如何实现该功能。也就是说,HealingComponent告诉战斗机械师如何将物品当作治疗物品使用,而ThrowComponent告诉战斗引擎如何将物品视为可扔物品。 …

2
是否可以通过图像伪造模糊?
我正在将libGDX用于Android游戏;据我所知,它没有用于模糊处理的API。 在Wikipedia上阅读,似乎是通过将每个像素RGB值设置为所有相邻值的平均值来形成模糊的。在libGDX中似乎不容易实现-设置像素数据。 所以我的问题很简单: 仅使用图像就可以伪造(像样的)模糊吗? 我可以叠加多个(数量,透明度,类型)图像;但是我可以像这样创建令人信服的模糊吗? 我很想说“不”,但也许其他人也取得了类似的成就。为了清楚起见,我希望可以在任何图像之上渲染一组1+个普通图像,以产生类似模糊的效果。

3
那里有一个很好的跨平台C ++矢量图形库吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 5年前关闭。 我正在制作游戏,想使用矢量图形。我开始使用开罗对其进行重新编码,性能令人震惊。因此,我正在寻找其他图书馆。它需要用于C ++和跨平台(例如,没有Direct2D)。有人曾经这样问过另一个问题,但是没有任何合适的答案。一定有东西...?
9 c++  graphics  vector 

2
如何有效地在网络上存储和显示地图?
关于 这实际上是两个问题合二为一。首先,我正在寻找一种有效存储大量切片数据的方法。另一个方面涉及查询数据集和显示图块。让我先给你一些背景。 我们正在使用CraftyJS库制作基于浏览器的多人大亨游戏,以将其渲染到Canvas。在GUI的后台,我们在PHP上运行Yii Framework,并且它们都连接到Python随机地图生成器和游戏引擎。 这是第一个粗糙地图渲染的外观:http : //i.imgur.com/khAXtl.png 存储地图数据 每次游戏开始时,都会随机生成游戏世界。每个玩家的大小为100x100的六角形瓷砖。这意味着对于一个三人游戏,将创建90.000个图块。目前,我只是创建一个JavaScript数组来渲染地图。 这对于渲染来说效果很好,但是对于与地图的任何形式的交互,我们都需要存储哪个玩家拥有该图块,在该图块之上构建什么样的结构,它的当前价格等等。起初,至少对于原型而言,我们想使用MySQL,但是经过一些测试,它的速度并没有我想要的那么快。也许像MongoDB这样的对象存储将更适合于存储切片数据而不是SQL表。也许还有其他东西? 显示地图 我看到的另一个问题是在地图上移动。目前,我正在为每个图块创建Crafty实体,即使它不在视口中也是如此。这很慢,因为即使Crafty仅在视口中渲染那些,它也会存储并可能遍历每个渲染事件上的所有图块。我目前所拥有的是绘制的生成地图,当您四处走动时加载和停顿非常慢,现在我想使其可玩。 我的第一个想法是加载视口中显示的图块子集。但是,当玩家将视口移至空白区域时,我需要查询服务器并等待响应返回,只有这样才能渲染地图。这在本机应用程序中会很好,但在网络游戏中却比较落后。 从地图上获得平滑性能的方法可能是将较大的图块子集预加载到javascript数组中并将其用作缓存。播放器将有几个屏幕“缓存”,当他移动视口时,我将向JS“缓存”加载更多图块。 我朝着正确的方向前进吗?我很想从做过类似事情的人那里获得更多信息。我是游戏开发的新手,但是在过去的几周中,我已经经历了很多研究。



4
我应该使用什么技术来促进XNA GameComponents之间(或游戏中任何类型的组件之间)的通信?
我从第一个“适当的”游戏项目开始,并且不可避免地遇到障碍,试图决定XNA中的游戏组件应该如何通信。 从以前的(Java)GUI编程事件来看,处理程序和侦听器似乎是前进的道路。因此,我将拥有某种类型的事件总线,该事件总线可以接受事件注册,并可以订阅这些事件的类,并由处理程序来处理它们。例如(伪代码): class SpriteManager Update(){ if(player.collidesWith(enemy) // create new 'PlayerCollisionEvent' } class HUDManager onPlayerCollisionEvent(){ // Update the HUD (reduce lives etc) } 但是,我不确定完全完成此操作所需的代码设置(在C#中)。是什么跟踪事件(某种公共汽车?),它的结构如何? 在游戏服务上似乎也有很多提及,您可以在Game.cs主类中注册一个GameComponent,然后从引用了主要“ Game”对象的代码中的任何位置获取它。我已经使用SpriteBatch对象尝试了此操作,这看起来非常简单..但是,我看不到它像事件模型那样灵活。 以敌人死亡时为例。我们要更新游戏分数。使用服务,我可以获得对在Game1中创建并作为服务添加的StateManager对象的引用,然后将“得分”设置为新值。我认为“ onEnemyDeath”事件可以由多个类以不同的方式处理,但是由相关“敌人死亡检测”部分中的一行代码启动,比单独转换每个必需的GameComponent然后调用任何东西更好。方法是必需的。 还是这些次等策略比其他策略好? 我意识到这和游戏通信范例一样,在一定程度上是我对C#的不充分了解,但是我真的很想弄清楚这一基本知识。 更新资料 看过服务时,我不太相信它的细节-它基本上是在传递一个全局变量(据我了解)。 更新2 看过有关事件处理和测试示例代码的基础教程之后,看来事件将是我所讨论的逻辑选择。但我在所看到的示例中使用的却很少。有一些明显的原因为什么不应该这样做?

2
当实体的状态未充分利用enter(),execute()和exit()时,是否存在设计缺陷?
我通过示例跟踪了Mat Buckland的《编程游戏AI》,发现我并不总是在实体状态上使用enter(),execute()和exit()。例如,在RPG中,武器可能具有装备状态,而我可以在该状态下使用enter()和exit()向玩家的能力修改器添加或减去,但实际上并不需要execute( )。这是我引擎的设计缺陷,还是这种方法的缺点?

1
波浪纹波效应?
我从事塔防游戏已有一段时间了,到目前为止,我对结果非常满意。但是,我想补充一件事。 我在这里观看了适用于Windows Phone 7的GeoDefense视频:http : //www.youtube.com/watch?v= YhPr4A4LRPQ 注意如何(当一个单位被杀死或一个弹丸击中一个单位时),背景以某种波效应起伏。 我该如何做一个等价物?我以为我需要以某种方式在顶点着色器中执行此操作,因为它的顶点由许多顶点组成。 你打什么电话 编辑需要特别注意的是,我的XNA游戏不是针对Windows Phone而是针对Windows PC。
9 xna  c#  hlsl 

4
设计事件管理器系统时应考虑什么?
我一直在研究Java游戏引擎的基础知识,并且已经准备好添加到Event Manager系统中。 从理论上讲,我知道事件管理器应该做什么:允许对象为某些事件“注册”,并且每当事件管理器收到事件通知时,就将事件广播给“注册”的侦听器。我感到很困惑的是如何开始实施它。 我无法从网上找到任何有关从头开始实施事件系统的信息,因此我正在寻找有关这种情况下最佳实践的信息-我应该和不应该做什么做应该做的事情。 例如,我的每个游戏对象是否真的都必须有一个EventManager字段?由于我所有的游戏对象都继承自一个抽象的父类,因此我认为我应该能够使用静态引用,以便在所有游戏对象之间共享一个事件管理器实例。我已经使用Applet进行了类似的操作,以用于渲染每个对象。 我想我必须为每个可能的订阅事件维护某种类型的集合-根据需要在列表中添加和删除游戏对象。我认为应该使需要广播的事件队列成为可能,在这种情况下,我可以简单地在主游戏循环中添加“ EventManager.Update()”,并让该Update()方法广播最后发生的事件每帧。最后,每个对象都有一个HandleEvent(Event e)方法,然后可以对其进行适当地解析和响应。 这听起来像是实现此类系统的正确方向,还是我偏离了正常轨道和/或缺少了一些显而易见的东西?
9 events 

2
增加发条速度?
我正在PyGame中使用2D横屏游戏。对于每张地图,我们使用一个纹理(这是纹理的实际大小): 然后,我们使用以下代码加载图像: sprite = pygame.image.load("Maps/MapTesting.png") sprite.convert() sprite = pygame.transform.scale(sprite, (sprite.get_width()*6, sprite.get_height()*6)) 如您所见,纹理被炸毁了6次以创建实际的地图纹理。平均而言,此纹理约为4500x800。每帧都必须在屏幕上涂抹此纹理,因为整个屏幕都是脏的(由于侧面滚动)。我们使用以下代码进行操作: screen.blit(sprite, (0, 0), (cameraposx, cameraposy, windowheight, windowwidth)) 而且有效。问题在于它的运行速度很慢:我在低端的PC上只能获得40 FPS的微不足道,而且没有任何实际的AI /对象运行,而我们的目标是60 FPS。我们如何加快速度? 请注意,上面的代码已经过清理并且没有上下文。完整的代码可以在这里找到:https : //github.com/nightcracker/PyGG2 最后但并非最不重要的一点是,尽管上面的图像可能看起来像8位,但是游戏中的某些元素需要更高的位深度。
9 pygame 

3
开发游戏时,是否值得再支持iOS 3.x或iPhone 3G设备?
对于游戏开发者而言,尝试并支持较旧的设备(iPhone 3G和更早版本)还是支持较旧的操作系统(iOS 3.x和更早版本)仍然值得吗?还是建议在iPhone 3GS及更高版本中使用受支持的OpenGL ES 2.0?您是否知道仍在使用较早版本的设备/操作系统的用户百分比?
9 iphone  opengl-es  ios 

3
有没有更好的方法来建立事件系统?
事件系统令人惊叹,它们使代码变得极其笨拙,并且确实允许通过对象之间的轻松通信和游戏循环来动态创建游戏。我目前的执行效率很难。目前,我对将对象列表分离为它们响应的事件进行了一些细微的优化,这确实产生了奇迹,但是我应该做的还很多。 目前,我有两种方法: 最简单:发送事件时,所有对象都添加到向量中。所有对象都通过其handle_event()方法发送事件 更复杂:我有一个以字符串为键的映射,以int为值的映射。添加事件类型后,会将其添加到此地图,只需将int简单地增加(必须有更好的方法) ,然后将对象向量的向量推回新的向量以处理该事件类型。 调用事件时,它只需将eventTypes映射中的相应int映射到对象向量的vector内的类型,然后将该事件发送给处理该事件类型的每个对象。 对于许多对象,这第一种方法相当慢(很明显),但是对于很少的对象来说却相当快。而对于要处理不同类型事件的大型对象,第二种方法相当快,但对于处理相同类型事件的对象,每个对象的第二种方法却较慢。 有没有更快的方法?有没有一种更快的方法来从字符串类型查找int?(起初,我有一个枚举,但是它不允许使用自定义类型,这是必需的,因为需要具有一定的动态性。)

1
STL对于移动设备是否足够有效?
在iOS和Android NDK上进行移动游戏开发时,一些开发人员编写了自己的C ++容器,而另一些开发人员则声称STL足以满足移动游戏开发的需求(例如,iPhone 3D编程的作者使用STL而非Objective-在他的示例中使用C。他的辩解是STL不比Objective-C慢。 然后,还有一些移动开发人员完全放弃了C ++,完全(或大部分)使用C语言(C89 / C90)开发了游戏。 每种方法的优点和缺点是什么?

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.