2014-01-16 6 views
4

나는 아이폰 OS에 대한 SpriteKit 게임을 개발하고 있어요 내가 세로 응용 프로그램을 만들고 싶어하지만 나는 레이 Wenderlich 튜토리얼 (스페이스 슈터 SpriteKit)시차 스크롤 스프라이트 키트

를 읽고 게임을 만들 배우고 모드에서 배경을 위에서 아래로 옮기고 싶습니다.

#pragma mark - TBD - Game Backgrounds 
    //1 
    NSArray *parallaxBackgroundNames = @[@"bg_galaxy.png", @"bg_planetsunrise.png", 
             @"bg_spacialanomaly.png", @"bg_spacialanomaly2.png"]; 
    CGSize planetSizes = CGSizeMake(200.0, 200.0); 
    //2 
    _parallaxNodeBackgrounds = [[FMMParallaxNode alloc] initWithBackgrounds:parallaxBackgroundNames 
                     size:planetSizes 
                 pointsPerSecondSpeed:10.0]; 
    //3 
    _parallaxNodeBackgrounds.position = CGPointMake(size.width/2.0, size.height/2.0); 
    //4 
    [_parallaxNodeBackgrounds randomizeNodesPositions]; 

    //5 
    [self addChild:_parallaxNodeBackgrounds]; 

    //6 
    NSArray *parallaxBackground2Names = @[@"bg_front_spacedust.png",@"bg_front_spacedust.png"]; 
    _parallaxSpaceDust = [[FMMParallaxNode alloc] initWithBackgrounds:parallaxBackground2Names 
                   size:size 
               pointsPerSecondSpeed:25.0]; 
    _parallaxSpaceDust.position = CGPointMake(0,0); 
    [self addChild:_parallaxSpaceDust]; 

편집 :

내가 위에서 아래로 이동할 수 있어요하지만이 부드럽게 움직 나던.

#pragma mark - TBD - Game Backgrounds 
    for (int i = 0; i < 2; i++) { 
     SKSpriteNode * bg = [SKSpriteNode spriteNodeWithImageNamed:@"background"]; 
     bg.anchorPoint = CGPointZero; 
     bg.position = CGPointMake(0, i * bg.size.height); 
     bg.name = @"background"; 
     [self addChild:bg]; 
    } 


    -(void)update:(NSTimeInterval)currentTime { 
     [self enumerateChildNodesWithName:@"background" usingBlock: ^(SKNode *node, BOOL *stop) { 
      SKSpriteNode *bg = (SKSpriteNode *) node; 
      bg.position = CGPointMake(bg.position.x, bg.position.y-5); 

      if (bg.position.y <= -bg.size.height) { 
       bg.position = CGPointMake(bg.position.x , bg.position.y + bg.size.height * 2); 
      } 
     }]; 
    } 
+2

SO 사용자는 코드를 작성하지 않습니다. 먼저 직접 구현하려고 시도하고, 문제가 발생하면 시도한 내용과 특정 문제 또는 작업을 이해하지 못한 부분을 알려주십시오. – LearnCocos2D

+0

필자는 위에서 아래로 성공적으로 만들었지 만, Ray 튜토리얼에서 가로 모드처럼 부드럽게 움직이지는 않습니다. 코드를 업데이트하겠습니다. –

답변

2

코드를 테스트하지 않았지만 프레임 당 +5 포인트가 너무 많아서 배경 노드를 원활하게 이동할 수 없습니까? 당신에게 당신이 (배경으로 플레이어의 위치에 따라, 예를 들어) 동적 스프라이트를 이동하지 않으려면

@implementation GameScene 
{ 
    NSTimeInterval _lastUpdateTime; 
    NSTimeInterval _deltaTime;   
} 

-(void)update:(NSTimeInterval)currentTime { 
    if (_lastUpdateTime) { 
     _deltaTime = currentTime - _lastUpdateTime; 
    } else { 
     _deltaTime = 0; 
    } 
    _lastUpdateTime = currentTime; 

    CGPoint bgVelocity = CGPointMake(0.0, -50.0); // Current speed is 50 points per second 
    CGPoint amtToMove = CGPointMake(bgVelocity.x * _deltaTime, bgVelocity.y * _deltaTime); 

    [self enumerateChildNodesWithName:@"background" usingBlock: ^(SKNode *node, BOOL *stop) { 
     SKSpriteNode *bg = (SKSpriteNode *) node; 
     bg.position = CGPointMake(bg.position.x+amtToMove.x, bg.position.y+amtToMove.y); 

     if (bg.position.y <= -bg.size.height) { 
      bg.position = CGPointMake(bg.position.x , bg.position.y + bg.size.height * 2); 
     } 
    }]; 
+0

감사합니다. 스크롤하는 배경을 특정 시간처럼 스크롤하는 방법은 무엇입니까? 그런데 1 ~ 2 분 정도의 시간이 소요됩니다. 코드에서 어떻게 적용 할 수 있습니까? –

+0

다른 질문의 주제입니다. –

+1

몇 시간 동안 수직 스크롤링 배경을 만들려고 노력했습니다. 나는 그것을 제대로 보지 못했을 것 같다. 귀하의 코드에 감사드립니다. 실제로 제가 쓰고있는 것을 바로 잡는 데 도움이되었습니다. +1 –

0

및 : 각 프레임을 이동 점의 양을 계산하려고 그들이 고정 된 거리와 시간에 스크롤을 원한다면, 왜 그렇게 간단한 일을하지 않겠습니까?!

-(void)update:(NSTimeInterval)currentTime { 
    [self enumerateChildNodesWithName:@"background" usingBlock: ^(SKNode *node, BOOL *stop) { 
      [node runAction:[SKAction moveBy:CGVectorMake(0, <distance>) duration:<time>]; 
    } 
} 

<distance><time>은 당신이 원하는 속도/시간의 종류에 따라 설정합니다 값입니다.