Questions tagged «c++»

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

7
如何避免游戏对象在C ++中意外删除自身
假设我的游戏中有一个怪物,可以让神风敢死队在玩家身上爆炸。让我们随机选择一个怪物的名字:爬行者。因此,Creeper该类具有一个类似于以下内容的方法: void Creeper::kamikaze() { EventSystem::postEvent(ENTITY_DEATH, this); Explosion* e = new Explosion; e->setLocation(this->location()); this->world->addEntity(e); } 这些事件未排队,将立即分派。这会导致该Creeper对象在调用的内部某处被删除postEvent。像这样: void World::handleEvent(int type, void* context) { if(type == ENTITY_DEATH){ Entity* ent = dynamic_cast<Entity*>(context); removeEntity(ent); delete ent; } } 由于Creeper对象在kamikaze方法仍在运行时会被删除,因此在尝试访问时它将崩溃this->location()。 一种解决方案是将事件排队到缓冲区中,然后再分派它们。这是C ++游戏中的常见解决方案吗?感觉有点像破解,但这可能只是因为我在具有不同内存管理实践的其他语言上的经验。 在C ++中,对于对象从其方法之一内部意外删除自身的问题,是否有更好的一般解决方案?
20 c++  scene-graph 

6
在边缘包裹的世界中寻找行进方向
此问题是从Stack Overflow 迁移而来的,因为可以在Game Development Stack Exchange上回答。 迁移 8年前。 我需要找到从2D世界中的一个点到边缘被包裹的另一点(例如小行星等)的最短距离方向。我知道如何找到最短的距离,但正在努力寻找它的方向。 最短距离由下式给出: int rows = MapY; int cols = MapX; int d1 = abs(S.Y - T.Y); int d2 = abs(S.X - T.X); int dr = min(d1, rows-d1); int dc = min(d2, cols-d2); double dist = sqrt((double)(dr*dr + dc*dc)); 世界的例子 : : T …
20 c++  algorithm 


2
在游戏中获得C ++工作经验的最佳方法(来自C#)[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我是一名软件开发人员,具有C#(五年经验)以及其他几种语言的经验。 我的“梦想工作”是作为开发人员从事视频游戏。 大多数工作都需要C ++的知识,而我目前还不了解(一些基本知识除外)。 我环顾四周,大多数大型游戏公司都需要3-5年的C ++经验。 我的问题是-通过C#,什么是让自己达到所需的经验水平的好方法? 我想到了一些可行的方法: 从书籍中获得有关C ++的更多知识。参加以C ++编写的开源项目。学习C ++并拥有C级工作经验的最佳方法是什么,特别是对于游戏行业而言?

4
为什么行业从C转向C ++?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 首先,我想得到一个真实的答案,我一直在尝试从各种来源和文章中获取更多信息,当我阅读C ++之类的东西时,速度很慢,因为它具有虚函数,并且因为C更好,所以我真的不知道该说些什么,并想像一个有大脑的人。因此,请避免在答案中达到此水平。 我的问题是关于是否已通过Doom 3或多或少地完成了对C ++的大规模转换。 对我来说有趣的是,在达到这一里程碑之前,大多数游戏引擎和游戏本身都是用C语言编写的,就像自Quake时代以来那样。有趣的是,ID软件决定完全重写C ++中IdTech 4的代码库,说实话,如果没有很好的理由,我将无法理解大量的工作。 我专注于《毁灭战士3》,因为我主要对OpenGL世界感兴趣,并且在我的旅途中,我一直专注于这个话题,所以我读了很多关于此的内容,但是我认为这样的问题可以是render-API -不可知论,没有太多问题。 为什么在某个时间点,行业大量转向C ++?选择ID的原因是什么? 我要说的最后一件事是,C语言更易于实现,并且提供的功能更少,因为与C ++实际不同,C语言被碎片化的机会要少得多。用最简单的话来说,我有更多的机会找到一个真正好的C编译器,而不是一个好的C ++编译器,它具有以良好方式实现的所有功能。 例如,适用于Android的NDK仍然没有很好的C ++支持(带有r8b版本),具有所有最新和最强大的功能,它是世界上最受欢迎的移动OS的本地工具包! 如果我用现代C ++编写代码,那么现在可能会很痛苦,因为世界上最流行的操作系统之一对我来说是个禁区。和Android一样,许多其他编译器也不是很好。 我应该编写C ++代码,引用2-3版本的C ++版本吗?
19 c++  c 

8
确定扑克手
我一直在做德州扑克游戏,作为评估的一部分,并且我一直在思考如何检查7张可用的卡并确定是否存在手牌。 我能想到的唯一可能的方法是对卡片进行数字排序,然后检查每组5张卡片,并检查它们是否与每只可能的手的列表匹配。这将花费很长时间,这将仅适用于确定对,因为该诉讼是无关紧要的。 这些牌都是由数字/ a / j / q / k和一套西装(char)3(用小黑桃符号表示)组成的字符串。 有没有人有任何建议,公式或链接可用来帮助创建手部分析系统? 不必担心彼此之间排名靠前,那是另一回事。
19 c++  card-game  poker 

4
哪些操作码在CPU级别上更快?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 3年前关闭。 在每种编程语言中,都有建议使用的操作码集。我已经尝试按照速度在这里列出它们。 按位 整数加/减 整数乘法/除法 比较方式 控制流 浮点加法/减法 浮点乘法/除法 在需要高性能代码的地方,可以对C ++进行手工优化,以使用SIMD指令或更有效的控制流,数据类型等进行汇编。因此,我试图了解数据类型(int32 / float32 / float64)还是所使用的操作(*,+,&)影响在CPU级别的性能。 CPU上的单倍乘法是否比加法慢? 在MCU理论中,您了解到操作码的速度取决于执行所需的CPU周期数。那么,这是否意味着乘法需要4个周期,加法需要2个周期? 基本数学和控制流操作码的速度特性到底是什么? 如果两个操作码需要执行相同数量的周期,那么两者可以互换使用而没有任何性能增益/损失? 您可以分享有关x86 CPU性能的任何其他技术细节,

7
您发现C ++代码中的异常安全性有多重要?
每当我考虑使我的代码强烈地异常安全时,我就不这样做,因为这样做会非常耗时。考虑以下相对简单的代码段: Level::Entity* entity = new Level::Entity(); entity->id = GetNextId(); entity->AddComponent(new Component::Position(x, y)); entity->AddComponent(new Component::Movement()); entity->AddComponent(new Component::Render()); allEntities.push_back(entity); // std::vector entityById[entity->id] = entity; // std::map return entity; 为了实现基本的异常保证,我可以在new调用中使用作用域指针。如果任何调用引发异常,这将防止内存泄漏。 但是,假设我要实现一个强大的异常保证。至少,我需要实现我的容器共享光标(我不使用升压),一个无抛出Entity::Swap的原子添加组件和某种成语的原子添加到两个Vector及Map。实施这些不仅耗时,而且由于与异常不安全解决方案相比涉及更多的复制,因此它们也很昂贵。 最终,在我看来,花时间做所有这些事情是不合理的,因此一个简单的CreateEntity函数是绝对例外安全的。我可能只想让游戏显示一个错误并在该点关闭。 您在自己的游戏项目中走了多远?为可能会在出现异常时崩溃的程序编写异常不安全代码,通常是否可以接受?

3
在Windows上升级OpenGL版本?
如何在Windows上更新OpenGL的版本,以便可以使用比Platform SDK中包含的Version 1.1头文件新的内容?Windows 7 SDK的7.0A版甚至只包含OpenGL 1.1版的GL.h和GLU.h。我已经为板安装了NVidia驱动程序,该驱动程序包含OpenGL 4.1支持,但没有看到此包中包含头文件。
19 c++  opengl 

12
图形API之前的3D理论?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 5年前关闭。 我是一名软件工程师,我希望将自己的职业转向游戏开发。我正在使用C ++ / DirectX在2D上读书。当我进入3D时,我知道我想正确地做。例如,我对3d空间一无所知。因此,如果我仅学习API,我可能会知道,但是我不知道是否可以使用它开发交互式的mini 3d世界。我不会拥有一个带有最新着色器等的旋转板条箱来称自己为成功。我的数学技能取决于三角/线性代数,并且还在上大学。我知道还会有更多的数学运算。在选择OpenGL / Direct3D之前,我应该先阅读3D理论书籍还是其他建议?我只知道API不会教授3D游戏开发,也不希望之后迷路。我非常注重书籍,因此也可以提供建议。欢迎思想。谢谢!
19 graphics  c++  opengl  directx 

7
为什么浮点数的分辨率从原点开始进一步降低?
我的OpenGL场景中的对象离原点的距离非常可笑。当我查看这些对象并在它们周围平移/旋转/缩放照相机时,它们会“抖动”。也就是说,组成对象的顶点似乎围绕着虚构的3d点网格捕捉。我已经读到这是一个常见的问题,因为可以使用浮点精度(OpenGL和几乎所有其他功能使用的精度)存储大量信息。我不明白为什么会这样。 在寻找解决方案时,我遇到了非常简单的“浮动原点”修复程序,它似乎起作用了。我只是对所有物体进行了变换,所以我的对象处于相同的相对位置,但是无论照相机看着什么,它都接近原点。我在这里找到了一个解释:http : //floatingorigin.com/,但是我无法理解。 那么...有人可以解释为什么将我的场景放置在离原点很远的地方(例如1000万个单位)会导致我观察到的行为不稳定吗?还有为什么将其移到靠近原点的位置才能解决此问题?
19 c++  opengl 

2
启动时分配和释放大量内存是否“清理内存”?
《游戏编码完成》第四版,第5章(游戏初始化和关闭),“ 检查内存”部分包含以下有趣的代码示例: bool CheckMemory(const DWORDLONG physicalRAMNeeded, const DWORDLONG virtualRAMNeeded) { MEMORYSTATUSEX status; GlobalMemoryStatusEx(&status); if (status.ullTotalPhys < physicalRAMNeeded) { // you don’t have enough physical memory. Tell the player to go get a // real computer and give this one to his mother. GCC_ERROR("CheckMemory Failure: Not enough physical memory."); return false; …
18 c++  memory 

3
您如何为内存不足情况做准备?
对于范围界定明确的游戏而言,这可能很容易,但是问题是关于沙盒游戏,允许玩家创建和构建任何东西。 可能的技术: 使用上限的内存池。 删除不再需要的对象。 在开始时分配额外的内存,以便以后可以将其作为恢复机制释放。我会说大约2-4 MB。 这在移动/控制台平台上更可能发生,在该平台上,内存通常受到限制,与您的16 GB PC不同。我假设您完全控制了内存分配/释放,并且不涉及垃圾回收。这就是为什么要将其标记为C ++。 请注意,我并不是在谈论有效的C ++项目7“为内存不足的情况做准备”,尽管这很相关,但我希望看到一个与游戏开发更相关的答案,您通常会对游戏开发有更多的控制权发生。 总而言之,当您针对内存控制台/移动设备有限的平台时,如何为沙盒游戏的内存不足情况做准备?

2
使用C ++ 11进行跨平台游戏引擎开发
注意:这不是有关C ++ 03和C ++ 11的“给出您的意见”问题。 我们的游戏引擎是用C ++ 03编写的,旨在在Windows,OSX和iOS上进行编译。计划在不久的将来为Linux提供支持。关于控制台,我们的经验有限,这就是为什么我要问这个问题。 当前,我们正在争论是否需要在不久的将来切换到C ++ 11并使用C ++ 11标准的不兼容功能而将引擎移植到任何当前gen控制台上的问题(也许一些控制台支持的编译器尚不支持C ++ 11?我们不知道...)。 因此,拥有跨平台和游戏机经验的游戏开发人员,您认为我们应该坚持使用C ++ 03,直到新一代游戏机问世,并且大多数人都已转换为C ++ 11标准(他们已经这样做了吗?)。还是大多数控制台都在使用/支持已经支持C ++ 11功能的编译器(VC ++,GCC或变体?)?

6
Vector3应该继承Vector2吗?
我创建了几个类别Vector2(X&Y)和Vector3(X,Y,Z),但我不知道是否进行Vector3继承Vector2,还是重新实现成员变量m_x和m_y一次?双方的优缺点是什么(继承与重新定义)。 编辑:我正在使用C ++(VS2010)。
18 c++  architecture 

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.