首先,如果答案很明显,我想提前道歉;我对 C++ 很陌生,我的第一语言是 Java。我也是 Stack Overflow 的新手,所以如果我的问题有问题或者您需要其他任何东西,请告诉我。
所以。我在这里有这段代码:(我将 SFML 用于向量和 CircleShape)
Ball::Ball() {
// This ugly thing calls the full constructor with a random x and y position
// in such a way the the entire ball is inside the screen.
Ball::Ball((rand() % (WINDOW_X - (2 * BALL_RADIUS))) + BALL_RADIUS, (rand() % (WINDOW_Y - (2 * BALL_RADIUS))) + BALL_RADIUS);
}
Ball::Ball(float x, float y) {
loc.x = x;
loc.y = y;
ball.setPosition(loc.x - BALL_RADIUS, loc.y - BALL_RADIUS);
ball.setRadius(BALL_RADIUS);
ball.setFillColor(sf::Color::Red);
ball.setOutlineColor(sf::Color::Black);
ball.setOutlineThickness(1);
}
这是标题(#included 到上面的文件中):
class Ball {
private:
sf::CircleShape ball;
sf::Vector2f loc;
sf::Vector2f vel;
sf::Vector2f acc;
void update();
void bounce();
void draw();
public:
Ball();
Ball(float x, float y);
void run();
};
当我用
Ball ball;
(是的,所有 SFML 渲染的东西都有效),它从不显示。一点调查表明,它的 loc.x 和 loc.y 变量没有设置,可能球对象的半径、填充颜色等也没有设置。如果我在构造函数中使用 std::cout 打印这些值,则 loc.x 和 loc.y 以及所有其他值都已设置,因此我假设它们在构造函数之后的某处未设置。奇怪的是,如果我用
Ball ball((rand() % (WINDOW_X - (2 * BALL_RADIUS))) + BALL_RADIUS, (rand() % (WINDOW_Y - (2 * BALL_RADIUS))) + BALL_RADIUS);
甚至
Ball ball(400, 300);
一切正常,球出现在屏幕上。我真的很难过伙计们。如果有人可以帮助我,那就太好了。
顺便说一句,我正在运行带有 Xcode 4.5.2 的 OS X 10.8,并使用 SFML RC2.0,如果这有什么不同的话。
谢谢,
马特