2014-01-24 2 views
1

바둑판 식 배경 위에 사용자가 선택할 수있는 사용 가능한 레벨이 있고 그 순서대로 배경을 팬 할 수있는 장면을 만들려고합니다. 모든 레벨을 볼 수 있습니다.바둑판 식 배경 : 모든 스프라이트가 나타나지 않습니다.

자습서 별 iOS 게임에서 제안한대로 모든 타일뿐만 아니라 다른 것들도 포함하는 SKNode *_backgroundLayer을 만들었습니다. 이렇게하면 SKNode을 움직일 수있게되었고, 모든 아이들은 그걸 가지고 움직일 수있게되었습니다. 큰. 자, 내 타일은 450x450 pixels입니다. 따라서 _backgroundLayer에 9 개의 타일이 필요하다고 계산했고, 아래 코드를 사용하여 타일을 추가했습니다.

이해가 안되는 점은 내 화면에 나타나야하는 첫 번째 두 타일을로드하고 위치를 지정하고 나머지는로드하지 않는 것입니다. 시뮬레이터의 "x 노드"에는 노드가 9 개가 아니라 2 개의 노드가 있다고합니다. 처음에는 노드가 내 아이폰 화면에 있지 않기 때문에 노드를 만든 다음 제거합니까? 나는 그것을 얻지 않는다. 이 문제를 해결하고 해결하는 방법에 대한 아이디어가 있습니까?

업데이트 : 내 iPad Retina에서 9 대신 6 개의 노드가 생겨서 왜 아래의 코드에서 요청할 때만 화면에 표시 될 수있는 노드가로드되고 유지되는 것입니까?

UPDATE2 : NSLog (@ "% d", _backgroundLayer.children.count); 9를 반환합니다. 나는 UIPanGestureRecognizer에 관한 일을 잘못하고 있다고 확신한다. 내가 잘못된 층을 옮기고 있습니까?

#import "LevelSelectScene.h" 
#import "TurtleWorldSubScene.h" 

@interface LevelSelectScene() 
@property (nonatomic, strong) SKSpriteNode *selectedNode; 
@end 

@implementation LevelSelectScene 
{ 
    SKNode *_backgroundLayer; 
} 

-(id)initWithSize:(CGSize)size { 
    if (self = [super initWithSize:size]) { 
     /* Setup your scene here */ 

     _backgroundLayer = [SKNode node]; 
     _backgroundLayer.name = @"backgroundLayer"; 
     [self addChild:_backgroundLayer]; 

     SKTexture *backgroundTexture = [SKTexture textureWithImageNamed:@"levelSelect"]; 
     int textureID = 0; 

     for (int i = 0; i<3; i++) { 
      for (int j = 0; j<3; j++) { 

       SKSpriteNode *background = [SKSpriteNode spriteNodeWithTexture:backgroundTexture]; 

       background.anchorPoint = CGPointZero; 
       background.position = CGPointMake((background.size.width)*i, (background.size.height)*j); 
       background.zPosition = 0; 
       background.name = [NSString stringWithFormat:@"background%d", textureID]; 

       NSLog(@"x:%f, y:%f", background.position.x, background.position.y); 

       textureID++; 

       [_backgroundLayer addChild:background]; 
      } 
     } 

     NSLog(@"%d", _backgroundLayer.children.count); 

     //[TurtleWorldSubScene displayTurtleWorld:self]; 

    } 
    return self; 
} 

- (void)didMoveToView:(SKView *)view { 
    UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; 
    [[self view] addGestureRecognizer:gestureRecognizer]; 
} 

- (void)handlePan:(UIPanGestureRecognizer *)recognizer { 

    CGPoint translation = [recognizer translationInView:self.view]; 
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, 
             recognizer.view.center.y + translation.y); 
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; 

    if (recognizer.state == UIGestureRecognizerStateBegan) { 

    } else if (recognizer.state == UIGestureRecognizerStateChanged) { 

    } else if (recognizer.state == UIGestureRecognizerStateEnded) { 

    } 

} 
@end 

고마워요!

답변

0

코드는 정상입니다. 디버그 레이블의 노드 수는 장면 그래프의 총 수가 아닌 그려지는 노드 수를 나타냅니다. 실제 노드 수는 _backgroundLayer.children.count을 확인하십시오.

+0

하지만 왜 내가 배경 레이어를 팬 할 때 나머지 스프라이트는 보지 못합니까? 9 개의 스프라이트가 모두 있기 때문에 배경 레이어 (sknode)는 1500x1500 픽셀과 같지 않아야합니까? 다른 배경 스프라이트 대신 검은 색 배경이 보입니다. 아마 패닝에 뭔가 잘못하고있는 걸까요? 그러나 배경 레이어를 팬합니다. 코드를 업로드 할 것입니다. 어떤 아이디어? Btw, 답장을 보내 주셔서 감사합니다! –

+0

_backgroundLayer.children.count는 무엇을 반환합니까? 9를 반환하면 노드가 단순히 올바른 위치에 그려지지 않습니다. 속성을 확인하십시오 : position, zPosition, hidden, anchorPoint, xScale, yScale, 프레임 및 크기. – LearnCocos2D

+0

UPDATE2 : NSLog (@ "% d", _backgroundLayer.children.count); 9를 반환합니다. 나는 UIPanGestureRecognizer에 관한 일을 잘못하고 있다고 확신한다. 내가 잘못된 층을 옮기고 있습니까? –

관련 문제