我正在尝试编写我第一个SFML项目的一个非常基础的游戏。它是一个有关机器人的,它带有一个有关节的臂,只能用手弹气球。我的问题是,当检查钳子精灵是否与气球精灵相交时,无论气球或机器人钳子的放置位置如何,它始终返回true。我使用变换来放置机器人手臂的各个部分,这就是我认为导致问题的原因,但我不知道为什么。我已经在另一个程序中尝试了边界框碰撞,在那里未使用变换并且它完美地工作了。转换和检测代码如下。如果有人能解释一下这个问题,我将不胜感激。对于SFML我是全新的,所以请原谅我的无知!
sf::Transform trBody;
trBody.translate(sBodyPos);
/////////////////////////////////////////////////
sf::Transform trArm1;
trArm1.translate(sArm1Pos);
sf::Transform rotArm1;
rotArm1.rotate(sArm1Rot);
sf::Transform TR1 = trBody*trArm1*rotArm1;
/////////////////////////////////////////////////
sf::Transform trArm2;
trArm2.translate(sArm2Pos);
sf::Transform rotArm2;
rotArm2.rotate(sArm2Rot);
sf::Transform TR2 = TR1*trArm2*rotArm2;
/////////////////////////////////////////////////
sf::Transform trPincer1;
trPincer1.translate(sPincer1Pos);
sf::Transform TR3 = TR2*trPincer1;
/////////////////////////////////////////////////
sf::Transform trPincer2;
trPincer2.translate(sPincer2Pos);
sf::Transform TR4 = TR2*trPincer2;
/////////////////////////////////////////////////
sf::Transform trBalloon1;
trBalloon1.translate(sBalloon1Pos);
if (sPincer1.getGlobalBounds().intersects(sBalloon1.getGlobalBounds())){
cout << "Bang" << endl;
ballOneHit = true;
}
// Clear screen
app.clear();
app.draw(sArm2, TR2);
app.draw(sPincer1, TR3);
app.draw(sPincer2, TR4);
app.draw(sArm1, TR1);
app.draw(sBody, trBody);
if (ballOneHit == false){
app.draw(sBalloon1, trBalloon1);
}
// Update the window
app.display();
sf::Transformable
类提供的函数,这样在长期运行中会更加干净整洁。请记住,实现sf::Transformable
和sf::Drawable
(例如sf::Sprite
)的类将跟踪由sf::Transformable
中的函数创建的变换,并在不需要指定的情况下正确地绘制自己(你只需使用window.draw(sprite);
即可)。 - Conduitsf::Transformable
和sf::Drawable
的内置类。 - Conduit