2015-06-20 55 views
0

我们正在开发一个游戏引擎,其中包含加载精灵,音频剪辑等的游戏引擎,这些引擎都是从'Actor'抽象类中扩展而来的。我们能够通过通过演员的元素列表进行迭代for循环并保存以下值:无法将保存的值分配到文件列表

类型< < ID < < X < <Ÿ< <宽度< <高度< < textureDirectory < < ENDL;

文件中的每一行代表一个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 

} 

回答

0

通过添加另一个while循环并通过迭代代替固定的溶液中。