草庐IT

c++ - sf::Texture 作为类成员不起作用?

嘿,我想在我的SFML应用程序中绘制一个Sprite,但是当我使用作为类成员的图像和纹理时,它的纹理总是白色类(class)成员:sf::Spritemyimg;sf::Imagemyimg_image;sf::Texturemyimg_texture;当我在我的cpp文件中创建这样的Sprite时//createimagemyimg_image.create(icon.width,icon.height,icon.pixelData);//createtexturefromimagemyimg_texture.create(icon.width,icon.height);myimg_

c++ - 使用 SFML 平铺图像

我有一个背景图像,当我的窗口是800x600时它只有256x256。我不确定如何让图像在整个窗口中重复。我目前用以下方式加载图像:sf::TextureBkg;if(!Bkg.loadFromFile("darkPurple.png")){return-1;}sf::SpriteSprite;Sprite.setTexture(Bkg);稍后绘制:window.draw(Bkg);我尝试使用:texture.setRepeated(true);但这似乎没有帮助。谢谢! 最佳答案 加载图像后,您需要调用setReapeted:text

C++11 通过原始指针或引用获取 unique_ptr 的所有权?

编辑我想下面的代码会假设我有一个addChild()的重载版本,它接受一个已经包装在unique_ptr中的Sprite,在那里取得所有权就可以了。只是想我会在其他人之前提到这一点。:)。经过漫长的一天,我在这里编写了所有代码,因此请将其视为伪代码质量,仅用于演示手头的问题。原始问题我正在编写一个框架,其中有一个显示列表、parent/child等。我认为使用unique_ptrforexample是这里的方法,因为当您将子项添加到父显示对象时,父项现在成为该子项的唯一所有者是合乎逻辑的。但是,将有可用的方法,例如getChildAt(index)和getChildByName等,我认

c++ - 如何在 SFML 中为 Sprite 制作动画

假设我有4张图像,我想使用这4张图像来制作角色动画。这4个图像代表行走的角色。我希望动画在我按下移动键时自动重复,但在我松开它时立即停止。如果您不知道它,则不需要特定于SFML,只要基本理论就能真正帮助我。谢谢。 最佳答案 您可能需要某种简单的状态机。当按键按下时(参见sf::Input'sIsKeyDownmethod),让角色处于“动画”状态。当键未按下时,使角色处于“非动画”状态。当然,您始终可以跳过这种“状态”,只执行我在下面提到的操作(具体取决于您在做什么)。然后,如果角色处于“动画”状态,则获取下一个“图像”(有关详细信

c++ - 慢速 C++ DirectX 2D 游戏

我是C++和DirectX的新手,我来自XNA。我开发了一个类似FlyTheCopter的游戏.我所做的是创建一个名为Wall的类。当游戏运行时,我绘制了所有的墙。在XNA中,我将墙存储在ArrayList中,而在C++中,我使用了vector。在XNA中,游戏运行速度很快,而在C++中则非常慢。这是C++代码:voidGameScreen::Update(){//UpdateWallsintlen=walls.size();for(inti=wallsPassed;i在Update方法中,我将X值减少4。在Draw方法中,我调用sprite->Draw(Direct3DXSprite

c++ - 如何从 vector 中删除 shared_ptr

像下面的代码,m_vSprites是shred_ptr的vector,如果他的一个元素更新失败,我想从vector中删除它,但是当我想使用删除时我的代码崩溃了。但我不明白为什么,有人可以帮忙吗?我需要使用erase的原因是因为我的应用程序会不断地向vector中添加元素,但如果某些元素满足它们的终止条件,也会不断地从vector中删除对象。如果我不删除它,vector会随着程序的运行而变得巨大!RECTrcOldSpritePos;typedefboost::shared_ptrSmartSprite;vector::iteratorsiSprite;for(siSprite=m_vS

c++ - 如何减慢 Sprite 动画的速度?

目前我有这个player.cpp类,我正在使用我的Sprite动画。我正在使用计数器来更新每一帧。它有动画,但它在动画中飞来飞去。我想放慢速度。我找到了可用于减慢sprite动画的代码,但我不确定如何将其实现到我当前的程序中。下面是我的player.cpp文件,后面是我发现可以减慢Sprite动画速度的代码。当我尝试向counterWalking++添加时钟时,它根本没有动画,我已经尝试实现此代码以达到相同的效果。player::player(){rect.setSize(sf::Vector2f(32,32));rect.setFillColor(sf::Color::White);

c++ - 如何通过计算新的 x 和 y 位置来围绕其中心旋转 Sprite ?

我正在使用DarkGDK和C++创建一个简单的2d游戏。我正在旋转一个对象,但它从sprite的左上角开始旋转。我有以下可用变量:播放器X玩家Y播放器宽度玩家高度旋转角度(360>x>0)是否有一种算法可以修改Sprite的枢轴点,而不是中心点?这是一个小代码示例:voidPlayer::Move(void){if(checkLeft()){PlayerX-=PlayerSpeed;if(PlayerX800-PlayerWidth)PlayerX=800-PlayerWidth;}if(checkUp()){PlayerY-=PlayerSpeed;if(PlayerY600-Pla

c++ - OpenGL Sprite 绘制质量低

我正在尝试使用openglglsl和glm库渲染Sprite。当我使用glBegin、glEnd在旧管道中渲染Sprite时,一切都很好,但是当我使用着色器时,在旋转Sprite后,它的绘制质量非常差,如图所示:http://sm.uploads.im/t/I3lpf.png我的渲染代码:GLuintp;GLuintvertex_shader,fragment_shader;GLuintVBO,VAO;glm::mat4projection_matrix=glm::ortho(0.0F,640.0F,480.0F,0.0F,-1.0F,1.0F);voidsprite_init(){p

c++ - 更新 Sprite 位置的奇怪行为

我正在使用SDL库用C++编写一个简单的roguelike游戏,但在屏幕上移动我的角色时遇到了一些问题。每次需要渲染一帧时,我都会使用update()函数更新Sprite的位置,如果玩家静止不动,该函数不会执行任何操作。为了发出移动命令,从而启动动画,我使用了step()函数,每个玩家从一个图block移动到另一个图block时只调用一次。收到“向上”命令后,游戏运行良好,角色在一秒钟内平稳移动到新位置。不过,当“向下”的命令下达后,他的移动速度会减半,而且显然在一秒过去后,瞬间就被“传送”到了最终的位置,身形骤然一闪。运动的代码基本上是相同的,但事实上,在一种情况下增量运动被加到y位