无法将保存的值分配给文件列表

时间:2015-06-20 12:57:17

标签: list iteration loading getline assign

我们正在开发一个游戏引擎,它将涉及加载精灵,音频剪辑等,所有这些都来自于演员'抽象类。我们可以通过for循环迭代actor元素列表并保存以下值:

键入<< ID<< x<< y<<宽度<<高度<< textureDirectory<< ENDL;

文件中的每一行代表一个actor及其属性。加载时,每行的值都打印出来,但是当在关卡编辑器中渲染时,actor会合并,所以实际上属性会相互添加。

以下是在actor中加载的代码:

GLvoid Load::loadActor(list<Components::Actor*>::iterator it)
{
    // Clear scene data
    Components::Actor::actors.clear();

    // Open file
    std::cout << "\nOpen: ";
    cin >>  cinData;
    inFile.open("Content/Maps/" + cinData + ".sol", std::ifstream::in);

    // Iterate and add actor types to Actor::actors list
    string line;
    vector <int> getType;
    vector <int> getID;
    vector <float> getX;
    vector <float> getY;
    vector <float> getWidth;
    vector <float> getHeight;
    vector <string> getTexDir;
    int lines = 0;

    while (getline(inFile, line))
    {
        stringstream iss(line);
        int type;
        int id;
        float x;
        float y;
        float w;
        float h;
        string td;

        // Read and pack temp values in vector lists
        if (iss >> type >> id >> x >> y >> w >> h >> td)
        {
            getType.push_back(type);
            getID.push_back(id);
            getX.push_back(x);
            getY.push_back(y);
            getWidth.push_back(w);
            getHeight.push_back(h);
            getTexDir.push_back(td);

            cout << "All values have been read..." << endl;
        }

        // Reset temp values
        type = 0;
        id = 0;
        x = 0.0f;
        y = 0.0f;
        w = 0.0f;
        h = 0.0f;
        td = "";

        // Create actor types
        switch(type)
        {
        case Components::Actor::T_SPRITE:

            Components::ActorHandler::create(new Components::Sprite(true));
            for ( it = Components::Actor::actors.begin(); it != Components::Actor::actors.end(); it++)
            {
                Components::Actor *actorList = (*it);

                actorList->setID(getID[lines]);
                actorList->setX(getX[lines]);
                actorList->setY(getY[lines]);
                actorList->setWidth(getWidth[lines]);
                actorList->setHeight(getHeight[lines]);
                actorList->setTextureDir(getTexDir[lines]);
                actorList->texture2D.loadTexture(getTexDir[lines]);

                std::cout << "Type: " << actorList->getType() << " ID: " << actorList->getID() << " X pos: " << actorList->getX() << " Y pos: " << actorList->getY() << " Width: " << actorList->getWidth() << " Height: "  << actorList->getHeight() << " TexDir: "  << actorList->getTextureDir() << endl;
            }
            break;

        default:
            break;
        }

        lines++;
    }

    std::cout << "Lines detected: " << lines << endl;

    // Close file
    inFile.close();

    // Destroy temp data
    getType.clear();
    getID.clear();
    getX.clear();
    getY.clear();
    getWidth.clear();
    getHeight.clear();
    getTexDir.clear();

    std::cout << "Load success!" << endl;
    enter code here

}

1 个答案:

答案 0 :(得分:-1)

通过添加另一个while循环并通过迭代来修复解决方案。