SFML前景碰撞

时间:2018-07-07 09:08:38

标签: colors collision sfml foreground intersect

我一直试图在SFML上制作RPG游戏,但现在我在碰撞中挣扎。我的问题很简单,我有这2层,即背景和前景。背景只是作为背景图像,而前景png图像应作为碰撞,角色应该完全自由走动(透明)的部分,其余结构用作碰撞(此处为背景图像: https://imgur.com/gallery/DA3zGtD我将地板保持透明,同时保持其余部分)。香港专业教育学院尝试使用getGlobalBounds()。intesect与字符精灵没有任何成功。我想让它尽可能简单,这是我到目前为止所拥有的:


datetime

我认为发生的事情是,当我想要执行操作时,是否需要将整个png而不是仅将我想要的部分作为碰撞。我也想尝试颜色冲突,但是我真的不知道如何实现它,对于SFML来说是新的。预先感谢!

1 个答案:

答案 0 :(得分:0)

如果您希望在播放器和其他对象之间进行正确的碰撞检测,则.intersect()不够好。它将使您的角色永久地停留在结构中,或者使其在没有玩家控制的情况下通过该结构,这取决于您为此条件编写的行为。

有效的方法是检测玩家从哪个方向接近物体,并以此为基础使他向后移一点,或者如果当前速度使他更深入建筑物,则将速度设置为0。

例如,按原样使用intersect(),以防玩家从左侧撞墙:

if(velocity.x > 0 && player.getLocalBounds().intersect(wall.getLocalBounds()) && player.getLocalBounds().left > wall.getLocalBounds().left)

然后,您可以使用此条件停止播放器(将velocity.x设置为0),将其设置为反向以使其退避,或者在发生碰撞时执行您希望的其他任何行为。< / p>

(请注意,这不是理想的解决方案,但它应该可以工作并遵循您实现的类似逻辑。)