Iphone 滚动时场景的荒谬和急促的移动

Iphone 滚动时场景的荒谬和急促的移动,iphone,objective-c,cocos2d-iphone,box2d,Iphone,Objective C,Cocos2d Iphone,Box2d,当场景移动时,它会以一种荒谬和急促的方式移动(有时并不总是),导致恼怒。以下代码已用于移动场景: //NAVIGATION TOWARDS X AND Y WhenEver and how ever you want if (abs(diffX) > abs(diffY)) //Scroll in x { //CCLOG(@"yScrlFlag=%d",yScrlFlag);

当场景移动时,它会以一种荒谬和急促的方式移动(有时并不总是),导致恼怒。以下代码已用于移动场景:

//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)]];
                }

            }
//随时随地导航到X和Y
if(abs(diffX)>abs(diffY))//在x中滚动
{
//CCLOG(@“yScrlFlag=%d”,yScrlFlag);
如果(扩散>0)
{
xScrlFlag=1;
[self.parent运行操作:[CCMoveTo action with duration:round(-3112 self.parent.position.x)/950)
位置:ccp(-3112 self.position.x),self.parent.position.y)];
[resetPosition setIsEnabled:是];
[resetPosition runAction:[CCMoveTo Action with Duration:round(-3112 self.parent.position.x)/950)
位置:ccp((3112+self.position.x+70),resetPosition.position.y)];
//[self.parent.menuButton setIsEnabled:NO];
}
其他的
{
xScrlFlag=0;
[self.parent运行操作:[CCMoveTo action with duration:(-self.parent.position.x/950)
位置:ccp(0,自父位置y)];
//[resetPosition setIsEnabled:是];
[resetPosition runAction:[CCMoveTo actionWithDuration:(-self.parent.position.x/950)
位置:ccp(141,复位位置.位置y)];
}
}
else//在y中滚动
{                       
if(diffY<0)
{
[resetPosition setIsEnabled:是];
//CCLOG(@“移动父对象=%f”,(-self.position.y));
//CCLOG(@“移动前的self.parent.position=(%f,%f)”,self.parent.position.x,self.parent.position.y);
//CCLOG(@“移动前的resetPosition.position=(%f,%f)”,resetPosition.position.x,resetPosition.position.y);
[self.parent运行操作:[CCMoveTo action with duration:(-300 self.parent.position.y)/650)
位置:ccp(self.parent.position.x、(-self.position.y))];
//工作
[resetPosition runAction:[CCMoveTo actionWithDuration:(-300 self.parent.position.y)/650)
位置:ccp(resetPosition.position.x,280-(-self.position.y))];
//CCLOG(@“移动后的self.parent.position=(%f,%f)”,self.parent.position.x,self.parent.position.y);
//CCLOG(@“移动前的resetPosition.position=(%f,%f)”,resetPosition.position.x,resetPosition.position.y);
}
其他的
{   
//CCLOG(“yScrlFlag”);
yScrlFlag=0;
[self.parent运行操作:[CCMoveTo action with duration:(-300 self.parent.position.y)/950)
位置:ccp(自父位置x,0)];
[resetPosition runAction:[CCMoveTo Action with Duration:round(-300 self.parent.position.y)/949)
位置:ccp(重置位置.x位置,280)];
}
}

我想要的是在场景的运动中始终保持平滑。如代码所示,它在水平和垂直方向上移动场景。当场景中的一个(任意)
sprite
被激活,场景开始滚动时,就会出现基本问题。在这种情况下,它也会以一种不稳定的方式运行(可能比正常情况下更为如此)。有什么建议吗?

尝试按CCFollow操作,而不是手动操作:


很抱歉回答得太慢。几个小时前我看到了你的评论,但我今天感觉不太舒服。这真的很简单。如果您有一个希望视图保留的精灵,那么它就这么简单:
[self-runAction:[CCFollow-actionWithTarget:myShipImage]可能还有其他方法可以使用它,但这是我使用过的唯一方法。我希望这会有帮助。在代码中,myShipImage是一个精灵。它有一个box2d主体连接到它,但这并不重要。摄像机平稳地跟踪。如果您需要UI元素以及顶部其他任何不会移动或抖动的元素,请尝试将CCParallax节点添加为子节点,并使用视差比ccp(0.0,0.0)“尽快康复”,感谢您的响应“任何方式”,我会处理它。