移动SKNodes和SKSpriteNodes

时间:2014-02-09 20:30:45

标签: objective-c sprite-kit skspritenode

我在游戏中有以下设置:

  • 名称为_backgroundLayer
  • 的SKNode
  • 重复纹理,我已经添加到_backgroundLayer 9次以制作更大的背景
  • 一个名为levelButton的SKSprite,它被添加到_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游戏。

请帮忙。

现在,我的代码如下:

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

1 个答案:

答案 0 :(得分:0)

发现它! 我正在改变_backgroundLayer SKnode的比例,因此坐标不同。