Questions tagged «c++»

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

4
如何减少多线程引擎中线程之间传递消息的麻烦?
我目前正在使用的C ++引擎分为几个大线程-生成(用于创建程序内容),游戏性(用于AI,脚本,模拟),物理和渲染。 线程之间通过小消息对象相互通信,这些消息对象在线程之间传递。在执行步进操作之前,一个线程会处理其所有传入消息-更新以进行转换,添加和删除对象等。有时,一个线程(Generation)会创建某种东西(Art)并将其传递给另一个线程(Rendering)以实现永久所有权。 在此过程的早期,我注意到了两点: 消息传递系统很麻烦。创建新的消息类型意味着要对基础Message类进行子类化,为其类型创建一个新的枚举,并编写有关线程应如何解释新消息类型的逻辑。这是开发的重灾区,并且容易出现拼写错误。(Sidenote-从事此工作使我很欣赏动态语言的出色表现!) 有一个更好的方法吗?我是否应该使用boost :: bind之类的工具使之自动运行?我担心如果这样做,我会失去说话的能力,无法根据类型对消息进行排序。不确定是否需要这种管理。 第一点很重要,因为这些线程进行了大量通信。创建和传递消息是使事情发生的重要部分。我想简化该系统,但也欢迎其他可能同样有用的范例。我应该考虑使用其他不同的多线程设计来简化此过程吗? 例如,有些资源很少被写入,但是经常从多个线程中读取。我是否应该对所有线程都可以访问的共享数据(受互斥锁保护)持开放态度? 这是我第一次从头开始考虑多线程设计。在这个早期阶段,我实际上认为进展非常顺利(正在考虑),但我担心扩展以及实现新内容的效率问题。

4
是否有适用于C ++的XNA?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我喜欢XNA的功能,但我想参与C ++游戏开发。问题是我现在必须担心从加载png文件到打开窗口的所有事情。这有点烦人。 我真的很想要XNA的C ++版本为我解决这些问题。
18 xna  c++ 

6
适用于游戏引擎的最佳C ++数学库?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我正在为我的游戏引擎寻找具有以下功能的快速开源C ++数学库: 快速(sse?) 向量 矩阵 四元数 适用于opengl和DirectX
18 c++  mathematics 

5
适用于iOS游戏的Objective-C还是C ++?
我对使用Objective-C和C ++进行编程非常有信心,但是我发现使用Objective-C在某种程度上更容易使用,并且本质上更加灵活和动态。 使用C ++代替Obj-C在iOS上编写游戏时,优缺点是什么?或者,与C ++相比,使用Obj-C是否存在任何已知问题? 例如,与使用C / C ++编写的代码相比,我怀疑 Obj-C可能存在性能问题。

8
有什么好的C ++序列化解决方案?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 5年前关闭。 我很好奇游戏开发人员提出了哪些解决方案来序列化他们为游戏处理的不同类型的数据。你们是否使用某些整体式GameObject层次结构,其中包含用于派生类型的序列化接口,使用某种基于RTTI的自定义解决方案,对某些类执行显式流序列化,还是使用某些开源解决方案(boost :: serialization,s11n,等等)。

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

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
如何正确访问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 …

1
在虚幻引擎中,C ++的float和FFloat32有什么区别?
我一直在尝试学习UE4的更深层次的内容,在阅读许多示例代码以及引擎的源代码时,我注意到有时人们(包括源代码)使用标准C ++ float原语,但有时使用UE4的自定义实现FFloat32。 然后我很好奇:用Unreal编写游戏时,使用这两个选项有什么区别?可能应该放弃标准C ++原语以支持引擎实现的主要情况是什么?

3
如何在位图中的两个点之间绘制一条直线?
我正在玩高度图(位图),试图在我的游戏中创建自己的一些东西,为此,我需要实现一些基本的绘制方法。我很快意识到画直线并不像我想的那么基本。 简单的是,如果您的点共享X或Y坐标,或者它们已对齐,则可以绘制一条完美的对角线。但是在所有其他情况下,它都比较棘手。 您使用哪种算法确定需要对哪些像素进行着色才能使其成为“直线”?

1
法线与法线贴图
我正在使用Assimp资产导入器(http://assimp.sourceforge.net/lib_html/index.html)来解析3d模型。 到目前为止,我已经简单地提取了为网格中每个顶点定义的法线向量。但是我还在法线贴图上找到了各种教程... 据我了解,对于法线贴图,法线矢量存储在法线贴图的每个纹理元素中,您可以将它们从着色器的法线纹理中拉出。 为什么有两种获取法线的方法,一种被认为是最佳实践,为什么呢?

7
如果我想在游戏行业找到一份工作,是否有必要学习C ++?
如果我想在游戏行业找到一份工作,是否有必要学习C ++?我对C#非常熟悉,并且具有在XNA 4.0中制作2D游戏的基本知识。目前,我只有13岁,并且喜欢制作游戏,希望有一天能获得游戏编程工作。我听过很多人说C ++是“行业标准”,不了解它会伤害您的职业。我还试图针对的平台不只是Windows,而且我知道Monogame但是由于某种原因,我在Visual Studio模板上遇到了很多麻烦,并且我发现monogame有很多错误。因为从技术上讲我还无法找到工作,并且可能直到我22岁左右(除非我是自雇人员)才能获得编程工作。在那9年以上的时间跨度中,游戏行业极有可能发生很大变化。所以这是一些问题 学习C ++是否会伤害我获得编程工作的机会? 到我能找到工作的时候,C ++仍将是“行业标准”编程语言 如果我是独立开发人员,是否学习C ++并坚持我所知道的内容真的很重要吗? 我已经找到工作还需要很多年,我是否应该现在就开始学习它? 我还担心,即使我熟悉面向对象的编程,也可能会花很多时间在C ++上,并感到非常沮丧和困惑,然后放弃学习它,而这次我已经忘记了很多XNA和我必须学习所有的东西。简而言之:如果我想从事编程工作,我应该学习C ++吗? 更新 谢谢大家的回答和建议。最近,我选择了SFML和C ++,它运行的很好。我已经掌握了C ++,并开始睁开我的眼睛,不必担心学习新事物,因为我能够将我所有的C#知识都转化为使C ++易于学习。再次感谢大家。
17 xna  c++  game-industry  jobs 

1
快速,准确的二维碰撞
我正在研究2d自上而下的射击游戏,现在需要超越基本的矩形边界框碰撞系统。 我有很多不同类型的精灵,它们都有不同的形状和大小。精灵的纹理都是具有透明背景的正方形png文件,因此,我还需要一种方法,仅当播放器进入纹理的彩色部分时才发生碰撞,而不是透明背景。 我计划按以下方式处理碰撞: 检查精灵是否在播放器范围内 进行矩形边界框碰撞测试 进行准确的碰撞(需要帮助时) 我不介意先进的技术,因为我想在考虑所有需求的情况下做到这一点,但是我不确定该如何处理。尝试什么技术甚至库。我知道我可能需要创建并存储某种形状,以精确表示每个精灵减去透明背景。 我已经读过每个像素很慢,所以鉴于我的物体水平和数量很大,我认为这不合适。我也看过Box2d,但找不到太多的文档,也没有找到有关如何使用SFML进行安装和运行的任何示例。

6
如果要编写C ++ 2d游戏,该从哪里开始?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我是C#Web开发人员,我想扩展自己的技能,并在此过程中玩得开心。我了解C ++的一些基础知识,我很想使用C ++为自己编写一个简单的2d游戏/游戏引擎。我还需要其他哪些库或SDK,在哪里可以找到一些教程和参考资源? 我已经使用C#研究了XNA。有很多资源,但是我宁愿使用非Microsoft产品。这样做的目的是在成为更好的全面程序员的同时获得一点乐趣。 请注意,我并不是在寻找最佳起点。我只是想找一个起点。 谢谢你的帮助!
17 c++ 

1
设计一个ResourceManager类
我已经决定要为我的爱好游戏引擎编写一个中央ResourceManager / ResourceCache类,但是在设计缓存方案时遇到了麻烦。 这个想法是ResourceManager对所有游戏资源组合使用的总内存有一个软目标。其他类将创建处于卸载状态的资源对象,并将它们传递给ResourceManager。然后,ResourceManager决定何时加载/卸载给定的资源,同时牢记软限制。 当另一个类需要资源时,会将请求发送到ResourceManager(使用字符串ID或唯一标识符)。如果加载了资源,则对该资源的只读引用将传递到调用函数(包装在引用的计数的weak_ptr中)。如果未加载资源,则管理器将在下一次机会(通常在绘制框架结束时)标记要加载的对象。 请注意,尽管我的系统确实做了一些引用计数,但它仅在读取资源时才进行计数(因此,引用计数可能为0,但实体可能仍在跟踪其uid)。 还可以在首次使用之前就标记好要加载的资源。这是我正在使用的类的略图: typedef unsigned int ResourceId; // Resource is an abstract data type. class Resource { Resource(); virtual ~Resource(); virtual bool load() = 0; virtual bool unload() = 0; virtual size_t getSize() = 0; // Used in determining how much memory is // being used. …

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.