Yani dosyası yazmak için bu kodu kullanıyorum ikili modda dosyaya: (ben daha sonra bir seviye editörü yazacağım şimdi test)
int main()
{
ofstream file("level.bin", ios::binary);
int ents = 1; //number of entites
file.write((char*)&ents, sizeof(int));
float x = 300; //x and y coords
float y = 500;
file.write((char*)&x, sizeof(float));
file.write((char*)&y, sizeof(float));
int imglength = 12; //strings are prefixed by a length
file.write((char*)&imglength, sizeof(int));
string img = "platform.png"; //string
file.write(img.c_str(), sizeof(img.c_str()));
cout << "wrote\n";
return 0;
}
Ben kodu Yüklemek için m şu şekilde kullanılır:
void SceneManager::LoadScene(std::string filename) { std::ifstream file(filename.c_str(), std::ios::binary); int ents; file.read((char*)&ents, sizeof(int)); std::cout << ents << std::endl; for(int i = 0; i < ents; i++) { //read x and y coords float x; float y; file.read((char*)&x, sizeof(float)); file.read((char*)&y, sizeof(float)); std::cout << x << " " << y << std::endl; int imglength; file.read((char*)&imglength, sizeof(int)); std::cout << imglength << std::endl; std::stringstream ss; for(int k = 0; k <= imglength; k++) { //read string char c; file.read((char*)&c, sizeof(char)); ss << c; } std::string image = ss.str(); std::cout << image << std::endl; phys_static ent; Def edef; edef.SetVal("x", x); edef.SetVal("y", y); edef.SetString("image", image); ent.init(edef); AddEntity(ent); } file.close(); }
Her şey dize yüklemesi dışında iyi çalışıyor. Platform.png yerine görüntüyü yüklediğimde plattttttttt ve hataları gösterdiği gibi yanlış yazarım. Ben de uzunluğa sahip dizeyi önekliyorum. Bir ikili dosyaya dize yazmanın doğru yolu nedir?
Bu işe yaradı, ancak bazı garip nedenlerden dolayı dizenin sonuna ekstra bir g ekledi. Boyutu 11'e düşürmeyi ve bunun bir şey yapıp yapmadığını görmeyi deneyeceğim. – Chris
Boş char'lar OP’nin kodu için bir sorun olmamalıdır (düzeltmenizle birlikte). Asla "\ 0" dizgesini bir dize sonlandırıcı olarak görür ve asla C stili dizeleri kullanmaz. –
Tamam, uzunluğu 11'e ayarladı. – Chris