【发布时间】:2013-02-20 12:52:34
【问题描述】:
首先,如果答案很明显,我想提前道歉;我对 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 inside 打印这些值,构造函数 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,如果这有什么不同的话。
谢谢,
马特
【问题讨论】:
-
感谢大家这么快的回复!我将创建一个由两个构造函数调用的 init() 函数,因为这似乎是做我想做的最好的方法。从 Java 迁移到 C++ 令人困惑。
标签: c++ xcode constructor