Je suis un programmeur assez récent, mais je considère que mon google-fu est assez compétent et j'ai passé plusieurs heures à chercher. J'ai une simple application SDL qui lit à partir d'un fichier binaire (2 octets comme un nombre magique, puis 5 octets par "tuile") puis affiche chaque tuile dans le tampon, les octets décident le x, y, id, passability et autres. Donc, c'est vraiment le chargement de niveau.Fichiers lus différemment sous Linux? C++
Il fonctionne bien sur n'importe quel ordinateur Windows (testé Windows Server 2008, 7/64 et 7/32) mais quand je compile sur Linux, il affiche des carreaux aléatoires dans des positions aléatoires. Je serais tenté de dire qu'il lit la mauvaise partie de la RAM, mais j'ai implémé le nombre magique afin qu'il renvoie une erreur si les 2 premiers octets étaient sortis. J'aimerai bien m'en rendre compte moi-même mais ça m'embête maintenant et je ne peux pas progresser plus longtemps à moins de pouvoir programmer en déplacement (mon ordinateur portable fonctionne sous Linux). J'utilise G ++ sur Linux, mingw32g ++ sur Windows.
bool loadlevel(int level_number)
{
int length;
std::string filename;
filename = "Levels/level";
filename += level_number+48;
filename += ".lvl";
std::ifstream level;
level.open(filename.c_str(),std::ios::in|std::ios::binary);
level.seekg(0,std::ios::end);
length = level.tellg();
level.seekg(0,std::ios::beg);
char buffer[length];
level.read(buffer,length);
if (buffer[0] == 0x49 && buffer[1] == 0x14)
{
char tile_buffer[BYTES_PER_TILE];
int buffer_place = 1;
while(buffer_place < length)
{
for (int i = 1;i <= BYTES_PER_TILE;i++)
{
tile_buffer[i] = buffer[buffer_place+1];
buffer_place++;
}
apply_surface(tile_buffer[1],tile_buffer[2],tiles,screen,&clip[tile_buffer[3]]);
}
}
else
{
// File is invalid
return false;
}
level.close();
return true;
}
Merci d'avance!
Veuillez poster le code. Il semble probable que vous avez fait des suppositions sur la façon dont le compilateur va faire les choses; différentes plates-formes ont (légèrement) différentes conventions sur des choses comme l'emballage de la structure. Postez le code et quelqu'un le comprendra rapidement. – MarkR
Vous pouvez inclure les compilateurs que vous utilisez sur chaque plate-forme. – sleepynate
J'ai mis à jour le code avec des informations plus pertinentes – sudorossy