我们正在开发一个游戏引擎,它将涉及加载精灵,音频剪辑等,所有这些都来自于演员'抽象类。我们可以通过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
}
答案 0 :(得分:-1)
通过添加另一个while循环并通过迭代来修复解决方案。