Questions tagged «c++»

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

3
将凹面网格分解为一组凸面网格
我希望能够将凹形网格分解为一组凸形网格,原因有两个: 透明渲染 物理形状 是否有一种算法将一组三角形(凹面)作为输入并输出许多三角形(凸面)?我希望它不填充原始网格的各个部分之间的孔。 我已经遇到了一个小主意:找到所有凹形边缘,然后沿边缘环将网格划分。我在正确的轨道上吗?我该如何实施?

1
如何使用std :: vector实现存储咒语和物品?
我现在正在跟着GameInstitute的一本书,它要求我: 允许玩家购买和携带治疗药水和火球药水。您可以将Item数组(在定义item类之后)添加到Player类中以存储它们,或使用std :: vector来存储它们。 我想我想使用std::vector实现,因为这似乎使我比创建一个项目类更容易些,但我不确定该怎么做。我从很多人那里听说向量是存储动态值(例如物品,武器等)的好方法,但是我没有看到它的使用。
10 c++  text-based 

3
当资源过多时,如何在游戏中打包资源?
我最近使用Allegro 5框架在C ++中创建了一个基本的Space Invaders克隆。完成之后,我意识到我有大约10个精灵,以及13MB的DLL。有些玩家甚至没有mingW DLL,这使得游戏非常混乱。 如何打包所有资源,以便可以轻松地向游戏中添加和删除数据,并减少资源占用的大小,基本上将它们放在一个位置?我正在使用代码块。
10 c++  assets 

1
Bullet Physics-从刚体直接投射光线(第一人称相机)
我已经使用Bullet实现了第一人称摄影机-它是具有胶囊形状的刚体。我只用了几天子弹,物理引擎对我来说是新的。我btRigidBody::setLinearVelocity()经常移动它,使其与世界完美碰撞。唯一的问题是Y值自由移动,我通过在移动物体之前将平移矢量的Y值设置为零来临时解决。这适用于所有情况,但从高处跌落时除外。 当身体掉落到一个高大的物体上时,由于平移矢量的Y值设置为零,因此您仍然可以四处滑动,直到停止移动并跌落到地面(仅在移动时才设置速度)。因此,为了解决这个问题,我想尝试从人体投射光线以确定世界的Y值,并检查该值与相机机身的Y值之间的差,并在出现以下情况时禁用或减慢运动速度:差异足够大。 我只是停留在投射光线并确定其撞击的世界的Y值上而有些困惑。我已经实现了这个回调: struct AllRayResultCallback : public btCollisionWorld::RayResultCallback{ AllRayResultCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld) : m_rayFromWorld(rayFromWorld), m_rayToWorld(rayToWorld), m_closestHitFraction(1.0){} btVector3 m_rayFromWorld; btVector3 m_rayToWorld; btVector3 m_hitNormalWorld; btVector3 m_hitPointWorld; float m_closestHitFraction; virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace) { if(rayResult.m_hitFraction < m_closestHitFraction) m_closestHitFraction = rayResult.m_hitFraction; m_collisionObject = rayResult.m_collisionObject; if(normalInWorldSpace){ m_hitNormalWorld = rayResult.m_hitNormalLocal; } else{ …

1
浮点精度(fp:precise vs.fp:fast)
在C或C ++中,浮点精度的编译器选项是否真的在现实世界(小型/独立)游戏中有所作为? 根据我的观察,设置fp:fast的速度比fp:precise快很多倍,据我在此处的理解(/programming/6889522/fpfast-vs-fpprecise-what-kind-of-errors-can -i-encounter),两个编译器选项之间的精度差仅从浮点数的第16位开始变化。 在使用fp:fast进行2D或3D游戏时,有人遇到过一个例子吗? 编辑:为澄清起见,我并不是在问浮点值本身的精度(即,浮点数,双精度数和小数)。仅关于与编译器选项有关的精度。
10 c++  c  floating-point 

4
碰撞矩形响应
我很难让一个可移动的矩形与多个矩形碰撞。 我正在使用SFML,它有一个方便的函数intersects,它需要2个矩形并返回交集。我有一个充满矩形的向量,我希望我的可移动矩形发生碰撞。我使用以下代码(p是可移动矩形)遍历此代码。 IsCollidingWith返回布尔值,但也使用SFML intersects来计算交叉点。 while(unsigned i = 0; i!= testRects.size(); i++){ if(p.IsCollidingWith(testRects[i]){ p.Collide(testRects[i]); } } 和实际的Collide()代码: void gameObj::collide( gameObj collidingObject ){ printf("%f %f\n", this->colliderResult.width, this->colliderResult.height); if (this->colliderResult.width < this->colliderResult.height) { // collided on X if (this->getCollider().left < collidingObject.getCollider().left ) { this->move( -this->colliderResult.width , 0); }else { this->move( this->colliderResult.width, 0 ); …

3
处理破坏游戏实体的正确方法
想象一下一个游戏世界,其中始终不断地动态加载实体的负载,我可能将其表示为实体的列表,但是如何删除它们呢? 在添加时,我可能会推迟新实体,但可能需要删除容器中的任何位置。为了避免搜索元素以找到要删除的位置,我有哪些选择? 我坚称我可以将实体ID作为其在容器中的位置存储,从而创建直接删除的路径,但是会不会产生某种相互依赖的“混乱”? 我知道正确的方法是类似List.RemoveAt(whereToRemove);。但是,如果只有实体知道何时应该死去怎么办? 还是我只是缺少一些东西,而列表容器会知道对象何时被破坏并减小其自身大小?

3
组件实体系统-更新和呼叫订单
为了使组件能够更新每一帧(并使此功能不包含在不需要的组件中),我想到了制作一个UpdateComponent组件的想法。诸如MovableComponent(保持速度)的其他组件将从IUpdatable抽象类继承。这迫使MovableComponent实现一个Update(gametime dt)方法,而另一个RegisterWithUpdater()实现提供UpdateComponent了指向的指针MovableComponent。许多组件可以执行此操作,然后UpdateComponent可以调用其所有Update(gametime dt)方法,而不必关心它们是谁或什么。 我的问题是: 这看起来像是正常的东西还是任何人使用的东西?我在这个问题上找不到任何东西。 我该如何维护物理等组件的顺序,然后更改位置?这有必要吗? 还有什么其他方法可以确保应处理的每一帧实际上都得到处理? 编辑 我想我将考虑如何为实体管理器提供可更新的类型列表。然后,该类型的所有组件都可以更新而不是针对每个实体进行管理(无论如何,它们只是我系统中的索引)。 仍然。我的问题对我仍然有效。我不知道这是否是理性/正常的,还是其他人倾向于这样做。 另外,失眠症患者也很棒! /编辑 为前面的示例精简代码: class IUpdatable { public: virtual void Update(float dt) = 0; protected: virtual void RegisterAsUpdatable() = 0; }; class Component { ... }; class MovableComponent: public Component, public IUpdatable { public: ... virtual void Update(float dt); private: ... …


5
如何处理网码?
我对评估网络代码可以“融入”游戏引擎的不同方式感兴趣。我现在正在设计一个多人游戏,到目前为止,我已经确定(至少)需要一个单独的线程来处理网络套接字,这不同于处理图形循环和脚本的引擎其余部分。 我确实有一种使网络游戏完全为单线程的潜在方法,那就是在使用非阻塞套接字渲染每一帧后让它检查网络。但是,这显然不是最佳方法,因为渲染帧所花费的时间增加了网络延迟:通过网络到达的消息必须等待,直到当前帧渲染(和游戏逻辑)完成为止。但是,至少以这种方式,游戏玩法仍将或多或少保持平稳。 拥有独立的网络线程可以使游戏完全响应网络,例如,它可以在收到来自服务器的状态更新后立即发送回ACK数据包。但是我对在游戏代码和网络代码之间进行通信的最佳方式有些困惑。网络线程会将接收到的数据包推送到队列中,并且游戏线程将在其循环期间的适当时间从队列中读取数据,因此我们没有摆脱这种长达一帧的延迟。 另外,似乎我希望处理数据包发送的线程与检查管道中的数据包的线程是分开的,因为它不能在发送过程中将其发送出去。检查是否有传入消息。我在考虑select或类似功能。 我想我的问题是,设计具有最佳网络响应能力的最佳方法是什么?显然,客户端应该将用户输入尽快发送到服务器,这样我就可以在事件处理循环之后立即在游戏循环内部发送净发送代码。这有意义吗?

3
为2D赛车游戏构建AI的技巧
我有一个学校项目在为2D赛车游戏构建AI,在该AI中它将与其他数个AI竞争(不发生碰撞)。 我们获得了赛车场的黑白位图图像,收到地图后,我们可以选择汽车的基本统计信息(处理,加速,最大速度和刹车)。AI连接到游戏的服务器,并多次为它提供当前加速和转向的第二个数字。顺便说一下,我选择的语言是C ++。问题是: 最好的策略或算法是什么(因为我想尝试并获胜)?我目前在脑海中想到了一些想法,也有一个或两个想法,但是在开始编写代码之前,我想我的观点是最好的。关于这件事有什么好书?我应该参考哪些网站?
10 2d  c++  ai  racing 

2
为了学习Bullet,将Bullet用于2D物理而不是Box2D是否值得?
问题不多了。我并不担心开销,因为我确信它们都可以满足我的需求。基本上,由于Farseer物理引擎,我对Box2D概念很熟悉,但是当我跳到3D东西时,我想使用Bullet。也许Bullet即使在2D领域对我也具有一定的教育价值? 这个问题的一般版本是:如果我计划将来使用3D物理引擎,是否应该对2D游戏使用3D物理引擎?还是这是浪费时间而没有提供教育价值?

2
何时使用C ++和何时使用蓝图?
我正在尝试学习如何使用虚幻引擎。我有C ++的基本知识。最近,我开始做一个生存恐怖游戏,这是我只是为了学习经验而做的一个项目。到目前为止,尽管我已经通过Blueprint系统实现了所有功能。 所以我的问题是,什么时候以及何时使用代码来改进/制作虚幻引擎中的游戏?
10 c++  unreal-4 

3
有关C ++中实体组件系统之间链接的建议
在阅读了有关实体组件系统的一些文档之后,我决定实施我的。到目前为止,我有一个World类,其中包含实体和系统管理器(系统),Entity类(其中包含作为std :: map的组件)以及一些系统。我在世界中将实体作为std :: vector持有。到目前为止没有问题。让我感到困惑的是实体的迭代,我对此一无所知,所以我仍然无法实现这一部分。每个系统都应该保存他们感兴趣的实体的本地列表吗?还是应该仅遍历World类中的实体并创建一个嵌套循环以遍历系统并检查实体是否具有系统感兴趣的组件?我的意思是 : for (entity x : listofentities) { for (system y : listofsystems) { if ((x.componentBitmask & y.bitmask) == y.bitmask) y.update(x, deltatime) } } 但是我认为,在嵌入脚本语言的情况下,位掩码系统会带来一定的灵活性。或者为每个系统使用本地列表将增加类的内存使用量。我非常困惑。

2
如何实现发动机零件之间的相互作用?
我想问一个问题,如何实现游戏引擎各部分之间的信息交换。 引擎分为四个部分:逻辑,数据,UI,图形。一开始我是通过标志进行这种交换的。例如,如果将新对象添加到数据中,则isNew对象类中的标志将设置为true。之后,引擎的图形部分将检查此标志,并将对象添加到游戏世界中。 但是,使用这种方法,我要编写很多代码来处理每种对象的每个标志。 我曾考虑使用某种事件系统,但是我没有足够的经验来知道这是否是正确的解决方案。 事件系统是唯一合适的方法,还是我应该使用其他方法? 如果重要的话,我正在使用Ogre作为图形引擎。
10 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.