4

我很好奇如何在 cocos2d 中创建无限的背景。例如,假设我正在构建一个应用程序,其中一个人从左到右运行,我希望他无限运行。那么在那种情况下,我必须有一个无尽的背景,这样这个人才能继续奔跑。我一直在搜索这件事,但没有发现任何真正有效的东西。

非常感谢任何类型的建议、答案和提示。

谢谢

4

4 回答 4

5

尝试这个:

 #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
 #define MM_BG_SPEED_DUR       ( IS_IPAD ? (6.0f) : (2.0f) )



-(void)onEnter
{
    [super onEnter];
    [self initBackground];

    [self schedule: @selector(tick:)];
}


-(void)initBackground
{
   NSString *tex = @"BG/Background.png";//[self getThemeBG];

    mBG1 = [CCSprite spriteWithFile:tex];
    mBG1.position = ccp(s.width*0.5f,s.height*0.5f);
    [self addChild:mBG1 z:LAYER_BACKGROUND];

    mBG2 = [CCSprite spriteWithFile:tex];
    mBG2.position = ccp(s.width+s.width*0.5f,s.height*0.5f);

    mBG2.flipX = true;
    [self addChild:mBG2 z:LAYER_BACKGROUND];

}


-(void)scrollBackground:(ccTime)dt
{
    CGSize s = [[CCDirector sharedDirector] winSize];

    CGPoint pos1 = mBG1.position;
    CGPoint pos2 = mBG2.position;

    pos1.x -= MM_BG_SPEED_DUR;
    pos2.x -= MM_BG_SPEED_DUR;


    if(pos1.x <=-(s.width*0.5f) )
    {
        pos1.x = pos2.x + s.width;
    }

    if(pos2.x <=-(s.width*0.5f) )
    {
        pos2.x = pos1.x + s.width;
    }

    mBG1.position = pos1;
    mBG2.position = pos2;

}

-(void)tick:(ccTime)dt
{
    [self scrollBackground:dt];
}
于 2013-02-27T05:41:30.917 回答
2

最简单的方法是包含两个无缝融合在一起的背景图像。(CCSprite 可以正常工作)在您的更新方法中,一旦第一个背景完全离开屏幕,就将其移回屏幕的另一侧,紧邻第二个背景,并不断移动两个背景图像。对第二个背景也重复此过程。

于 2013-02-26T22:13:26.290 回答
1

CCTMXTiledMap可以帮助你,但恐怕你必须处理地图的结尾并手动添加另一个。查看本教程如何在横向滚动游戏中使用平铺地图,希望对您有用:

http://www.raywenderlich.com/15230/how-to-make-a-platform-game-like-super-mario-brothers-part-1

于 2013-02-26T22:22:31.317 回答
0

试试这个。它很容易实现并且运行良好。只需按照阅读我的教程进行操作即可。

于 2013-02-28T01:08:04.270 回答