E/S de fichier à l'aide de COCOS2D-X
Je suis en train de charger un fichier Séparé par des Virgules appelé POSDATA.GAMEDATA
. J'ai regardé plusieurs endroits sur l'internet et il s'avère que j'ai besoin de faire quelques réglages et /ou d'une classe différente.
J'ai essayé d'utiliser ifstream
. Toutefois, il ne peut pas ouvrir le fichier. Xcode 4.3.2 n'arrive pas à trouver mon POSDATA.GAMEDATA
fichier. J'ai aussi essayé de mettre le fichier à l'aide de ofstream
mais quand j'utilise open()
dans les deux cas, le fichier n'est pas ouvert.
Mon code est quelque chose comme ceci:
using namespace std;
void FileLoader::loadFile( string p_WhichFile ) {
//Local Variables
string thisLine;
//Open POSDATA.GAMEDATA
ifstream dataStream;
dataStream.open( p_WhichFile.c_str( ) );
//Check if file is opened
if ( !dataStream ) {
cerr << "[ ERROR ] Cannot load file:" << p_WhichFile.c_str( ) << endl;
exit( 1 );
}
//Get lines of strings
while ( getline( dataStream, thisLine ) ) {
fileContents.push_back( thisLine ); //fileContents is a vector< string > object
}
dataStream.close( );
cout << "[ NOTICE ] Finished reading file" << p_WhichFile << endl;
}
J'ai vu CCFileUtils
mais je n'arrive pas à obtenir comment l'utiliser.
MODIFIER: j'ai essayé de fournir le chemin d'accès absolu ( /Users/LanceGray/Documents/LanceDev/COCOS2DX/cocos2dx/TestGame/Data/POSDATA.GAMEDATA
) et cela a fonctionné. Cependant, je ne peux pas le faire puisque le jeu est censé être utilisé dans les appareils iOS et Android, de sorte que le chemin n'est pas toujours le même sur tous les appareils. Toute aide sera grealy apprécié.
- vous êtes de le faire sur Android ou iOS? si android ou vous envisagez de soutenir à la fois je pense que vous feriez mieux d'utiliser CCFileUtils pour éviter d'obtenir dans le zip lib. D'autre part, si iOS, vous pouvez simplement utiliser fopen. Je ne suis pas très familier avec ifstream, ne peut pas aider beaucoup.
- Il est censé être à la fois pour iOS et Android. Pouvez-vous donner un petit exemple sur la façon d'utiliser
CCFileUtils
etfopen
? Je vais essayer de regarder pour eux dans le temps.
Vous devez vous connecter pour publier un commentaire.
J'ai eu de travail en utilisant
CCFileUtils( )::sharedFileUtils( ) -> fullPathFromRelativePath( "POSDATA.GAMEDATA" );
Une explication plus détaillée:
Right-click -> Add Files
. Ce que j'ai fait, j'ai ajouté un nouveau dossier appeléData
sur le même niveau que leResources
etClasses
dossiers et placé mesPOSDATA.GAMEDATA
fichier. Dans Xcode, j'ai ajouté un nouveau groupe, et a ajouté que le fichier dans ce groupe.ifstream
pour ouvrir le fichier.CCFileUtils( )::sharedFileUtils( ) -> fullPathFromRelativePath( )
pour obtenir le chemin absolu du fichier. Fournir le nom de fichier sur lefullPathFromRelativePath( )
comme argument.Un petit exemple:
Cette classe vous permettra de charger un fichier avec le nom
pFileName
et le place sur son membre variablemFileContents
. ( Notez qu'il devrait avoir unpublic get
fonction commevector< string > getFileContents( )
pour accéder à lamFileContents
parce que c'estprivate
)MODIFIER: L'exemple ci-dessus va travailler sur iOS, cependant, il ne sera pas sur les appareils Android. Donc, pour résoudre ce problème, au lieu d'utiliser
ifstream
, utilisezCCFileUtils::sharedUtils( ) -> getFileData( )
à la place. En collaboration avecCCFileUtils::sharedUtils( ) -> fullPathFromRelativePath( )
, nous serons en mesure d'atteindre notre objectif de la lecture d'un fichier texte simple qui fonctionne à la fois sur iOS et Android.La
FileReader
classe serait alors comme ceci:CCFileUtils
, cependant.getFileData()
mais j'obtiens un message d'erreur indiquant queAssertion failed: (pszFileName != __null && pSize != __null && pszMode != __null), function getFileData, file CCFileUtils.mm, line 450.
je l'ai utilisé comme ceci:unsigned char * posdataLoc = CCFileUtils::sharedFileUtils() -> getFileData( "POSDATA.GAMEDATA", "r", 0 );
getFileData( )
de travail maintenant. Quand jecout
sur la console, il montre extra caractères aléatoires sur la fin. Bizarre.Vous pouvez faire référence à de Coco du wiki
Lire/écrire un fichier dans le cocos2d