Questions tagged «sfml»

简单快速的多媒体库-一种免费的可移植API,提供对图形,输入,音频等的访问。

9
如何将游戏中的所有图像都放入一个文件?
我刚刚完成了一个用C ++ SFML编写的基本RPG游戏,我在游戏中付出了很多努力,我想分发它,但是遇到了一个小问题。 问题是,我有200多个图像和地图文件(其中包含地图代码的.txt文件)都与可执行文件位于同一文件夹中,当我查看该文件夹时,这让我想哭一点如此众多的资源,我从未见过一款可以直接向您显示所有资源的游戏,相反,我相信它们会将资源打包在某个文件中。 好吧,这就是我要达到的目的:我希望将所有图像打包到1个文件(可能也包括.txt文件)中,然后能够从该文件中读取或轻松添加到其中。
67 c++  assets  sfml  spritesheet 

8
与软件渲染相比,OpenGL,SFML和SDL有什么优势?
我开始观看Handmade Hero系列视频,其中Casey Muratori在不使用框架等的情况下创建了一个游戏引擎。昨天我到了那儿,他展示了如何在屏幕上绘制图像。据我了解,他只是分配了一些内存,该内存与他要绘制的屏幕大小一样大。然后,他创建了一个位图,然后将其传递到分配的缓冲存储器中,并使用特定于操作系统的功能将其绘制到屏幕上。 这似乎很简单。我曾经使用GameMaker,后来改为Love2D,并与Sprite Kit一起工作了一些,但我一直想知道在有时令人困惑的图层下到底发生了什么。 既然如此,为什么当您只需要分配一些缓冲区,传递位图并将其绘制到屏幕上时,为什么还要使用图形库(OpenGL,SFML,SDL等)呢? 如果要在屏幕上绘制不同的内容,只需将它们写入位图,然后将其传递到缓冲区中。我对编程很陌生,但这对我来说似乎很简单。如果我错了,请纠正我。

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

3
我应该使用数据库存储游戏内容吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为话题成为Game Development Stack Exchange。 4年前关闭。 我有一个使用SFML用C ++编写的2D游戏。我想使游戏具有可扩展性,可以通过在文件或数据库中添加行/条目/行来轻松添加诸如项目或实体之类的内容。 我正在寻找不需要编译到程序中的东西,而是可以在运行时读取和写入的东西。什么时候使用数据库合适?
16 c++  sfml  databases 


5
Python Performance vs Game Maker [关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 6年前关闭。 我最初考虑使用Python和SFML创建游戏。我了解Python与C ++相比速度较慢,但​​与Game Maker相比又如何? 我问的主要原因是我最近玩了一个Game Maker游戏(Iconoclasts),该游戏在我的计算机(GMA 950)上以相当差的帧速率运行。我担心Python / SFML会遇到类似的性能问题。

2
尽管使用了Time.deltaTime,但移动似乎与帧速率有关。
我有以下代码来计算在Unity中移动游戏对象所需的转换LateUpdate。据我了解,我对的使用Time.deltaTime应使最终的翻译帧速率独立(请注意CollisionDetection.Move(),仅用于进行射线广播)。 public IMovementModel Move(IMovementModel model) { this.model = model; targetSpeed = (model.HorizontalInput + model.VerticalInput) * model.Speed; model.CurrentSpeed = accelerateSpeed(model.CurrentSpeed, targetSpeed, model.Accel); if (model.IsJumping) { model.AmountToMove = new Vector3(model.AmountToMove.x, model.AmountToMove.y); } else if (CollisionDetection.OnGround) { model.AmountToMove = new Vector3(model.AmountToMove.x, 0); } model.FlipAnim = flipAnimation(targetSpeed); // If we're ignoring gravity, then just …

2
由于或尽管有大量图像,我是否应该使用Spritesheets?
我正在开发2D游戏,并且我有很多精灵。我使用3D动画和模型将其渲染为2D,从而使它们看起来像“ Fallout”或“ Diablo”。比手工绘制还容易,哈哈。 我已经不得不将帧速率降低到15fps,这是我可以降低的最低帧速率,而又不会使它们看上去不连贯。但是,由于24帧的平滑度令人难以置信,这令人感到悲伤。 我这样做的原因有两个: 1)减少硬盘空间。图片越少,我的整体游戏就越小。 2)减少RAM消耗。加载的图像越少,我越有可能避免导致RAM限制过大的问题。 但是,如果有一种方法可以压缩HDD空间和RAM中的图像,我会这样做。我之前已经对其进行过测试,从RGBA8888到RGBA5555的赠品在质量上几乎没有任何变化,而在TexturePacker程序中转换为RGBA4444时仅受到了一点打击。我目前不这样做,因为SFML似乎使用相同数量的内存,而不管它是哪种类型的.PNG图像。我研究了如何以不同的方式加载它,但是未能找到关于该主题的任何内容。 我已经阅读了很多有关如何处理2D视频游戏的内容。共识是压倒性的:将您的Sprite打包成更大的纹理以获得出色的性能!因此,我使用TexturePacker将微小的Sprite打包到更大的Spritesheet中。 但是,我计划每个角色有10-15个动画,移动5个方向,每个动画15-40帧(平均24个)。具有15个动画,5个方向,每个动画平均24帧;即每个字符1800个单独的帧。如果装在一张精灵纸中,则只能显示75张图像。(每个动画每个方向一个精灵表。15* 5) 对于游戏中一个巨大的老板角色,我不能使用Spritesheet,而必须编程一种仅一次加载一张图像的方法。我不知道我是否可以这样做以提高性能。 对于角色,我已经将它们打包在一张spritesheet中。对于单个角色来说,这似乎在大多数时间都有效,尽管有时会停顿。但是,我将其归因于我构思错误的代码,该代码交换了纹理,而不是预加载该角色的所有纹理。 如果我要预加载纹理,则对于精灵表来说是有意义的。我只能想象为每个角色预加载1800个小图像是一个坏主意。 但是,我想一次将它们流式传输到内存中是非常快的,所以我只需要一次在内存中有一个图像。这是否意味着在任何给定时刻我只会让每个字符消耗几个KB而不是45 + MB? 我想这会破坏我的性能,因为流传输必须非常快(每秒15张图像进出内存和渲染,每秒),尽管这些图像非常小-加载字符Spritesheets可能是一个更好的主意进入内存。但是无论如何,我将不得不为我的大老板角色编写一个类似于单图像流的渲染系统。 我一直在尝试,但这不是一个简单的过程。特别是考虑到我正在研究游戏引擎的其他部分,而这些部分现在还不处理图形。

1
我如何干净,优雅地处理类之间的数据和依赖关系
我正在研究SFML 2中的2d自上而下的游戏,需要找到一种优雅的方式来使一切正常工作并融合在一起。 请允许我解释一下。我有许多类都继承自抽象基础,该基础为所有类提供了draw方法和update方法。 在游戏循环中,我调用update然后在每个类上绘画,我认为这是一种非常常见的方法。我有瓷砖,碰撞,播放器和包含所有瓷砖/图像/纹理的资源管理器的类。由于SFML中输入的工作方式,我决定让每个类在其更新调用中处理输入(如果需要)。 到目前为止,我一直根据需要传递依赖关系,例如,在按下播放键时在玩家类中,我在碰撞类上调用了一个方法来检查玩家想要移动到的位置是否是碰撞,并且只有在没有碰撞的情况下才移动播放器。 这在大多数情况下都可以正常工作,但是我相信可以做得更好,但我不确定如何做。 现在,我需要执行一些更复杂的事情,例如:玩家能够走到地面上的某个物体,按一下键来捡起/掠夺它,然后它就会显示在库存中。这意味着需要发生一些事情: 在按键时检查播放器是否在可放物范围内,否则不要继续。 查找项目。 将项目上的精灵纹理从其默认纹理更新为“掠夺”纹理。 更新项目的碰撞:它可能已更改形状或已完全移除。 需要使用添加的项目更新库存。 我如何使一切交流?在我当前的系统中,我的类将超出范围,并且方法调用到处都是。我可以将所有类捆绑在一个大管理器中,并为每个类提供对父管理器类的引用,但这似乎只好一点。 任何帮助/建议将不胜感激!如果有什么不清楚的地方,我很乐于扩展。
12 c++  2d  architecture  sfml 

4
如何在基于回合,基于距离的策略游戏中确定可能的运动范围?
我正在使用c ++和SFML-2.0创建一个二维的,基于回合的策略游戏。运动是基于距离的,而不是基于网格的,具有几个不同的三角形块,这些三角形块在给定的转弯中可以就位旋转或向前移动。 移动将以这样的方式进行:玩家选择棋子要移动到的位置,从而为棋子生成一条可能的路径。玩家确认自己的决定后,棋子将沿着该路径移动到所需位置。路径受到两个因素的限制:距离,一块东西可以走多远,考虑任何转弯(因此,如果有一条曲线,它将是沿着曲线的长度,而不是直接从一点到另一点);和转向角,即在移动(例如,从-30度到30度)时,该零件在任何(以及每个点)可以旋转多远。 我的问题是,我应该如何确定玩家可以选择将棋子移动到的潜在位置范围? 我不确定要在这里使用什么方程式和/或算法。我最初的计划过于复杂,以至于几乎无法实施,更不用说解释了,在这一点上,我因项目停滞而完全迷失了。 考虑到其转弯半径,如何确定设备可以移动的范围? 例如,在下图中。红线,蓝线和绿线的长度都相同。紫色圆圈表示单位可以移动的移动范围。(形状可能不准确,线条的长度实际上可能不相同,但您会明白的)

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

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 ); …

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.