1

我正在尝试创建一个具有平铺背景的场景,在该背景上将存在用户可以选择的可用级别,并且他/她将能够平移背景以查看所有级别。

因此,正如教程中的 iOS 游戏中所建议的那样,我创建了一个SKNode *_backgroundLayer可以容纳所有瓷砖以及任何其他可以放在上面的东西。这将允许我SKNode四处移动,它的所有孩子都会随之移动。伟大的。现在,我的图块450x450 pixels如此计算,我需要 9 个图块,_backgroundLayer我使用下面的代码添加它们。

我不明白的是:它加载并定位了必须出现在我的屏幕上的前两个图块,它似乎没有加载其余部分!在模拟器的“x 节点”中,它说它有 2 个节点,而不是 9 个。它是否创建节点然后删除它们,因为它们最初不在我的 iPhone 屏幕内?我不明白。关于如何解决这个问题并解决它的任何想法?

更新:在我的 iPad Retina 中,我得到 6 个节点而不是 9 个,那么为什么它只加载和保留可以在屏幕上显示的节点,而不是我在下面的代码中要求的所有节点?

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

谢谢!

4

1 回答 1

0

代码很好。调试标签中的节点数是指绘制的节点数,而不是场景图中的总数。检查_backgroundLayer.children.count实际的节点数。

于 2014-01-24T10:57:51.710 回答