2011-10-09 14 views
6

Ho un problema che non riesco a capire; probabilmente perché non ho la conoscenza corretta.Scorrimento di una mappa piastrellata in Cocos2D

Ho una mappa TMX realizzata in Tiled. La mappa è più grande della dimensione dello schermo (le tessere sono 32x32 pixel e ci sono tessere 100x100). Quello che voglio fare è essere in grado di spostare la mappa scorrendo lo schermo.

Ho esaminato vari tutorial online e ho esaminato l'esempio di paddle.m ma non riesco ancora a farlo funzionare. Tutte le esercitazioni che ho incontrato si concentrano sullo spostamento di uno sprite centrato su una mappa ... Ancora una volta, quello che voglio fare è essere in grado di spostare la mappa scorrendo/scorrendo lo schermo; molto simile quando si scorre l'iPod o si sposta un'immagine.

Qualcuno può aiutare?

Ecco il mio codice ccTouchMoved

-(void) ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    CGPoint touchPointMap = [touch locationInView: [touch view]]; 
    touchPointMap = [[CCDirector sharedDirector] convertToGL: touchPointMap]; 
    touchPointMap = [self convertToNodeSpace: touchPointMap]; 
    CCLOG(@"Touch Point Map %lf, %lf", touchPointMap.x, touchPointMap.y); 

    self.position = CGPointMake(touchPointMap.x, touchPointMap.y); 
} 

Per illustrare il problema che sto vedendo sullo schermo quando ho Sfiora lo schermo utilizzando il codice di cui sopra: Sembra che se tocco il centro dello schermo, il l'angolo in basso a sinistra della mappa salterà a quella coordinata toccata e si muoverà con il mio tocco fino a quando il mio tocco non sarà sollevato. L'angolo in basso a sinistra della mappa si sposta sempre verso il punto in cui inizio il mio tocco. Anche mentre la mappa viene spostata, lampeggia come un matto e se spostata eccessivamente, scompare del tutto.

Grazie ancora Tutto, molto apprezzato. Cordiali saluti, hiro

risposta

6

Ho trovato la soluzione al problema. C'è una persona molto brillante nella comunità di Cocos2D che ha scritto un controller non solo per eseguire panoramiche organiche, ma ingrandire e rimpicciolire.

Link to Controller, example and preview movie

Non avrete bisogno di scrivere i vostri metodi touchBegan, commosso e finali; questo controller fa tutto per te.

mio init

self.theMap = [CCTMXTiledMap tiledMapWithTMXFile: @"city_map.tmx"]; 
     self.bgLayer = [theMap layerNamed:@"bg"]; 

     // boundingRect is the area you wish to pan around 
     CGRect boundingRect = CGRectMake(0, 0, 32*50, 16*50); 

     theMap.anchorPoint = ccp(0,0); 
     [self addChild: theMap z: -1]; 

     // _controller is declared in the @interface as an object of CCPanZoomController 
     _controller = [[CCPanZoomController controllerWithNode:self] retain]; 
     _controller.boundingRect = boundingRect; 
     _controller.zoomOutLimit = _controller.optimalZoomOutLimit; 
     _controller.zoomInLimit = 2.0f; 

     [_controller enableWithTouchPriority:0 swallowsTouches:YES]; 
+1

Questo codice è ora parte dei Cocos2d-extensions: https://github.com/cocos2d/cocos2d-iphone-extensions – drewish