C++ 为什么我的球使用加速度作为速度?

C++ 为什么我的球使用加速度作为速度?,c++,class,inheritance,C++,Class,Inheritance,我得到了一个类型为ball的对象,它是类Particle的子类。该类有三个向量类型的成员位置、速度和加速度 在每一帧上,当调用myball.update时,其速度和位置相加,加速度和速度相加。然后球被画在屏幕上。不管怎样,对于一些不清楚的动机,无论我给出的速度值是多少,球都不会移动,但如果我给出一个加速度值,它会以非加速匀速运动 以下是我的课程: class Vector { private: void updateC() { x = cos(a)

我得到了一个类型为
ball
的对象,它是类
Particle
的子类。该类有三个
向量
类型的成员
位置
速度
加速度

在每一帧上,当调用
myball.update
时,其速度和位置相加,加速度和速度相加。然后球被画在屏幕上。不管怎样,对于一些不清楚的动机,无论我给出的速度值是多少,球都不会移动,但如果我给出一个加速度值,它会以非加速匀速运动

以下是我的课程:

class Vector {
    private:
        void updateC() {
            x = cos(a) * l;
            y = sin(a) * l;
        }
        void updateT() {
            a = atan2(y, x);
            l = sqrt(x * x + y * y);
        }
    public:
        float x = 0, y = 0;
        float a = 0, l = 0;
        Vector() {

        }
        Vector(float nx, float ny): x(nx), y(ny) {
            updateT();
        }
        void X(float nx) {
            x = nx;
            updateT();
        }
        void Y(float ny) {
            y = ny;
            updateT();
        }
        void A(float na) {
            a = na;
            updateC();
        }
        void L(float nl) {
            l = nl;
            updateC();
        }
        Vector operator +(Vector other) {
            return Vector(x + other.x, y + other.y);
        }
        Vector operator -(Vector other) {
            return Vector(x - other.x, y - other.y);
        }
        Vector operator *(float m) {
            Vector result(x, y);
            result.L(l * m);
            return result;
        }
        void operator +=(Vector other) {
            x += other.x;
            y += other.y;
            updateT();
        }
        void operator -=(Vector other) {
            x -= other.x;
            y -= other.y;
            updateT();
        }
        void operator *=(float m) {
            l *= m;
            updateC();
        }
    };
粒子:

class Particle {
    public:
        Vector position;
        Vector velocity;
        Vector gravity;
        Particle() {}
        Particle(Vector np, Vector nv = Vector(0, 0), Vector na = Vector(0, 0)): position(np), velocity(na), gravity(na) {}
        void accelerate(Vector a) {
            velocity += a;
        }
        void update() {
            position += velocity;
            velocity += gravity;
        }
};
和球:

class ball: public Particle {
    public:
        ball(Vector p, Vector v, Vector a): Particle(p, v, a) {}
        void update() {
        Particle::update();
            graphics.circle("fill", position.x, position.y, 10);
        }
};
如前所述,如果我以不同于0的速度初始化
myball
,球仍然不会移动,但如果我以不同于0的加速度初始化球,以加速度作为速度,球会移动


我做错了什么?

粒子构造函数中有一个输入错误:

 Particle(Vector np, Vector nv = Vector(0, 0), Vector na = Vector(0, 0)): position(np), velocity(na), gravity(na) {}
它必须是:

 Particle(Vector np, Vector nv = Vector(0, 0), Vector na = Vector(0, 0)): position(np), velocity(nv), gravity(na) {}

粒子构造函数中有一个输入错误:

 Particle(Vector np, Vector nv = Vector(0, 0), Vector na = Vector(0, 0)): position(np), velocity(na), gravity(na) {}
它必须是:

 Particle(Vector np, Vector nv = Vector(0, 0), Vector na = Vector(0, 0)): position(np), velocity(nv), gravity(na) {}

为什么在位置和速度更新中没有时间分量?你的向量类不酷。它有x,y,a,l作为公共。此外,参数通过值传递给运算符(通常为常量ref X&operator+=(const X&rhs))。您可以尝试更改运算符签名。你也可以试着调试你code@Unick“您还可以尝试调试代码”right@Unick我应该将它们设置为私有并实现获取它们的方法吗?不用了,谢谢。它比较慢而且冗长(
myvector.getX()
而不是
myvector.x
)。为什么不在位置和速度更新中添加时间组件呢?你的向量类并不酷。它有x,y,a,l作为公共。此外,参数通过值传递给运算符(通常为常量ref X&operator+=(const X&rhs))。您可以尝试更改运算符签名。你也可以试着调试你code@Unick“您还可以尝试调试代码”right@Unick我应该将它们设置为私有并实现获取它们的方法吗?不用了,谢谢。它比较慢而且冗长(
myvector.getX()
而不是
myvector.x
)。我指的是打字错误。你写了
velocity(na)
而不是
velocity(nv)
我知道这很简单,但我无法识别它。非常感谢。我是说打字错误。你写了
velocity(na)
而不是
velocity(nv)
我知道这很简单,但我无法识别它。谢谢。