Questions tagged «c++»

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

2
如何将key_callback与包装类实例相关联?
我正在尝试将我的GLFW3调用包装到一个类中: class WindowManager { private: GLFWwindow* window_; GLFWmonitor* monitor_; Keyboard* keyboard_; ... } 我正在尝试设置一个单例键盘类,该类收集执行期间的按键。在GLFW中,我可以设置一个key_callback超出类定义的函数(一个自由函数): WindowManager::WindowManager() { ... glfwSetKeyCallback(window_, key_callback); ... } // not a class function void key_callback(GLFWwindow* window, int key, int scan code, int action, int mods) { ... } 如何关联回调和WindowManager实例,以便设置keyboard_对象值?我不能使它key_callback成为成员函数,WindowManager因为那将是WindowManager类的成员,并且在C ++类的成员函数中,它们的名称会晃晃,因此该函数将不起作用。
11 c++  glfw 

5
您是否需要昂贵的服务器和高档主机才能制作多人游戏?
我已经完成了RPG的开发工作,将其制作成多人游戏似乎更加有趣。SFML具有联网功能,我认为这是可能的,但是再说一次,我一生中从未尝试过有关联网的基本知识,实际上,我对联网的了解非常有限。 从资源角度来看,制作多人游戏需要什么?我不是在谈论MMO,更像是一种合作游戏。我需要大量现金来支付托管和服务器费用吗?
11 c++  multiplayer  sfml 

2
将OpenGL原点更改为屏幕左上方时,我应该担心什么?
对于自我教育,我正在使用SDL / OpenGL用C ++编写2D平台引擎。我最初使用sdltutorials.com和lazyfoo.net上的教程从纯SDL开始,但是现在我使用SDL创建OpenGL渲染上下文,然后使用OpenGL函数进行渲染(特别是即时模式,但是我正在学习VAO / VBO) )。我仅将SDL用于接口,音频等。 SDL使用坐标系,其原点位于屏幕的左上角,而y轴的正指向下。在OpenGL中设置正投影可以很容易地做到这一点。 我知道纹理坐标是一个从0到1的右手系统-在渲染之前垂直翻转纹理(好吧,在加载之前翻转文件)会产生可以正确渲染的纹理...如果我正在绘制,这很好整个纹理,但最终我将使用tileset并可以想象问题。 执行此操作时,我应该在渲染方面关注什么? 如果有人提出任何建议,或者他们自己做了建议并指出未来的陷阱,那将是不错的选择,但实际上任何想法都会受到赞赏。
11 c++  opengl  2d  sdl 

1
模拟游戏苹果-无法使其正常工作
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 7年前关闭。 我正在尝试创建一个具有牛顿物理学的游戏。 在您阅读其余内容之前,这是我要寻找的以下主要问题: 尝试运行代码后,我一直收到在窗口中弹出的错误。我缺少什么库或dll? 我有一个苹果,一个橘子和一支铅笔。我已经使用子弹式物理引擎阅读了大多数文档,但似乎无法让苹果像纸一样工作(二维)。Box2d物理引擎等不是我想要的。我不喜欢现实生活中的盒子,更不用说在网络世界中了。 我希望苹果漂浮在地上,像纸一样来回摆动。该站点提供了一些有用的信息,这些信息已集成到我的代码中:htp://www.3dbuzz.com/vbforum/showthread.php?50854-Please-HELP !! -Simulating-paper-floating-to-ground 对于让您使对象的行为像其他类型的对象一样的游戏,我有这个想法,但是我对游戏的模拟无法正常工作。 我经历了太多种类的苹果,无法计数,甚至没有一个接近。我曾尝试寻找其他尝试过类似事情的人(使用诸如http://lmgtfy.com/?q=simluating+game+apples+in+real+life之类的Google),但从来没有返回过苹果! 因此,我认为我要进入新的领域(不用担心,我将开放我的技术的源代码),这就是为什么事情对我不起作用的原因。 我尝试过编程各种苹果,但是也许我需要一个网络苹果?我不知道在哪儿找到这样的东西,也许是在这样的地方:http : //cyberapples.com/虽然该站点目前处于关闭状态-它只是谈论某些cgi垃圾桶之类的东西。还有任何提示吗? 这是我的代码部分,涉及苹果模拟游戏内容: ///... /* setup other objects in the room and other stuff */ ... // see http://www.orangepippin.com/apples/arlet-swiss-gourmet // for more arlet apple details paper_2d_behaving_apple = new ArletApple[); / setup the arlet apple's general characteristics …
11 c++ 

3
如何用C ++组织游戏引擎?我使用继承是个好主意吗?
我是游戏开发和编程的初学者。 我正在尝试学习构建游戏引擎的一些原理。 我想创建一个简单的游戏,正要尝试实现游戏引擎。 所以我认为我的游戏引擎应该控制这些事情: - Moving the objects in the scene - Checking the collisions - Adjusting movements based on collisions - Passing the polygons to the rendering engine 我设计了这样的对象: class GlObject{ private: idEnum ObjId; //other identifiers public: void move_obj(); //the movements are the same for all the objects (nextpos …
11 c++  architecture  oop 

2
如何在Bullet物理引擎中禁用Y轴运动
我想创建一个对象,而不仅要沿X和Z轴移动,同时还要使Y轴保持禁用状态(就像在2D模式下移动一样,该对象也不会掉落)。 我目前正在使用6自由度约束来限制Y轴上的移动,但是它不起作用: btRigidBody* zeroBody = new btRigidBody(0, NULL, NULL); // Create the body that we attach things to btRigidBody* robot = mCarChassis->getBulletRigidBody(); btGeneric6DofConstraint* constrict = new btGeneric6DofConstraint(*robot, *zeroBody, btTransform::getIdentity(), btTransform::getIdentity(), false); constrict->setLinearLowerLimit( btVector3( 1, 1, 1)); constrict->setLinearUpperLimit( btVector3(-1, 1,-1)); constrict->setAngularLowerLimit( btVector3( 1, 1, 1) ); constrict->setAngularUpperLimit( btVector3(-1, -1, -1) ); …


1
在游戏子系统中注册游戏对象组件?(基于组件的游戏对象设计)
我正在创建一个基于组件的游戏对象系统。一些技巧: GameObject只是的清单Components。 有GameSubsystems。例如,渲染,物理等。每个都GameSubsystem包含一些指向的指针Components。GameSubsystem是一个非常强大且灵活的抽象:它代表游戏世界的任何部分(或方面)。 有在登记的机构的需要Components在GameSubsystems(当GameObject被创建和组成)。有4种方法: 1:责任链模式。每个人都Component被提供给每个人GameSubsystem。GameSubsystem决定Components要注册的内容(以及如何组织)。例如,GameSubsystemRender可以注册可渲染组件。 亲 Components对如何使用它们一无所知。低耦合。答:我们可以添加新的GameSubsystem。例如,让我们添加GameSubsystemTitles来注册所有ComponentTitle,并确保每个标题都是唯一的,并提供按标题查询对象的接口。当然,在这种情况下,ComponentTitle不应该被重写或继承。B.我们可以重组现有的GameSubsystems。例如,可以将GameSubsystemAudio,GameSubsystemRender,GameSubsystemParticleEmmiter合并到GameSubsystemSpatial中(以将所有音频,发射器,渲染Components置于相同的层次结构中并使用父相对转换)。 骗子 每次检查。效率很低。 骗子 Subsystems知道Components。 2:每个Subsystem搜索Components特定类型。 亲 性能比更好Approach 1。 骗子 Subsystems仍然知道Components。 3:在中Component注册自己GameSubsystem(s)。我们在编译时知道有一个GameSubsystemRenderer,所以让ComponentImageRender调用类似GameSubsystemRenderer :: register(ComponentRenderBase *)之类的东西。 亲 性能。没有像中那样不必要的检查Approach 1。 骗子 Components与...严重耦合GameSubsystems。 4:调解员模式。GameState(包含GameSubsystems)可以实现registerComponent(Component *)。 亲 Components和GameSubystems什么都不知道对方。 骗子 在C ++中,它看起来像丑陋且缓慢的typeid开关。 问题: 哪种方法更好,并且主要用于基于组件的设计?什么做法说?关于实施的任何建议Approach 4? 谢谢。

1
圆线碰撞检测问题
我目前正在开发一个突破克隆,我遇到了障碍,无法正确检测球(圆)和砖(凸多边形)之间的碰撞。我正在使用“圆线碰撞检测”测试,其中每条线代表凸多边形砖上的边缘。 在大多数情况下,Circle-Line测试可以正常工作,并且可以正确解决碰撞点。 碰撞检测正常工作。 但是,有时候我的碰撞检测代码由于球实际上与砖相交时的负判别而返回false。 碰撞检测失败。 我知道这种方法的效率低下,并且使用了轴对齐的边界框来减少测试砖的数量。我主要关心的是下面的代码中是否存在任何数学错误。 /* * from and to are points at the start and end of the convex polygons edge. * This function is called for every edge in the convex polygon until a * collision is detected. */ bool circleLineCollision(Vec2f from, Vec2f to) { Vec2f lFrom, …

1
跨平台C ++ / OpenGL ES开发(iOS / Android)
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 4年前关闭。 我已经具有使用C ++和OpenGL的合理经验,并且我最近决定尝试开发移动游戏。在使用Java成功创建了一个简单的OpenGL ES Android应用程序之后,我研究了以最少的重写代码为目标同时定位Android和iOS的方法。我尝试使用Visual Studio 2015引以为傲的跨平台应用程序开发工具,但发现它们太新了,因此文档记录极少。我可以构建程序提供给我的模板项目,但是我不知道如何在给定这些模板的情况下将资产添加到游戏中或处理触摸屏输入。 不幸的是,我有一个特定的愿望,过于具体,无法在Google上找到。我想使用C ++制作一个OpenGL ES游戏,并为Android和iOS使用针对平台的精简包装。人们向我提出了类似的问题(尽管不完全相同),并且不止一个人回答说,我想要做的不仅是可能的,而且相对容易,因为我不必担心UI。 我尝试了本教程,但是它已经存在了将近三年,因此可能是为较旧的技术设计的,结果,我遇到了各种无法解释的错误。不过,截至目前,该教程与我所发现的最接近。其他所有功能要么仅适用于Android,要么建议我每年支付数百美元来使用Marmalade SDK。有时,我感觉只需要编写两次代码,一次是用Java,一次是用Objective-C,但是我一直对这种解决方案是可行的,但由于某种原因,在任何现代细节中都没有涉及,深有感触。 总而言之,我想制作一个适用于iOS和Android的OpenGL ES游戏,并使用单个C ++代码库包装少量平台特定的代码。但是,尽管有几个人推荐了这种方法,但没人能告诉我该怎么做。有人可以告诉我是否确实可行,如果可以,我可以做什么或可以去哪里学习?

2
将第三人称相机旋转到目标
我有一台第三人称相机,它不直接看玩家,而是在他面前的某个地方。 当用户进入拍摄模式时,我希望相机转向播放器以面对目标。 在上图中。“ O”是玩家(来源),“ L”是角色,“ C”是摄像机位置,“ T”是目标。我想旋转后视线C-> L,以使其绕原点(“ O”)经过T(C'-> L'-> T')。 基本上,我需要找到在图片中以红色显示的角度alpha。 我将相机位置存储在这样的结构中: struct CameraTarget { Quaternion absoluteRotation; Vec3 absolutePosition; Vec3 cameraOffset; Vec3 lookatOffset; float FOV; } 因此,如果可以找到所需的角度,则可以执行以下操作: cam->absoluteRotation = cam->absoluteRotation * alpha; 为了让玩家始终注视目标。 如果look望通过原点,我可以简单地做 Vec3 origDir = cam->lookAtOffset - cam->absolutePosition; origDir.normalize(); Vec3 newDir = cam->target - cam->absolutePosition; newDir.normalize(); Quaternion …

1
利用游戏循环和openGL之间的多线程
在基于openGL渲染器的游戏环境中交谈: 假设有两个线程: 更新游戏中对象的游戏逻辑和物理等 根据游戏对象中的数据对每个游戏对象进行openGL绘制调用(线程1不断更新) 除非您在游戏的当前状态下每个游戏对象都有两个副本,否则您必须暂停线程1,而线程2进行抽奖,否则游戏对象将在该对象的抽奖中途更新。是不可取的! 但是停止线程1以安全地从线程2进行绘制调用会杀死多线程/并发的整个目的 除了使用成百上千或同步对象/围栅之外,还有没有更好的方法可以利用多核体系结构提高性能? 我知道我仍然可以使用多线程为尚未成为当前游戏状态一部分的对象加载纹理和编译着色器,但是如何在不影响绘制和更新的情况下对活动/可见对象执行此操作? 如果我在每个游戏对象中使用单独的同步锁怎么办?这样,任何线程都只会阻塞一个对象(理想情况),而不是整个更新/绘制周期!但是在每个对象上锁定(游戏可能有上千个对象)的代价是多少?

2
由于libGDX中不推荐使用Table.drawDebug,因此应该使用什么呢?
我正在按照“学习LibGDX游戏开发”一书来制作一个简单的游戏。我在菜单创建部分中,在其中创建一个舞台并使用调试边框对其进行渲染。 这本书说要使用,Table.drawDebug(stage)但是这个静态方法似乎已经从框架Table类中完全删除了。 我正在进口com.badlogic.gdx.scenes.scene2d.ui.Table; 下面是我的代码: @Override public void render(float deltaTime) { Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); if (debugEnabled) { debugRebuildStage -= deltaTime; if (debugRebuildStage <= 0) { debugRebuildStage = DEBUG_REBUILD_INTERVAL; rebuildStage(); } } stage.act(deltaTime); stage.draw(); Table.drawDebug(stage); } 最后一行,Table.drawDebug(stage);有编译错误"The method drawDebug(ShapeRenderer) in the type Table is not applicable for the arguments (Stage)" …

1
一个人如何在实体组件系统中存储全局上下文数据?
我的问题是这样的: 一个将如何存储全局上下文数据,即。实体组件系统中的世界数据信息,当前世界时间等? 我正在考虑使用C ++构建矮人要塞风格的开放式世界模拟游戏。我只是出于娱乐目的而建立了一个实体组件样式的游戏引擎,而我目前正在试图弄清楚如何在所有想要的功能中工作。除了标准的游戏玩法(渲染,物理,特定于实体的组件数据等)之外,我还希望获得一些所有相关系统都可以访问的全局上下文数据(即世界数据,例如当前的年份) ,全球变暖是否正在发生,与模拟世界有关的任何事物)。我最初曾想过要制作一个“世界”组件,但是如果许多不同的系统需要访问这个逻辑上的“全局”数据,这似乎毫无意义且困难。 拥有“世界”组件是否有意义,还是应该以其他方式存储此数据? 我还考虑过将这些数据简单地全局化,从而可以访问任何想要使用它的系统。这似乎总体上违反了实体组件原则,并且由于其他原因可能有些混乱,但是我认为这可能确实有效。 我想到的另一件事是将相关的世界上下文数据直接直接嵌入系统本身。例如,如果我有一个AgeSystem“老化”的具有getsWeakerAsTimePasses组件之类的所有实体,那么也许该系统可以直接将世界的相关时间数据存储为成员数据,以用于计算时间的流逝以及需要多少时间。年龄和弱化人们等。这是我最不喜欢的第三种选择,但是在头脑风暴中发生了一些事情。 有人可以建议吗?

4
识别实体组件系统中的实体“类型”
如果实体没有显式的“类型”(例如播放器),而仅仅是组件的集合,那么我如何识别系统应该和不应该使用的实体?例如,在Pong游戏中,桨和球都与窗口边界碰撞。但是,每个碰撞处理系统将有所不同,因此系统不应处理错误类型的实体。 void PlayerCollisionSystem::update(std::vector<Entity *> entities) { typedef std::vector<Entity *>::iterator EIter; for (EIter i = entities.begin(); i != entities.end(); ++i) { Entity *player = *i; // How do I verify that the entity is a player? // Get relevant components. PositionComponent *position = player->getComponent<PositionComponent>(); VelocityComponent *velocity = player->getComponent<VelocityComponent>(); SpriteComponent *sprite = …

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.