Utilisation de loadTGAfile [TileMapAtlas.m " Cocos2D]

GilgameshGilgamesh 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.

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, @&quot;file must be non-nil&quot;);<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-&gt;status != TGA_OK ) {<br />		[NSException raise:@&quot;TileMapAtlasLoadTGA&quot; format:@&quot;TileMapAtas cannot load TGA file&quot;];<br />	}<br />#endif<br />}//&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; 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 = [[@&quot;/Levels/level&quot; stringByAppendingString:[NSString stringWithFormat:@&quot;%d&quot;, level]] stringByAppendingString:@&quot;/&quot;];<br />	<br />/*Ligne 76*/	self.tileMap = [TileMapAtlas tileMapAtlasWithTileFile:[levelsDirectory stringByAppendingString:@&quot;tiles.tga&quot;]<br />												&nbsp; mapFile:[levelsDirectory stringByAppendingString:@&quot;level.tga&quot;] 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 :D

Réponses

  • zoczoc Membre
    10:43 modifié #2
    A première vue, ton levelsDirectory n'est pas bon ;)


    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...



  • GilgameshGilgamesh Membre
    10:43 modifié #3
    Oui en effet mon chemin n'est pas relatif.

    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 :

    Ressources
    | -Levels
    | | -level1


    dans mon finder je trouve

    SimpleGame
    | +.....
    | +Levels
    | +level1


    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?
  • JegnuXJegnuX Membre
    10:43 modifié #4
    repertoire jaune = groupe = indépendant de l'arborescence Finder
    repertoire bleu = répertoire réel = répertoire du Finder
  • GilgameshGilgamesh Membre
    10:43 modifié #5
    Hum okok comment créer ou faire afficher cette différence?

    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
  • AliGatorAliGator Membre, Modérateur
    10:43 modifié #6
    Tu veux dire que tu rentres le path en dur "en supposant qu'il est relatif à  tel ou tel endroit" ?
    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
  • GilgameshGilgamesh Membre
    février 2010 modifié #7
    Alors la ....... je dis chapeau ....

    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.

    <3 <3   Ce qui vaut un Grand merci a vous tous .... MERCI.  <3 <3
Connectez-vous ou Inscrivez-vous pour répondre.