2011-10-09 23 views
6

Sadece anlayamadığım bir sorun var; Muhtemelen doğru bilgiye sahip olmadığım için.Cocos2D'de Döşenmiş Bir Haritası Kaydırma

Döşenmiş bir TMX haritanız var. Harita, ekran boyutundan daha büyüktür (fayanslar 32x32 pikseldir ve 100x100 fayans vardır). Yapmak istediğim, ekranı kaydırarak haritayı hareket ettirebilmektir.

Çeşitli öğreticilere çevrimiçi baktım ve paddle.m örneğini inceledim, ancak yine de çalışmaya başlayamıyorum. Genelde, bir harita etrafında kelepçeli ortalanmış bir hareketli grafiğe odaklanmam gereken tüm dersler ... Yine, yapmak istediğim, ekranı kaydırarak/kaydırarak haritayı hareket ettirebilmek; iPod'unuzda gezinirken veya fotoğrafınızı değiştirirken olduğu gibi.

Herkes yardımcı olabilir mi? İşte

benim ccTouchMoved kodudur

-(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); 
} 

Yukarıda kodu kullanarak ekranı çekin zaman ekranda görüyorum sorunu göstermek için: Öyle görünüyor ki ben Ekranın ortasına dokunursanız, Haritanın sol alt köşesi bu dokunmuş koordinatlara atlayacak ve dokunuşum kaldırılıncaya kadar dokunuşumla hareket edecektir. Haritanın sol alt köşesi her zaman dokunuşuma başladığım yere hareket edecektir. Harita hareket halindeyken, deli gibi yanıp söner ve aşırı derecede taşınırsa tamamen kaybolur.

Tekrar teşekkürler Hepsi çok beğendi. En İyi ve Saygılarımızla, hiro

cevap

6

Sorunun çözümünü buldum. Cocos2D topluluğunda, sadece organik olarak değil, yakınlaştırıp uzaklaştırmak için bir denetleyici yazmış çok parlak bir kişi var.

Link to Controller, example and preview movie

Sen alışkanlık touchBegan, Taşındı ve Son yöntemlerini yazmaya gerek; bu denetleyici sizin için her şeyi yapar.

Benim 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

O kod artık Cocos2d-uzantıları parçasıdır: https://github.com/cocos2d/cocos2d-iphone-extensions – drewish