Прокрутка мозаичной карты в Cocos2D - PullRequest
6 голосов
/ 09 октября 2011

У меня есть проблема, которую я просто не могу понять;вероятно, потому что у меня нет правильных знаний.

У меня есть карта TMX, созданная в Tiled.Карта больше, чем размер экрана (плитки имеют размер 32x32 пикселя, а размер плит составляет 100x100).Что я хочу сделать, так это уметь перемещать карту, проводя пальцем по экрану.

Я просмотрел различные онлайн-уроки и изучил пример paddle.m, но все еще не могу заставить его работать.Все учебники, с которыми я столкнулся, фокусируются на перемещении спрайта по центру по карте ... И снова я хочу уметь перемещать карту, проводя / сдвигая экран;очень похоже на прокрутку вашего iPod или перемещение изображения.

Может кто-нибудь помочь?

Вот мой код 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);
}

Для иллюстрации проблемы явидение на экране, когда я провожу пальцем по экрану, используя приведенный выше код: кажется, что если я коснусь центра экрана, левый нижний угол карты перейдет к этой координате касания и будет двигаться с моим касанием, пока мое касание не будет снято.Левый нижний угол карты всегда будет перемещаться туда, откуда я начинаю касаться.Кроме того, когда карта перемещается, она мигает, как сумасшедшая, и, если ее перемещать чрезмерно, полностью исчезает.

Еще раз спасибо всем, высоко ценится.С наилучшими пожеланиями, hiro

1 Ответ

6 голосов
/ 09 октября 2011

Я нашел решение проблемы. В сообществе Cocos2D есть очень умный человек, который написал контроллер, чтобы не только органично перемещаться, но и увеличивать и уменьшать масштаб.

Ссылка на контроллер, пример и предварительный просмотр фильма

Вам не нужно писать методы touchBegan, Moved и End; этот контроллер делает все за вас.

Мой инициатор

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