У меня есть следующие настройки в моей игре:Перемещения SKNodes и SKSpriteNodes
- An SKNode с именем _backgroundLayer
- Повторяющиеся текстуры, которые я добавил к _backgroundLayer 9 раза, чтобы сделать больший фон
- SKSprite с именем levelButton, который добавляется к _backgroundLayer ([_groundgroundLayer addChild: levelButton];).
Я использую levelButton.anchorPoint = CGPointMake (0,5, 0,5); для того, чтобы уровеньButton имел опорную точку в середине. Теперь, когда я делаю levelButton.position = CGPointMake (0, 0); и _backgroundLayer.position = CGPointMake (0, 0); уровень levelButton правильно расположен в (0, 0), а его средний - в левом нижнем углу экрана. Так все в порядке. Однако, если я перемещаю levelButton в levelButton.position = CGPointMake (100, 0); и _backgroundLayer.position = CGPointMake (-100, 0) ;, как я покажу ниже, levelButton должен по-прежнему иметь свою середину в (0,0) или левый нижний угол экрана. Однако это не так, и levelButton более прав, его что-то вроде 50 пикселей вправо. Но этого не должно быть, так как я перемещаю _backgroundLayer 100 влево (-100) и _levelButton 100 вправо (100). Он должен был остаться на месте.
Это основные вещи, которые я не понимаю, почему они не работают так, как должны. Я, вероятно, делаю что-то неправильно, но я не могу его найти, хотя я читал iOS Games по учебникам и кучу учебников и советов.
Пожалуйста, помогите.
Теперь мой код выглядит следующим образом:
@implementation LevelSelectScene
{
SKNode *_backgroundLayer;
}
-(id)initWithSize:(CGSize)size {
/* Setup your scene here */
_backgroundLayer = [SKNode node];
_backgroundLayer.name = @"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];
textureID++;
[_backgroundLayer addChild:background];
}
}
[self addChild:_backgroundLayer];
SKSpriteNode * levelButton = [SKSpriteNode spriteNodeWithImageNamed:@"lock"];
levelButton.anchorPoint = CGPointMake(0.5, 0.5);
levelButton.position = CGPointMake(100, 0); //IMPORTANT
levelButton.zPosition = 150;
levelButton.name = @"test";
[_backgroundLayer addChild:levelButton];
_backgroundLayer.position = CGPointMake(-100, 0); //IMPORTANT
}
return self;
}