0

スワイプする 7 つのレイヤーがあるメニューを読み込んでいます。最初のロードでは、スワイプは 60 fps でスムーズですが、シーンをポップしてもう一度プッシュすると、スワイプは非常に遅くなりますが、アプリは 60 fps を表示し、ccTouchesMoved は最初のロードとほぼ同じ間隔で呼び出されます。

各レイヤーに、いくつかの静的 CCSprite と CCMenu を追加します。

すべてのアイテムの割り当てが解除され、iPad 3 でアプリをテストしています (速度はそれほど問題ではありません)。

原因は設定部分にあると思われ、解決策を見つけたいと思います。それが役立つ場合、ここに私のタッチ方法があります:

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView: [touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    //Swipe Detection Part 1
    firstTouch = location;

}


-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{

    NSSet *allTouches = [event allTouches];
    UITouch * touch = [[allTouches allObjects] objectAtIndex:0];
    CGPoint location = [touch locationInView: [touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    CGSize winSize = [[CCDirector sharedDirector] winSize];

    for(int i=0;i<[layerList count];i++)
    {

        [[layerList objectAtIndex:i] setPosition:CGPointMake((i-currentLayer)*winSize.width + (location.x - firstTouch.x),0) ];
    }
}

-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSSet *allTouches = [event allTouches];
    UITouch * touch = [[allTouches allObjects] objectAtIndex:0];
    CGPoint location = [touch locationInView: [touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    //Swipe Detection Part 2
    lastTouch = location;

    //Swipe Detection Part 2
    lastTouch = location;

    //Minimum length of the swipe
    float swipeLength = ccpDistance(firstTouch, lastTouch);

    //Check if the swipe is a left swipe and long enough
    if (firstTouch.x > lastTouch.x && swipeLength > 60) {
        [self doStuffLeft];
    }
    else if (firstTouch.x < lastTouch.x && abs(swipeLength) > 60) {
        [self doStuffRight];
    }



}
4

1 に答える 1

0

気がつけば、[CCDirector sharedInstance] が一時停止していました。

于 2012-09-17T12:17:23.140 に答える