游戏开发

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

5
Sprite动画最佳做法
我想更好地了解现实世界中人们如何处理动画。 您是否加载1张大图像,然后根据动画帧绘制不同的矩形? 是否将X图像文件加载到数组中并根据动画帧在数组中绘制项目? 如何处理具有不同长度的各种精灵的动画。 假设角色行走需要4到8帧,而沙滩上的波浪只需要2-3帧。您将如何处理这种情况?见下文 Dim Waves(1) as Sprite Dim Char(5) as Sprite Sub Animate() Frame += 1 Draw Char(Frame) Draw Waves(Frame) If Frame = 5 Then Frame = 0 End Sub 显然,Waves最终会出现超出范围的错误。 还是让Sprite担心它自己的动画,而根本不关心帧。让每个精灵知道自己的动画循环吗?

7
我应该给每个难度等级起什么名字?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我有一个具有4个难度等级(或AI等级)的游戏,我想知道如何命名而不是无聊的“轻松”,“正常”,“困难”,“不可能”。
18 difficulty 

9
实时调试技术
完全没有什么比调整例程的例程,编译需要花费几分钟时间的代码,执行代码,意识到您的调整方向错误并再次重复该过程的例程更多的了。 我想在进行会话时开始与我的游戏逻辑进行交互。您处理过的方法有哪些? 我很乐意听到iOS,C / C ++和C#/ XNA的解决方案。


7
是否有任何与C#一起用于PC和XBox 360开发的Lua API?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 去年关闭。 我正在阅读一本有关游戏开发的书,其中向您展示了如何在Lua中为您的游戏编写脚本。他们对Lua进行编程并从C ++中使用它,但是我想知道是否存在使用C#中的Lua的库或API:特别是从XNA来为PC 和 XBox 360 开发游戏?
18 c#  xna  lua  xbox360  pc 

4
如何为我的隐形游戏构建有趣的机械驱动拼图?
我目前正在开发一个由Tiny Heist启发的转弯式拼图隐形游戏(作为一个学生团体项目)。基本机制是,每当玩家移动方块/做某事时,每个NPC也会移动。 我的目标是要获得类似于Portal的体验:玩家从一个房间进入另一个房间,每个房间都有一个入口和一个出口,它们之间有障碍物。玩家可以看到出口在哪里以及障碍物,并且必须利用游戏机制绕过障碍物并到达出口。 一个示例房间是: 有一个走廊,有一个警卫来回走动。出口在走廊的尽头。 走廊中间有一个壁橱。 玩家必须利用警卫的巡逻躲藏在壁橱中,让警卫经过他,离开壁橱并到达出口。 我希望玩家在尝试解决难题时感到困惑;理想情况下,我希望他们觉得自己掌握了解决方案,但是找不到。而我希望他们觉得自己聪明,一旦他们这样做解决了这个难题。 问题是,我不知道如何设计拼图来提供这种体验。我有一些想法,其中有些感觉就像是在“早期游戏”关卡中很有趣,但是过了一会儿,我正在绘制的所有关卡都感觉像是“ y”和“无聊”,或者由于太多的运动部件而变得过于复杂(我我尝试设计Portal 2级别时遇到了同样的问题)。 我想创建依赖关系,使机制相互重叠,使玩家认为“我需要做X,但是在得到Y之前我不能做X,但是如何在不做X的情况下做Y ?”。我可以添加其他机制,例如狗或安全摄像机,但我不知道如何利用它们。 当我尝试设计一个关卡时,我提出的想法遵循以下模式:“您需要关闭摄像头才能前进,但是需要给狗一根骨头才能到达摄像头,但是您需要分散警卫人员来养狗”。这些想法令人费解,但是肤浅。他们不觉得自己会在智力上刺激(甚至困难)。 在这种隐身游戏环境或任何形式的益智游戏中,我可以采用哪种方法或设计模式为玩家创造更丰富的问题​​解决机会?


4
我该如何避免在整个代码中出现一次性标记和检查?
考虑一个纸牌游戏,例如《炉石传说》。 有成百上千种卡片可以做各种各样的事情,其中​​有些甚至对于一张卡片来说都是独一无二的!例如,有一张牌(称为Nozdormu)可将玩家回合减少到仅15秒! 当您具有如此广泛的潜在影响时,如何在整个代码中避免幻数和一次性检查?如何避免PlayerTurnTime类中的“ Check_Nozdormu_In_Play”方法?以及如何组织代码,使得当您添加更多效果时,您无需重构核心系统即可支持以前从未支持过的东西?

4
实体系统中的缓存未命中和可用性
最近,我一直在为我的框架研究和实现一个实体系统。我认为我阅读了我能找到的大多数文章,reddits和有关它的问题,到目前为止,我认为我对这个想法已经足够了解。 但是,它提出了有关总体C ++行为,我在其中实现实体系统的语言以及一些可用性问题的一些问题。 因此,一种方法是直接在实体中存储组件数组,而我没有这样做,因为它在遍历数据时破坏了缓存的局部性。因此,我决定每个组件类型只有一个数组,因此相同类型的所有组件在内存中都是连续的,这应该是快速迭代的最佳解决方案。 但是,当我要在实际游戏实现中从系统迭代组件数组以对其进行处理时,我注意到几乎总是同时使用两个或多个组件类型。例如,渲染系统将Transform和Model组件一起使用以实际进行渲染调用。我的问题是,由于在这种情况下不会一次线性地迭代一个连续的数组,我是否立即牺牲了通过这种方式分配组件的性能收益?当我在C ++中迭代两个不同的连续数组并在每个循环中使用两个数组中的数据时,这是否会产生问题? 我想问的另一件事是,应该如何保留对组件或实体的引用,因为组件的本质是如何放置在内存中,它们可以轻松切换数组中的位置,或者可以重新分配数组以进行扩展或扩展。缩小,使组件指针或句柄无效。您建议如何处理这些情况,因为我经常发现自己想在每一帧上对变换和其他组件进行操作,并且如果我的句柄或指针无效,那么在每一帧进行查找都非常麻烦。

2
如何生成类似于《帝国时代II》随机地图的随机地图?
我喜欢《帝国时代II》生成随机地图的方式(种类繁多,生物群落过渡不错,地图感觉随机而不混乱),但仍在努力复制样式。我尝试使用例如Perlin噪声,但是所有结果要么太均匀,要么不一样,Perlin值->地形启发法过于敏感和脆弱,无法创建各种世界类型。 我记得AoE2地图类型“未知”广告了“ 100,000张可能的地图”,暗示了一些种子编号的用法,但是我不确定如何使用种子编号来产生我所看到的品种。 我可以使用什么算法和启发式方法来生成类似于AoE2随机图的随机图? 编辑更具体: 进一步思考我的问题,并研究我对AoE2随机地图引擎的喜欢,我认为我最大的问题是管理地图上水和植物生命的分布。我现在看到我也将其与“有意义的生物组转换”联系在一起,但这是一个不同的问题(尽管我希望继续使用Perlin噪声将使其难以解决)。 我添加了几张AoE2随机映射,突出显示了我对它们的映射引擎的喜好,但我自己的努力未能重现。所有屏幕截图均取自随机地图类型“自定义”->“未知”。我没有指示游戏使用特定地理位置,例如群岛。 以下是来自我自己的地图引擎的图像。每个像素对应一个AoE2地图图块。 我的项目的一个难题是我希望地图比AoE2地图大很多倍。因此,无论我使用哪种引擎,都必须能够在每个地图中创建完整的生物群系,而不能像AoE2那样在每个地图中创建一组狭窄的生物群系。 帝国时代II地图 这是一个具有内陆湖泊和类似河流的事物的示例。我喜欢地图上包含大量散布的水的方式,但是水仍然有些集中-有大量土地可用于建立帝国。您无需花费整个游戏就可以在水上规划城市。 这是一个类似的示例,其中游戏足够聪明,可以将岛屿与可穿越的沼泽相连。我无法想象基于噪声的算法将如何在那以及只有那些地方造成沼泽。另外,请注意游戏是如何创造土地的,以便每个玩家都拥有自己的私人大片土地。它并没有创造出一片随机的土地,然后就每位玩家开始时哪怕是最糟糕的猜测。 我喜欢这张地图也大量使用水,但其中不包括许多内陆湖泊。将其与第一个图像进行对比。我喜欢AoE2使用相同的构建块创建完全不同的地理位置的方式。我尝试使用Perlin噪音的尝试在这里失败了-我要么获得了广阔的海洋,使陆地或10,000个湖泊的土地相形见war。我还发现很难同时到达岛屿和相连的大洲(想想北美/南美)。 将此图像与其上方的图像进行对比。他们表明地图的干旱度不取决于水位。第一张图片的地图几乎没有水,但包含森林和草丛。第二张图像的水量适中,却是沙漠。我喜欢那是可能的(想想您的世界既有新墨西哥,又有撒哈拉和哥斯达黎加)。 我自己的地图 我在很多地方都读到,构建地图的一种好方法是对Perlin噪声的多个级别进行分层,每个级别代表不同的数据维度。按照流行的建议,我选择了海拔和湿度,并从此处的Whittaker表中选择了地形类型。 我拍了两个珀林图,通过一个简单的量化每个值成整数if perlin_val < x { i=some_int } else if perlin_val < y...,然后将(海拔,湿度)整数对映射到地形类型表(例如[1,0]->热带沙漠,[1,1 ]->草原)。该系统中包括海洋-海拔= 0定义的海洋。 有很好的变化,并且在许多方面感觉都像真实世界,但是存在一些问题: 首先,海洋深度没有规律。您可能希望靠近岸边的浅水区和更远的深水区,没有哪个韵律或原因 第二,所有的水都集中在海洋中。没有湖泊或河流,因为Perlin噪声不会在大洲中部突然下降到较低的值。 在每个生物群落的数量之间取得平衡非常非常困难。我将此归因于: Perlin噪声遵循正态分布,因此很难估计如何调整每个尺寸映射的概率 试图平衡多个维度很困难-也许我想要更多(2,3),所以我提高了获得(n,3)的几率。好吧,现在我有太多(3,3)了,一切看起来都错了。 当我将噪声放大到足够接近以获取平滑数据时,我没有得到非常完整的Perlin值样本。因此,我需要调整我面前地图的分布,重新加载新的随机地图,并获得截然不同的结果。 我试图通过使用第三组Perlin值制作水来解决河流/湖泊问题。根据水/土地的二元决策,然后将以上所有内容应用于土地。这使控制水的分布变得非常容易(仍然不完美,但是更好),但是引入了一个问题,那就是存在许多没有意义的生物群落过渡。例如,茂密的草原中莫名其妙的沙漠,沙滩上的雪等。由于上述原因,仍然很难控制陆地生物群落的比例。 考虑到上述问题,我尝试了一种更简单的算法,该算法仅将Perlin噪声映射到一个维度。我现在有一系列的地形类型,从0 =深海-> 1 =浅海-> 2 =沙滩...-> N =雪。虽然这产生了岛屿和大洲,并且使平衡每个地形的比例变得容易得多,但地形类型却过于聚集。每个陆地块看起来都像一张海拔图,通常没有分散在其表面的地形类型。每个陆地块都具有大致相同的特征,始终具有相同的顺序,并且始终具有相同的环形形状。

5
游戏对象应该如何相互了解?
我发现很难找到一种组织游戏对象的方法,以使它们是多态的,但同时又不是多态的。 这是一个示例:假设我们希望所有对象都到update()和draw()。为此,我们需要定义一个GameObject具有这两个虚拟纯方法的基类,并让多态性起作用: class World { private: std::vector<GameObject*> objects; public: // ... update() { for (auto& o : objects) o->update(); for (auto& o : objects) o->draw(window); } }; 应该使用update方法来处理特定类对象需要更新的任何状态。事实是每个对象都需要了解周围的世界。例如: 地雷需要知道是否有人与它发生碰撞 士兵应知道另一支队伍的士兵是否在附近 僵尸应该知道半径内最近的大脑在哪里 对于被动交互(如第一个交互),我认为碰撞检测可以使用来将在特定情况下发生碰撞的操作委托给对象本身on_collide(GameObject*)。 其他大多数信息(如其他两个示例)都可以通过传递给该update方法的游戏世界来查询。现在,世界不再根据对象的类型来区分对象(它将所有对象存储在一个多态容器中),因此理想world.entities_in(center, radius)情况下返回的是的容器GameObject*。但是,当然,该士兵不希望攻击其团队中的其他士兵,而僵尸也不会处理其他僵尸。因此,我们需要区分行为。解决方案可能是以下几种: void TeamASoldier::update(const World& world) { auto list = world.entities_in(position, eye_sight); for (const auto& e : list) …
18 c++  architecture 

2
XNA 2d相机滚动-为什么使用矩阵变换?
我正在制作一个测试游戏,希望关卡不断滚动。为了创建这种效果,我建立了一个摄像机类,该摄像机类仅存储vector2位置和枚举方向。它还包含一个公共的“移动”方法,该方法仅以固定的速率更改头寸。然后,当我在绘制时遍历我的瓷砖阵列时使用此位置。这一切都很好。 但是,有人告诉我应该使用Transform矩阵来移动相机,并且在启动spritebatch时应该提供此信息。我有点困惑a。)这是如何工作的?好像我只在spritebatch开始时给它一样,它怎么知道要保持位置变化?b。)为什么在遍历图块时仍然确定需要照相机的位置? 目前,我无法正常工作,但这并不奇怪,因为我还不完全了解它的工作原理。目前,在我的尝试(遵循的代码)中,正在绘制的图块发生了变化,这意味着相机的位置正在更改,但是视口的位置保持不变(即,在相机的原点)。对于要如何使用它,我将不胜感激。 相机: class Camera { // The position of the camera. public Vector2 Position { get { return mCameraPosition; } set { mCameraPosition = value; } } Vector2 mCameraPosition; public Vector2 Origin { get; set; } public float Zoom { get; set; } public float Rotation { get; …

2
如何正确访问C ++实体组件系统中的组件?
(我正在描述的内容基于此设计:什么是实体系统框架?,向下滚动即可找到它) 我在用C ++创建实体组件系统时遇到了一些问题。我有我的Component类: class Component { /* ... */ }; 实际上是要创建其他组件的接口。因此,要创建自定义组件,我只需实现接口并添加将在游戏中使用的数据: class SampleComponent : public Component { int foo, float bar ... }; 这些组件存储在Entity类中,该类为Entity的每个实例提供唯一的ID: class Entity { int ID; std::unordered_map<string, Component*> components; string getName(); /* ... */ }; 通过哈希组件的名称将组件添加到实体(这可能不是一个好主意)。当我添加一个自定义组件时,它被存储为组件类型(基类)。 现在,另一方面,我有一个System接口,它在内部使用Node接口。Node类用于存储单个实体的某些组件(因为系统对使用实体的所有组件不感兴趣)。当系统必须使用时update(),它仅需要遍历由不同实体创建的存储节点。所以: /* System and Node implementations: (not the interfaces!) */ class …

3
如何在实体系统中编码UI / HUD?
我想我已经得到了亚当·马丁(t-machine)启发的实体系统的想法。我想开始在下一个项目中使用它。 我已经知道实体,组件和系统的基本知识。我的问题是如何处理UI / HUD。例如,任务窗口,技能窗口,角色信息窗口等。您如何处理UI事件(例如,按下按钮)?这些是不需要每帧都进行处理的东西。目前,我正在使用MVC编写UI,但我认为这与实体系统不兼容。 我读过,实体系统嵌入在更大的OOP中。我不知道UI是否在ES之外。我该如何处理?

10
仅在C语言中进行游戏开发。可能吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我是印度的大一学生,并且希望在本学期的项目中做一个小游戏。 我非常擅长C语言,并且学习迅速,但是我想问问是否要完全使用C语言开发游戏(不使用C ++或C#),但我想使用它们,但是对于大学项目,我们有严格的要求,只能使用C语言。 我正在寻找的是一个简单的顶视图驾驶游戏。它不会有任何花哨的东西,即使视觉上的东西也将由简单的字符来驱动。例如,用户控制的汽车可以由▓表示,道路边缘可以由一系列|表示。你怎么看?
18 c 

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.