Questions tagged «c++»

C ++是一种静态类型化,自由格式,多范例,已编译的通用编程语言。

5
如何优化顺序重要且碰撞是基于对象组的条件的碰撞引擎?
如果这是您第一次遇到此问题,建议您先阅读下面的更新前部分,然后阅读本部分。 不过,这是问题的综合内容: 基本上,我有一个带有网格空间分区系统的碰撞检测和解决引擎,碰撞顺序和碰撞组很重要。一次必须移动一个身体,然后检测碰撞,然后解决碰撞。如果我一次移动所有物体,然后生成可能的碰撞对,则显然速度更快,但是由于不遵守碰撞顺序,因此分辨率会下降。如果我一次移动一个身体,我将不得不让身体检查碰撞,这将成为一个^ 2问题。将组混合在一起,您可以想象为什么在很多身体上它变得非常慢。 更新:我已经为此付出了很多努力,但是无法优化任何东西。 我成功实现了Will所描述的“绘画”,并将组更改为位集,但这是非常非常小的加速。 我还发现了一个大问题:我的引擎取决于冲突顺序。 我尝试了一种独特的碰撞对生成的实现,该实现肯定可以大大加快一切,但是却破坏了碰撞的顺序。 让我解释: 在我的原始设计中(不生成对),发生这种情况: 一个身体移动 移动后,它会刷新其单元格并使其碰撞到的身体 如果它与需要解决的物体重叠,则解决碰撞 这意味着,如果一个物体移动并撞到墙壁(或任何其他物体),则只有已移动的物体才能解决其碰撞,而另一个物体将不受影响。 这是我想要的行为。 我了解到物理引擎并不常见,但对于复古风格的游戏却有很多优势。 在通常的网格设计(生成唯一对)中,会发生以下情况: 所有身体移动 在所有身体移动之后,刷新所有单元格 生成唯一的碰撞对 对于每对,处理碰撞检测和解决 在这种情况下,同时移动可能会使两个物体重叠,并且它们将同时分解-这有效地使物体“相互推挤”,并破坏了与多个物体的碰撞稳定性 这种行为对于物理引擎是很常见的,但在我的情况下是不可接受的。 我还发现了另一个主要问题(即使在现实情况中不太可能发生): 考虑A,B和W组的身体 A与W和A相撞并解决 B与W和B相撞并下定决心 A对B无能为力 B对A无所作为 可能存在许多A主体和B主体占据同一个单元的情况-在这种情况下,主体之间存在很多不必要的迭代,这些迭代不能相互反应(或仅检测碰撞但不能解决它们) 。 对于占据同一单元的100个物体,这是100 ^ 100次迭代!发生这种情况是因为没有生成唯一对 -但是我无法生成唯一对,否则我将得到我不希望的行为。 有没有一种方法可以优化这种碰撞引擎? 这些是必须遵守的准则: 碰撞顺序非常重要! 身体必须一次移动一个,然后一次检查一个碰撞,然后一次移动一个就解决。 机构必须具有3个群组位组 组:身体所属的组 GroupsToCheck:人体必须检测到碰撞的组 GroupsNoResolve:团体不能解决的碰撞 在某些情况下,我只希望检测到碰撞但不能解决 更新前: 前言:我知道优化此瓶颈不是必需的-引擎已经非常快。但是,出于娱乐和教育目的,我很想找到一种使引擎更快的方法。 我正在创建一个通用的C ++ 2D碰撞检测/响应引擎,重点是灵活性和速度。 这是其架构的非常基本的图: …

5
避免在DirectX 10着色器中使用if语句?
我听说应该在着色器中避免if语句,因为语句的两个部分都将被执行,并且错误的语句将被丢弃(这会损害性能)。 在DirectX 10中仍然存在问题吗?有人告诉我,只有正确的分支才能执行。 对于该示例,我有以下代码: float y1 = 5; float y2 = 6; float b1 = 2; float b2 = 3; if(x>0.5){ x = 10 * y1 + b1; }else{ x = 10 * y2 + b2; } 还有其他方法可以使其更快吗? 如果是这样,该怎么办? 两个分支看起来都相似,唯一的区别是“常量”的值(y1, y2, b1, b2对于Pixel Shader中的所有像素都是相同的)。


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

6
SIMD C ++库[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 2年前关闭。 过去,我将Visual Studio与DirectX XNA数学库一起使用。现在,我正在使用GNU编译器集合。任何人都可以通过良好的文档建议SIMD数学库?
14 c++  mathematics  simd 

3
中点位移算法
在花了几个小时试图找出问题之后,这个问题主要是出于绝望。 如果您将视线移到上面的图片,您应该会看到我的中点位移算法算法正在(某种程度上)成功运行;产生一些连贯的噪声模式。 但是,它在图像上留下了黑色的虚线网格,我不知道为什么。我可以预见这是数学上的问题,但是我看不到它。也没有在任何在线资源中指出这是一个可能的问题;因此,对解决此错误的任何帮助将不胜感激。 unsigned char** mdp(unsigned char** base, unsigned base_n, unsigned char r) { size_t n = (2 * base_n) - 1; unsigned char** map = new unsigned char*[n]; for (unsigned i = 0; i < n; ++i) map[i] = new unsigned char[n]; // Resize // 1 0 1 // …

5
要在OpenGL ES 2.0游戏中使用的完整数学库?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 5年前关闭。 您是否知道用于OpenGL ES 2.0游戏的完整(或几乎完整)的跨平台数学库? 该库应包含: Matrix2x2,Matrix 3x3,Matrix4x4类 四元数 Vector2,Vector3,Vector4类 欧拉角类 上述类,转换等之间的操作。 3D图形中的标准数学运算(点积,叉积,SLERP等) 是否可以单独或作为任何软件包的一部分使用这样的Math API ? 编程语言:Visual C ++,但计划移植到OS X和Android OS。

1
为什么开发游戏机模拟器如此困难?
我总是发现模拟器非常吸引人。我很想为老式的gangan控制台或手持设备创建一个模拟器。这将有助于我更好地了解硬件以及为该硬件创建的游戏。但是,人们总是说这有多困难,我什至不应该尝试。我想知道为什么。 另外,我想在一个好的起点上找到一些建议,在哪里可以找到所需的信息?

4
DirectX目前有哪些书籍(专注于3D)?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 对于OpenGL,Op​​enGL SuperBible 5th Edition才刚刚发布了几个月,它不仅是学习OpenGL 3(本书的第1部分),而且还是Parts中高级OpenGL主题的一本非常受好评的极好的书。 2和3。 对于DirectX,我们应该阅读的最新材料是什么?欢迎提供带有教程的书籍和网站。是否有可用的现代书籍通过DirectX的当前版本,供那些对C ++相当了解但完全没有DirectX经验的入门读者使用? 这似乎受到了高度赞扬:DirectX 10 3D游戏编程简介
14 c++  directx 

6
我是否由于不了解C ++进行游戏设计而伤害自己?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 现在,我觉得自己在Java和C#方面都很强。(从一个到另一个的跳跃并不多)。 虽然我并不期望游戏设计师/程序员会在我职业生涯的早期实现目标,但这是我在职业生涯后期将会实现的目标。 考虑到这一点,我感到无视C ++和与其相关的游戏设计工具最终会伤害我或使我达到目标的能力减慢。 是这样吗 还是我可以继续使用XNA和WPF磨练自己的C#技能来开展个人项目,从而使我从事这样的职业?
14 xna  c++  c#  java  wpf 

6
您会为C ++游戏项目推荐哪种脚本语言?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 5年前关闭。 这里所说的脚本不仅意味着将配置数据放入脚本中,还意味着对项目的某些部分进行脚本化,例如一些类方法,测试特定的游戏循环等。这不仅是为了加快开发速度,而且还允许玩家看到其中的一些内容。脚本来调整游戏的某些方面。 诸如Lua之类的语言具有诸如luabind之类的包装器,但是当我过去使用它时,它会遇到问题,因为它不支持继承上下文中的方法重新定义。 您对使用或不使用的语言/包装有什么建议?

2
实施MMO任务机制的提示?
您将建议使用哪些工具,模式或最佳实践来实现下面列出的要求中给出的任务机制? 我正在谈论软件体系结构(应该是多么通用)以及对象连接,事件订阅和条件表示的选择。欢迎提及您成功使用的工具/库。 编辑:如果您正在使用脚本,您推荐什么设置? 要求: 简单的2D mmo(rpg) 所有游戏数据(包括任务)都存储在关系数据库中 游戏中的任何事件都可能触发玩家的新任务或推进现有任务 任务可以具有任意数量的条件,玩家可以使用该任务 一个任务可以包含任意数量的具有任意条件的子任务/步骤 任务范围很简单: 与A交谈-杀死5 B-与A交谈-永久增加健康 相当投入: 使用X区域中的物品-转到Y区域-机器人会产生-杀死机器人而不会造成超过10%的伤害-机器人掉落物品-拾取物品-传送门解锁-将物品传送到传送门后面的J-获得金钱和经验-允许再次通过传送门-锁定此玩家的传送门 可能存在关卡实例(玩家可以团队或孤立地完成某些任务,这只会为那些参与者生成关卡位置) 最好使用世界编辑器来管理任务,而无需脚本或编程知识(编辑:不过,通常不提倡脚本) 我假设C ++是实现的语言 我当时在想,如果我可以将事件和条件的任何链条结合起来,我们就可以对更复杂的模型进行建模,从而可能进行更具吸引力的探索。我尝试过使用自己的ECA(事件,条件,动作)引擎进行滚动实验,但这可能有点过分。在不使用任何脚本的情况下对通用条件进行建模特别困难。

2
如何在游戏中模拟多普勒效果?
我正在尝试在游戏(赛车游戏)中模拟多普勒效果。我没有使用模拟声音效果的特定声音库,只有混合数据的回调函数。 我已经弄清楚了如何在混频器功能中更改采样频率。 我不知道,根据玩家和发射器的位置和速度,频率应该改变多少。 这是我在游戏中所拥有的: //player vec3 p.pos; vec3 p.vel; //emitter vec3 e.pos; vec3 e.vel; 1)根据维基百科,发射频率与观测频率之间的关系为: float f = (c + vr) / (c + vs) * fo 其中c为常数,介质(通常为大数)中的速度 vs和vr是相对于介质的源和接收器速度。 所以我猜: float vr = p.vel.length; //player speed float vs = e.vel.length; //emitter speed 但是我认为这是错误的,它不会产生任何频率变化,例如:如果vr = 0(玩家不移动)并且发射器具有恒定速度,则vr并且vs不会变化(尽管它们应该)。 也许我应该相对于发射器的速度来计算玩家的速度? 像这样 : relative_speed = …

5
如何使用自定义引擎在多个平台上运行?
Unity和Unreal等游戏引擎可以在多种平台上运行。我想知道他们是如何做到的。 我已经使用C ++和OpenGL已有一段时间了,我正在寻找的资源是集成一些东西,使我可以在不同的平台上运行而无需重写。类似于LibGDX,您可以使用基本API编写代码,然后该API将其转换为HTML,Android,iOS等。我知道我可以使用其他引擎代替编写自己的引擎,但是我对学习经验很感兴趣。

3
使用float可以使最大的“相对”水平是多少?
就像在《地牢围攻》和KSP等游戏中所演示的那样,由于浮点的工作原理,足够大的级别将开始出现故障。您不能在不损失精度的情况下将1e-20添加到1e20。 如果选择限制关卡的大小,如何计算对象开始变得不稳时可以移动的最低速度?

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.