Utilisation de loadTGAfile [TileMapAtlas.m " Cocos2D]
Gilgamesh
Membre
Bonjour,
J'ai un petit soucis au niveau de l'utilisation d'une méthode de Cocos2D
J'ai bien re vérifié mes fichiers et la manière dont j'appel la méthode, cela semble correct, mais toujours ce bug.
Voilà la fonction du framework qui pose soucis (4 SimpleGame 0x0003f89d -[TileMapAtlas loadTGAfile:] + 342 (TileMapAtlas.m:108)) :
Et voilà la manière dont j'utilise cette méthode (7 SimpleGame 0x00045d2b -[ActionLayer loadLevel:] + 397 (ActionLayer.m:76)) :
Merci de votre lecture
J'ai un petit soucis au niveau de l'utilisation d'une méthode de Cocos2D
J'ai bien re vérifié mes fichiers et la manière dont j'appel la méthode, cela semble correct, mais toujours ce bug.
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libobjc.A.dylib 0x97d0243e _objc_fatal + 95
1 libobjc.A.dylib 0x97cfd517 objc_exception_extract + 0
2 CoreFoundation 0x01da0c3b +[NSException raise:format:arguments:] + 155
3 CoreFoundation 0x01da0b9a +[NSException raise:format:] + 58
4 SimpleGame 0x0003f89d -[TileMapAtlas loadTGAfile:] + 342 (TileMapAtlas.m:108)
5 SimpleGame 0x0003f3c9 -[TileMapAtlas initWithTileFile:mapFile:tileWidth:tileHeight:] + 44 (TileMapAtlas.m:41)
6 SimpleGame 0x0003f381 +[TileMapAtlas tileMapAtlasWithTileFile:mapFile:tileWidth:tileHeight:] + 86 (TileMapAtlas.m:34)
7 SimpleGame 0x00045d2b -[ActionLayer loadLevel:] + 397 (ActionLayer.m:76)
8 SimpleGame 0x0004905d -[GameScene init] + 429 (GameScene.m:45)
9 SimpleGame 0x00015663 +[CocosNode node] + 58 (CocosNode.m:60)
10 SimpleGame 0x00048d39 -[MenuLayer startGame:] + 43 (MenuLayer.m:46)
Voilà la fonction du framework qui pose soucis (4 SimpleGame 0x0003f89d -[TileMapAtlas loadTGAfile:] + 342 (TileMapAtlas.m:108)) :
-(void) loadTGAfile:(NSString*)file<br />{<br /> NSAssert( file != nil, @"file must be non-nil");<br /><br /> NSString *path = [FileUtils fullPathFromRelativePath:file ];<br /><br />// //Find the path of the file<br />// NSBundle *mainBndl = [NSBundle mainBundle];<br />// NSString *resourcePath = [mainBndl resourcePath];<br />// NSString * path = [resourcePath stringByAppendingPathComponent:file];<br /> <br /> tgaInfo = tgaLoad( [path UTF8String] );<br />#if 1<br /> if( tgaInfo->status != TGA_OK ) {<br /> [NSException raise:@"TileMapAtlasLoadTGA" format:@"TileMapAtas cannot load TGA file"];<br /> }<br />#endif<br />}//<<<<<<<<<<< La ligne 108<br /><br />
Et voilà la manière dont j'utilise cette méthode (7 SimpleGame 0x00045d2b -[ActionLayer loadLevel:] + 397 (ActionLayer.m:76)) :
- (void) loadLevel:(int) level<br />{<br /> levelLoaded = NO;<br /> <br /> mapStepX = mapStepY = 0;<br /> <br /> if(tileMap != nil) [tileMap releaseMap];<br /> if(mapData == nil) mapData = [MapData sharedMap];<br /> <br /> NSString *levelsDirectory = [[@"/Levels/level" stringByAppendingString:[NSString stringWithFormat:@"%d", level]] stringByAppendingString:@"/"];<br /> <br />/*Ligne 76*/ self.tileMap = [TileMapAtlas tileMapAtlasWithTileFile:[levelsDirectory stringByAppendingString:@"tiles.tga"]<br /> mapFile:[levelsDirectory stringByAppendingString:@"level.tga"] tileWidth:TILE_SIZE tileHeight:TILE_SIZE];<br /> tileMap.transformAnchor = ccp(0, 0);<br /> <br /> [self addChild:tileMap];<br /> <br /> [mapData setTileMapAtlas:tileMap];<br /> <br /> [self loadDozer];<br /> [self loadSpritesData];<br /> [self updateCameraPosition];<br /> [self loadSprites];<br /> <br /> levelLoaded = YES;<br />}<br />
Merci de votre lecture
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Déjà , il devrait être relatif au répertoire des ressources de l'application, pas à la racine du filesystem '/'... Parce que là , clairement, il n'existe pas et n'existera jamais (à cause du sandboxing) de répertoire "/Levels" à la racine...
Cependant j'ai essayer avec un chemin relatif a mon arborescences sous X-Code et sous Finder. Je remarque que ne sont pas du tout les memes. J'ai donc retender de reorganiser tout ca mais par exemple pour un dossier "level1" pour reprendre mon cas, placer dans "Levels" qui lui meme dans Ressources :
dans mon finder je trouve
Je ne sais pas si mes petits dessins sont explicites mais bon en tout cas, l'arborescence n'est pas la même, pourquoi?
Dans X-Code tous mes répertoire sont jaune(icône) or dans certain exemple du net certains sont bleu comme dans le Finder. Un lien?
repertoire bleu = répertoire réel = répertoire du Finder
Sinon j'ai bien retenter le path qui devrais concorder, mais toujours la même erreur pourtant la variable level est bien mise a 1 lors de l'exécution, donc je pense que le path utilisé est bon.
je ne voi vraiment pas d'ou peut venir le problème ou du moins comment le résoudre. :S
Il faut utiliser [tt][[NSBundle mainBundle] pathForResource:ofType:inDirectory:][/tt] pour composer un chemin d'accès à un élément (image, ...) que tu mets dans les ressources.
Le "directory" à mentionner est dépendant des "dossiers bleus" dans ton projet Xcode (la vraie hiérarchie créé quand l'application est compilée) et non des "dossiers jaunes". Si vraiment tu ne sais pas quel est ce chemin, tu peux toujours compiler ton application, afficher le contenu du packet ".app" généré (clic droit dans le Finder sur le .app compilé) et regardé comment est organisé ton dossier "Resources".
La doc, encore la doc : Resources Programming Guide
En effet j'ai découvert grâce a toi comment était véritablement organiser mon projet dans ***.app. Les ressources sont mise directement a la racine donc en modifiant le path par "./" je tombe donc sur une autre erreur de même nature sur un autre fichier que j'ai résolu et je suis passer outre ce problème.
Ce qui vaut un Grand merci a vous tous .... MERCI.