移动 SKNodes 和 SKSpriteNodes

Posted

技术标签:

【中文标题】移动 SKNodes 和 SKSpriteNodes【英文标题】:Moving SKNodes and SKSpriteNodes 【发布时间】:2014-02-09 20:30:45 【问题描述】:

我的游戏中有以下设置:

一个名为 _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】:

找到了! 我正在更改 _backgroundLayer SKnode 的比例,因此坐标不同。

【讨论】:

以上是关于移动 SKNodes 和 SKSpriteNodes的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIPanGestureRecognizer 连续移动 SKSpriteNode

仅当 SKSpriteNode 是 Fruit 类型时才用手指移动 SKSpriteNode(SKSpriteNode 的子类)

将 SKSpriteNode 移动到 SKTileMapNode 上的特定图块

SKSpriteNode 不会移动

将 SKSpriteNode 移动 Y - Swift 2 + SpriteKit

改变移动 SKSpriteNode 的方向?