SFML如何创建可步行的地面?

时间:2016-01-26 20:44:34

标签: c++ visual-c++ sfml

就我已经消失而言,我已经设法使它看起来像一个纹理在地面上移动,但实际发生的是我将Ground精灵的位置设置在Character精灵,我只在X坐标中移动了Character,看起来它在地面上移动了。 现在,我知道必须有另一种方式,可能是像素勾结(当2个对象true命中时给予pixels

无论如何,据我所知,我不知道是否应该以这种方式使用另一个图书馆。

关于我这样做的低效方式的例子:

sf::texture cTexture,gTexture;
sf::sprite character,ground;
character.setPosition(0,400);
ground.setPosition(0,390);

以这种方式移动:

character.move(1.5,0.f);

好像它会在地上移动,我大多说,不是。

请以更有效的方式通知我,更好的是一个友好的方式!

1 个答案:

答案 0 :(得分:0)

所以基本上你是在尝试制作平台游戏,据我所知,你试图找出以不同于操纵X,Y坐标的方式移动精灵的系统?如果是这样,那么可悲的是没有别的方法,每个游戏都基于操纵X,Y,(Z)坐标并在该位置渲染纹理/精灵/任何东西。你真正想要的是什么(如果我得到了正确答案)是物理学(准确地说是碰撞检测)。 SFML在sprite类中已经有一些碰撞检测(实际上在FloatRect中,但是sprite类由float rect变量组成)

//If a sprite contains given point then it will return true
if(sprite.getGlobalBounds().contains(otherSprite.getPosition()))
{
  some collision handling, returning to previous position before moving or whatever
}
//or
//If a sprite intersects other "bounding box" then true
if(sprite.getGlobalBounds().intersects(otherSprite.getGlobalBounds()))
{
// same as above
}

我建议阅读sfml wiki / manual,yt或sfml指南中的一些教程。 如果你不喜欢自己处理物理学的东西,你可以使用Box2D库,这是一个非常好的物理库,但是如果你从获得gamedev物理学的基础知识开始,那么就去使用"手册"一个;)

祝你好运,玩得开心:)