我正在尝试创建一个具有平铺背景的场景,在该背景上将存在用户可以选择的可用级别,并且他/她将能够平移背景以查看所有级别。
因此,正如教程中的 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
谢谢!