2012-10-11 9 views
5

Podążam za przewodnikiem przekształcania mapy kafelków na wyświetlaczu siatkówki poprzez zmianę rozmiaru szerokości i wysokości na podwójny rozmiar i położenie obiektu. ale wynik na normalnym ekranie nie jest taka sama jak wyświetlania siatkówki normalnego wyświetlania jest poprawne, ale retina display nie jest poprawnaniewłaściwa pozycja mapy kafelków po przekonwertowaniu na ekran siatkówki

Jest zakaz siatkówki dachówka mapa enter image description here

i to jest siatkówka dachówka mapa enter image description here

Dodaję także przyrostek -hd do pliku siatkowego .tmx

Czy coś jest nie tak?

Odpowiedz

6

Ja również zaobserwowałem ten sam problem z mapą płytek cocos2D i ostatecznie rozwiązano przez podzielenie CC_CONTENT_SCALE_FACTOR. W trybie siatkówki daje 2.0.

CCTMXObjectGroup *objects = [tileMap objectGroupNamed:NN_TILE_MAP_OBJECT_LAYER]; 

CGSize s = [[CCDirector sharedDirector] winSize]; 

NSMutableDictionary *newtonPos = [objects objectNamed:NN_NEWTON_POS];   

if(newtonPos) 
{ 
    float x = ([[newtonPos valueForKey:@"x"] floatValue])/CC_CONTENT_SCALE_FACTOR(); 
    float y = [[newtonPos valueForKey:@"y"] floatValue]/CC_CONTENT_SCALE_FACTOR(); 

    MyGameScreen *p = (MyGameScreen*)self.parentLayer; 
    p.gameActor.position = ccp(x, y); 
} 

// użyłem tej funkcji można uzyskać akord ..

- (CGPoint)getTileCoordForPosition:(CGPoint)position 
{ 
    int maxTileCol = self.mapSize.height; 

    int x = ((position.x-self.position.x)/TILE_SIZE); 
    int y = maxTileCol - (((position.y)-self.position.y)/TILE_SIZE); 

    if(x >= TILE_IN_ROW) 
     x = TILE_IN_ROW - 1; 

    if(y >= TILE_IN_COL) 
     y = TILE_IN_COL - 1; 

    return ccp(x, y); 

} 
+2

Tak, tilemap koordy jest jednym z niewielu miejsc, gdzie Cocos2d nie automatycznie konwertować coords. – LearnCocos2D

+0

czym są te kody. gdzie powinienem umieścić te kody. – aratn0n

+0

@ aratn0n, aby uzyskać pozycję obiektów w warstwie obiektów. – Guru