2011-10-09 17 views
6

Tengo un problema que simplemente no puedo resolver; probablemente porque no tengo el conocimiento correcto.Desplazamiento de un mapa en mosaico en Cocos2D

Tengo un mapa TMX hecho en Tiled. El mapa es más grande que el tamaño de la pantalla (las teselas tienen 32x32 píxeles y hay mosaicos de 100x100). Lo que quiero hacer es poder mover el mapa deslizando la pantalla.

He revisado varios tutoriales en línea y examinado el ejemplo de paddle.m, pero aún no puedo hacerlo funcionar. Todos los tutoriales que me he encontrado se centran en mover un sprite centrado alrededor de un mapa ... De nuevo, lo que quiero hacer es mover el mapa deslizando/deslizando la pantalla; al igual que cuando se desplaza por su iPod o mueve una imagen.

¿Alguien puede ayudar?

Aquí está mi código 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); 
} 

Para ilustrar el problema que estoy viendo en la pantalla cuando deslizar la pantalla utilizando el código anterior: Parece que si toco el centro de la pantalla, el la esquina inferior izquierda del mapa saltará a esa coordenada tocada y se moverá con mi toque hasta que mi toque sea levantado. La esquina inferior izquierda del mapa siempre se moverá a donde empiezo mi toque. También mientras se mueve el mapa, parpadea como loco y si se mueve excesivamente, desaparece por completo.

Gracias de nuevo Todo, muy apreciado. Saludos cordiales, hiro

Respuesta

6

He encontrado la solución al problema. Hay una persona muy inteligente en la comunidad de Cocos2D que ha escrito un controlador para que no solo realice un recorrido panorámico de forma orgánica, sino que amplíe y aleje.

Link to Controller, example and preview movie

usted no necesita escribir sus métodos touchBegan, movido y finales; este controlador lo hace todo por ti.

Mi 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

que el código es ahora parte de los Cocos2d-extensions: https://github.com/cocos2d/cocos2d-iphone-extensions – drewish

Cuestiones relacionadas