программирование игр для iphone: проблема с черными линиями tilemap

когда я запускаю свое приложение на своем iphone (не на симуляторе), странные черные линии появляются только тогда, когда я начинаю перемещать карту. Итак, вот мой код для перемещения тайловой карты:

- (void)handlePanFrom:(UIPanGestureRecognizer *)recognizer {

    if (recognizer.state == UIGestureRecognizerStateBegan) {    

        CGPoint touchLocation = [recognizer locationInView:recognizer.view];
        touchLocation = [[CCDirector sharedDirector] convertToGL:touchLocation];
        touchLocation = [self convertToNodeSpace:touchLocation];                

    } else if (recognizer.state == UIGestureRecognizerStateChanged) {    

        CGPoint translation = [recognizer translationInView:recognizer.view];
        translation = ccp(translation.x, -translation.y);
        CGPoint newPos = ccpAdd(self.position, translation);
        self.position = [self boundLayerPos:newPos];  
        [recognizer setTranslation:CGPointZero inView:recognizer.view];    

    } else if (recognizer.state == UIGestureRecognizerStateEnded) {

        float scrollDuration = 0.2;
        CGPoint velocity = [recognizer velocityInView:recognizer.view];
        CGPoint newPos = ccpAdd(self.position, ccpMult(ccp(velocity.x, velocity.y * -1), scrollDuration));
        newPos = [self boundLayerPos:newPos];

        [self stopAllActions];
        CCMoveTo *moveTo = [CCMoveTo actionWithDuration:scrollDuration position:newPos];            
        [self runAction:[CCEaseOut actionWithAction:moveTo rate:1]];            

    }     
}

person hugo    schedule 28.08.2011    source источник


Ответы (1)


Накопление дельт приведет к появлению артефактов из-за проблем с округлением с плавающей запятой. Вы получите лучшие результаты, разместив плитки в фиксированном месте в пространстве и переместив все с помощью аффинного преобразования. Промежуточным решением является накопление одного абсолютного смещения и добавление его к начальной позиции каждой плитки (вам, очевидно, придется где-то кэшировать каждую начальную позицию).

person Marcelo Cantos    schedule 28.08.2011
comment
ну я нуб я не понимаю как это сделать - person hugo411; 28.08.2011
comment
@ the1nz4ne: Тогда придерживайтесь второго предложенного мной подхода. Просто запомните, где каждая плитка начала свою жизнь, и сохраните аккумулятор смещения, который изначально равен нулю. Каждый раз, когда регистрируется событие движения, добавляйте движение в аккумулятор и устанавливайте каждую плитку в исходное положение плюс аккумулятор. - person Marcelo Cantos; 29.08.2011