开发者

Level Selector - Cocos2d

I'm trying to add 10 levels and 1 per page, which is 10 pages. How can I use this code to do that? Right now it only has two pages. Can anyone help?

-(id) init
{
    if ((self = [super init]))
    {
        CGSize s = [[CCDirector sharedDirector] winSize];

        self.isTouchEnabled = YES;
        isDragging = NO;
        lastX = 0.0f;
        xVel = 0.0f;
        contentWidth = s.width * 10.0;
        currentPage = 0;

        // main scrolling layer - add as child to this page layer.
        scrollLayer = [[[LevelScene alloc] init] autorelease];
        scrollLayer.anchorPoint = ccp(0, 1);
        scrollLayer.position = ccp(0, 0);
        [self addChild:scrollLayer];

        [self schedule:@selector(moveTick:) interval:0.02f];
    }
    return self;
}

- (void) moveTick: (ccTime)dt
{
    float friction = 0.99f;
    CGSize s = [[CCDirector sharedDirector] winSize];
    if (!isDragging)
    {
        // inertia
        xVel *= friction;
        CGPoint pos = scrollLayer.position;
        pos.x += xVel;

        // to stop at bounds
        pos.x = MAX(-s.width, pos.x);
        pos.x = MIN(0, pos.x);

        if (pos.x == -s.width)
        {
            xVel = 0;
            currentPage = 1;
        }
        if (pos.x == 0)
        {
            xVel = 0;
            currentPage = 0;
        }

        // snap to page by quickly moving to it: e.g.: xVel = 40
        if (fabsf(xVel) < 10)
        {
            if (pos.x < -s.width/2.0)
            {
                xVel = -40;
            }
            else {
                xVel = 40;
            }
        }

        scrollLayer.position = pos;
    }
    else {
        xVel = (scrollLayer.position.x - lastX)/2.0;
        lastX = scrollLayer.position.x;
    }
}

- (void) ccTouchesBegan: (NSSet *)touches withEvent: (UIEvent *)event
{
    isDragging = YES;
}

- (void) ccTouchesMoved: (NSSet *)touches withEvent: (UIEvent *)event
{
    CGSize s = [开发者_如何学编程[CCDirector sharedDirector] winSize];
    UITouch *touch = [touches anyObject];

    // simple position update
    CGPoint a = [[CCDirector sharedDirector] convertToGL:[touch previousLocationInView:touch.view]];
    CGPoint b = [[CCDirector sharedDirector] convertToGL:[touch locationInView:touch.view]];
    CGPoint nowPosition = scrollLayer.position;
    nowPosition.x += (b.x - a.x);
    nowPosition.x = MAX(-s.width, nowPosition.x);
    nowPosition.x = MIN(0, nowPosition.x);
    scrollLayer.position = nowPosition;
}

- (void) ccTouchesEnded: (NSSet *)touches withEvent: (UIEvent *)event
{
    isDragging = NO;
}

Any help is greatly appreciated! Thanks!


Jon, it seems like you're trying to recreate a UIScrollView in cocos2d. If that's the case, might I suggest using an existing open source project known as CCScrollLayer (HERE) Out of the box it should do everything you need to do and is pretty easy to extend to meet your needs better.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜