如何在Cocos2d中实现相机飞越

时间:2013-04-04 03:41:43

标签: iphone ios objective-c cocos2d-iphone

假设我游戏中关卡的宽度是屏幕宽度的三倍,我的播放器从最左边开始。我应该如何从这个级别开始的右边缘开始实现相机飞越以滚动整个世界,以便玩家知道未来会发生什么?

我在这里发现这篇文章http://www.cocos2d-iphone.org/forum/topic/9568似乎很有用,借用了代码块并将其放在我的GameWorldLayer中,但它没有用。我基本上只看到黑屏。怎么了?什么是更好的实现方式?

-(void)visit {
    CGSize screenDims = [[CCDirector sharedDirector] winSizeInPixels];
    CGPoint camPos = gameCamera.position;
    float camZoom = gameCamera.zoom;
    [[CCDirector sharedDirector] setProjection:kCCDirectorProjectionCustom];

    //now set your projection
    kmGLMatrixMode(KM_GL_PROJECTION);
    //save current projection state
    kmGLPushMatrix();
    kmGLLoadIdentity();

    kmMat4 orthoMat;
    kmMat4OrthographicProjection(&orthoMat,
         camPos.x -screenDims.width/(2*camZoom),
         camPos.x +screenDims.width/(2*camZoom),
         camPos.y +screenDims.height/(2*camZoom),
         camPos.y -screenDims.height/(2*camZoom),
         -1000,
         1000);

    kmGLMatrixMode(KM_GL_MODELVIEW);
    kmGLLoadIdentity();

    [super visit];

    //put it back
    kmGLMatrixMode(KM_GL_PROJECTION);
    kmGLPopMatrix();
    kmGLMatrixMode(KM_GL_MODELVIEW);
    kmGLLoadIdentity();
}

1 个答案:

答案 0 :(得分:0)

所有这一切都是为了让你想要的东西变得复杂。将图层放在开头水平的末尾,然后简单地将其移动到开头,即

[layer runAction:[CCMoveTo actionWithDuration:10 position:ccp(starty, startx)]];

如果您希望它为“飞越”所需的时间为20,而且该位置是起始位置