在Cocos2d中使用视差滚动背景的问题?

时间:2013-04-07 18:12:17

标签: background cocos2d-iphone sprite parallax

我在我的cocos2d应用程序中使用Parallax滚动效果。我希望我的背景能够滚动;但是,我可能会错误地实现它,因为我的背景向左滚动,但在此之后,它再也不会回来了。

以下是代码:

- (void) setUpBackground
{

    CGSize winSize = [CCDirector sharedDirector].winSize;

    // Create the CCParallaxNode
    _backgroundNode = [CCParallaxNode node];
    [self addChild:_backgroundNode z:-2];

    // Create ths prites
    para1 = [CCSprite spriteWithFile:@"bg.png"];
    para2= [CCSprite spriteWithFile:@"shipp.png"];

    // Determine relative movement speeds for trees and background
    CGPoint treeSpeed = ccp(0.1, 0.1);
    CGPoint bgSpeed = ccp(0.5, 0.5);

    // Add children to the CCParallexNode
    [_backgroundNode addChild:para1 z:0
                parallaxRatio:treeSpeed
               positionOffset:ccp(160,winSize.height/2)];

    [_backgroundNode addChild:para2 z:1
                parallaxRatio:bgSpeed
               positionOffset:ccp(para1.contentSize.width* para1.scale, winSize.height/2)];

}

- (void)updateBackground:(ccTime)dt
{
    CGPoint backgroundScrollVel = ccp(-1000, 0);
    _backgroundNode.position = ccpAdd(_backgroundNode.position, ccpMult(backgroundScrollVel, dt));

}

1 个答案:

答案 0 :(得分:0)

您没有显示完整的代码,但我猜您可能会在其他地方安排updateBackground()

updateBackground()中,您设置背景的位置,其positionX正在减少超时。这就是它永远不会再回来的原因。

当背景到达场景边缘时,您必须计算整个场景的宽度,背景的宽度以及取消预定updateBackground()