所以,我有一个Sprite不允许移出屏幕。我做了一个让玩家回到屏幕的功能,它应该是(我将玩家的原点设置在它的中间,这就是* 0.5代表的):
if (playerSprite.getPosition().y + playerSprite.getGlobalBounds().height*0.5 > VideoMode::getDesktopMode().height)
playerSprite.setPosition(Vector2f(playerSprite.getPosition().x, VideoMode::getDesktopMode().height - playerSprite.getGlobalBounds().height*0.5));
if (playerSprite.getPosition().x + playerSprite.getGlobalBounds().width*0.5 > VideoMode::getDesktopMode().width)
playerSprite.setPosition(VideoMode::getDesktopMode().width - playerSprite.getGlobalBounds().width*0.5, playerSprite.getPosition().y);
if (playerSprite.getPosition().y - playerSprite.getGlobalBounds().height*0.5 < 0)
playerSprite.setPosition(Vector2f(playerSprite.getPosition().x, playerSprite.getGlobalBounds().height*0.5));
if (playerSprite.getPosition().x - playerSprite.getGlobalBounds().width*0.5 < 0)
playerSprite.setPosition(Vector2f(playerSprite.getGlobalBounds().width*0.5, playerSprite.getPosition().y));
有了这些代码,我的播放器不会在它碰到屏幕边缘时停止(当然它不是垂直的),而是在屏幕边缘滑动。 但是当我试图为另一个Sprite做同样的事情时,让我们说一个矩形的Sprite,无论碰撞的角度如何,玩家都会停下来。任何人都可以向我解释这种行为,并可能建议我如何让它沿着它的边缘滑动? 这就是我已经尝试过的(这里只是为了移动,它是左,右,下的模拟):
if (Keyboard::isKeyPressed(Keyboard::W)
sprite.movePlayer('W', speed);
if(playerSprite.getGlobalBounds().intersects(entity.getGlobalBounds()))
sprite.movePlayer('S', speed);
答案 0 :(得分:-1)
问题可能在于,对于每个更新帧,您正在对其已经击中的边界方向执行精灵的速度的硬否定,同时仍然在其仍然在边界内的方向上应用速度。当精灵击中边界时,冻结所有移动,而不仅仅是向边界移动。