Перемещение SKNodes и SKSpriteNodes

У меня в игре такие настройки:

  • SKNode с именем _backgroundLayer
  • Повторяющаяся текстура, которую я добавил в _backgroundLayer 9 раз, чтобы увеличить фон.
  • SKSprite с именем levelButton, который добавляется к _backgroundLayer ([_backgroundLayer addChild:levelButton];).

Я использую levelButton.anchorPoint = CGPointMake(0.5, 0.5); чтобы у levelButton была точка привязки посередине. Теперь, когда я делаю 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 by Tutorials и кучу руководств и советов.

Пожалуйста помоги.

Теперь мой код следующий:

@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;
}

person μ4ρκ05    schedule 09.02.2014    source источник


Ответы (1)


Нашел! Я менял масштаб SKnode _backgroundLayer, поэтому координаты были другими.

person μ4ρκ05    schedule 10.02.2014