我正在整理一个弹球桌,这里有一个PinballTable类。我想将所有游戏对象(弹球,保险杠,鳍状肢等)保存在一个 vector 中,我称之为_gameObjs。

当我遍历 vector 时,无论该GameObj是否在 vector 中,它都会返回构造函数中声明的最后一个GameObj。如果将多个GameObj添加到 vector 中,它将多次返回最后声明的GameObj。我正在从C#过渡,集合似乎正在发挥我的最大作用,尽管我完全被困在这里

在这里,我添加了三个对象:两个保险杠和一个弹球。在更新函数中,我试图让它输出每个对象的x大小的输出,只是我知道它正确地进行了迭代。例如,在这里,我什至没有将弹子球添加到 vector 中,但是每个更新调用它会输出两次弹子球的x大小。

#include "PinballTable.h"

GameObj* _pinball;
int TABLE_WIDTH;
int TABLE_HEIGHT;

float _tableTiltedAngle     = 6.5f;
float _radiansPerDegree     = PI / 180;
float _gravityForce         = cos( _tableTiltedAngle * _radiansPerDegree ) * GRAVITY;

vector<GameObj> _gameObjs;


PinballTable::PinballTable( const int width, const int height )
{
    TABLE_WIDTH     = width;
    TABLE_HEIGHT    = height;


    GameObj bumper1(
        GameObj::shapeCircle,
        GameObj::typeStatic,
        color4f( 1.0f, 1.0f, 0.0f, 1.0f),
        point2f( 300.0f, 600.0f ),
        vec2f( 40.0f, 0.0f )
        );
    _gameObjs.push_back( bumper1 );


    GameObj bumper2(
        GameObj::shapeCircle,
        GameObj::typeStatic,
        color4f( 1.0f, 1.0f, 0.0f, 1.0f),
        point2f( 50.0f, 200.0f ),
        vec2f( 50.0f, 0.0f )
        );
    _gameObjs.push_back( bumper2 );


    GameObj pinball(
        GameObj::shapeCircle,
        GameObj::typeDynamic,
        color4f( 1.0f, 1.0f, 0.0f, 1.0f),
        point2f( 100.0f, 100.0f),
        vec2f( 20.0f, 20.0f)
        );


    _pinball = &pinball;
}


PinballTable::~PinballTable(void)
{
}





// ------------------------------ Update Functions ------------------------------
void PinballTable::update( GameTime& gameTimer )
{
    for( vector<GameObj>::iterator i = _gameObjs.begin(); i != _gameObjs.end(); ++i )
    {
        cout << i->getSize()->x << endl;
    }
}

谢谢您的帮助

get size函数仅从GameObj返回vector2(x,y分量)。每次输出大小与PinballTable构造函数中最后声明的GameObj大小匹配
vec2f* GameObj::getSize( void )
{
    return &_size;
}

解决了:

正如少数人指出的,问题之一是GameObjs是在构造函数内部创建的。

在GameObj类中,我没有在头文件中声明不同的成员。将这些成员切换到头文件似乎可以解决此问题,原因不明。

最佳答案

您在构造函数内创建了3个GameObj,在构造函数返回后将对其进行销毁,并将它们添加到 vector 中时,它们将是垃圾。

10-04 23:23