Абсурдное и резкое движение сцены при прокрутке - PullRequest
1 голос
/ 16 июня 2011

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

//NAVIGATION TOWARDS X AND Y WhenEver and how ever you want

            if (abs(diffX) > abs(diffY))    //Scroll in x
            {
                //CCLOG(@"yScrlFlag=%d",yScrlFlag);
                if(diffX > 0)
                {
                    xScrlFlag=1;
                    [self.parent runAction:[CCMoveTo actionWithDuration:round(-(-3112-self.parent.position.x)/950)
                                                               position:ccp((-3112-self.position.x),self.parent.position.y)]];
                    [resetPosition setIsEnabled:YES];
                    [resetPosition runAction:[CCMoveTo actionWithDuration:round(-(-3112-self.parent.position.x)/950) 
                                                                 position:ccp((3112+self.position.x+70),resetPosition.position.y)]];
                    //[self.parent.menuButton setIsEnabled:NO];
                }
                else
                {
                    xScrlFlag=0;                        
                    [self.parent runAction:[CCMoveTo actionWithDuration:(-self.parent.position.x/950) 
                                                               position:ccp(0,self.parent.position.y)]];
                    //[resetPosition setIsEnabled:YES];
                    [resetPosition runAction:[CCMoveTo actionWithDuration:(-self.parent.position.x/950) 
                                                                 position:ccp(141,resetPosition.position.y)]];
                }
            }
            else  //Scroll in y
            {                       
                if(diffY < 0)
                {
                    [resetPosition setIsEnabled:YES];
                    //CCLOG(@"MOVING PARENT BY=%f",(-self.position.y));
                    //CCLOG(@"self.parent.position BEFORE MOVE=(%f, %f)",self.parent.position.x,self.parent.position.y);
                    //CCLOG(@"resetPosition.position BEFORE MOVE=(%f, %f)",resetPosition.position.x,resetPosition.position.y);
                    [self.parent runAction:[CCMoveTo actionWithDuration:(-(-300-self.parent.position.y)/650) 
                                                               position:ccp(self.parent.position.x,(-self.position.y))]];

                    //Working
                    [resetPosition runAction:[CCMoveTo actionWithDuration:(-(-300-self.parent.position.y)/650) 
                                                                 position:ccp(resetPosition.position.x, 280-(-self.position.y))]];

                    //CCLOG(@"self.parent.position AFTER MOVE=(%f, %f)",self.parent.position.x,self.parent.position.y);
                    //CCLOG(@"resetPosition.position BEFORE MOVE=(%f, %f)",resetPosition.position.x,resetPosition.position.y);
                }
                else
                {   
                    //CCLOG(@"yScrlFlag");
                    yScrlFlag=0;
                    [self.parent runAction:[CCMoveTo actionWithDuration:(-(-300-self.parent.position.y)/950) 
                                                               position:ccp(self.parent.position.x,0)]];

                    [resetPosition runAction:[CCMoveTo actionWithDuration:round(-(-300-self.parent.position.y)/949) 
                                                                 position:ccp(resetPosition.position.x,280)]];
                }

            }

Я хочу, чтобы плавность движения сцены всегда была плавной.Как показывает код, он перемещает сцену в горизонтальном и вертикальном направлении.И основная проблема возникает, когда один (любой) sprite в сцене мобилизован, и сцена начинает прокручиваться.В этом случае он также ведет себя резко (возможно, в большей степени, чем в обычном случае).Есть предложения?

1 Ответ

2 голосов
/ 16 июня 2011

Попробуйте CCFollow вместо того, чтобы делать все вручную:

CCFollow

...