在SpriteKit中实现无限/重复滚动世界的最佳方法是什么?

时间:2014-03-18 06:13:13

标签: ios iphone uiscrollview sprite-kit

移动角色时,它必须保持在屏幕中心的矩形内,所有其他游戏对象必须滚动。

但是当你到达世界的边缘时,它必须重复。 角色可以向任何方向移动。

2 个答案:

答案 0 :(得分:3)

你必须将世界划分为3个部分。第1节和第3节必须相同。如果到达世界末日(第3节),您可以切换回第1部分。

http://www.youtube.com/watch?v=-FX-tFks5pg

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

答案 1 :(得分:1)

-(id)initWithSize:(CGSize)size {    
    if (self = [super initWithSize:size]) {
        _background = [SKSpriteNode spriteNodeWithImageNamed:@"background"];
        _background.anchorPoint = CGPointMake(0, 0);
        _background.name = @"background";
        _background.position = CGPointMake(0, 0);
        [self addChild:_background];
}
-(void)update:(CFTimeInterval)currentTime {
    /* Called before each frame is rendered */
    if (_lastUpdateTime) {
        _deltaTime = currentTime - _lastUpdateTime;
    } else {
        _deltaTime = 0;
    }
    _lastUpdateTime = currentTime;
    if (_deltaTime > 1) {
        _deltaTime = 1.0 / 60.0;
    }
    [self enumerateChildNodesWithName:@"background" usingBlock:^(SKNode *node, BOOL *stop)     {
        node.position = CGPointMake(node.position.x - backgroundMoveSpeed * _deltaTime, node.position.y);
        if (node.position.x < - (node.frame.size.width + 100)) {
            [node removeFromParent];
        }
    }];
    if (_background.position.x < -bound) { 
        //bound = 500
        SKSpriteNode *temp = [SKSpriteNode spriteNodeWithImageNamed:@"background"];
        temp.anchorPoint = CGPointMake(0, 0);
        temp.name = @"background";
        temp.position = CGPointMake(_background.position.x + _background.frame.size.width, 0);
        [self addChild:temp];
        _background = temp;
    }

背景图片的大小为2048x640,因此您应该根据背景图片的大小更改边界。