Ios 如何在Sprite工具包中显示包含所有子节点的父节点?

Ios 如何在Sprite工具包中显示包含所有子节点的父节点?,ios,ios7,sprite-kit,nodes,Ios,Ios7,Sprite Kit,Nodes,我在将所有精灵节点添加到单个父节点,然后在屏幕上显示该父节点内部的所有子节点时遇到问题 我当前的工作方法是简单地获取添加到sprite方法中的子对象,并在-(id)initWithSize:(CGSize)size方法中调用它 因此,它看起来和工作原理如下: 菜单中的代码。m: - (id)initWithSize:(CGSize)size{ if(self = [super initWithSize:size]){ _skyColor = [SKColor color

我在将所有精灵节点添加到单个父节点,然后在屏幕上显示该父节点内部的所有子节点时遇到问题

我当前的工作方法是简单地获取添加到sprite方法中的子对象,并在
-(id)initWithSize:(CGSize)size
方法中调用它

因此,它看起来和工作原理如下:

菜单中的代码。m:

- (id)initWithSize:(CGSize)size{
    if(self = [super initWithSize:size]){

        _skyColor = [SKColor colorWithRed:25.0/255.0 green:171.0/225 blue:1 alpha:1];

        [self setBackgroundColor:_skyColor];

        [self nameMovement];
        [self playButtonPushed];
        [self groundMovement];
        [self cloudMovement];
    }

    return self;
}
- (id)initWithSize:(CGSize)size{
    if(self = [super initWithSize:size]){

        _skyColor = [SKColor colorWithRed:25.0/255.0 green:171.0/225 blue:1 alpha:1];

        [self setBackgroundColor:_skyColor];

        SKNode *_moving = [SKNode node];

        [self addChild:_moving];
    }

    return self;
}
- (void)groundMovement{
    //Ground texture declaration
    groundTexture = [SKTexture textureWithImageNamed:@"Ground"];
    groundTexture.filteringMode = SKTextureFilteringNearest;

    //SKAction Declarations
    groundSpriteMovement = [SKAction moveByX:-groundTexture.size.width/2 y:0 duration:0.04 * 100];
    resetgroundSpriteMovement = [SKAction moveByX:groundTexture.size.width/2 y:0 duration:0];
    repeatForevergroundSpriteMovement = [SKAction repeatActionForever:[SKAction sequence:@[groundSpriteMovement, resetgroundSpriteMovement]]];

    //Ground Sprite declaration
    groundSprite = [SKSpriteNode spriteNodeWithTexture:groundTexture];
    groundSprite.anchorPoint = CGPointMake(0, 0);
    groundSprite.position = CGPointMake(0, 0);
    [groundSprite runAction:repeatForevergroundSpriteMovement];

    [_moving addChild:groundSprite];

}

下面的代码运行得很好,但我希望只有一个节点包含groundMovement、cloudMovement等方法所包含的所有子节点

我尝试过创建一个名为_moving的新SKNode,然后对其他保持精灵移动的方法执行此操作

下面是groundMovement方法,我尝试在其中实现我创建的父节点_moving(我唯一做的更改是在底部)。同样,当我这样做时,我通过添加
\u moving=[SKNode node],在新的initWithSize中初始化了SKNode
声明SKNode并尝试绘制父节点的新initWithSize(SKNode*\u移动在.h文件中):

- (id)initWithSize:(CGSize)size{
    if(self = [super initWithSize:size]){

        _skyColor = [SKColor colorWithRed:25.0/255.0 green:171.0/225 blue:1 alpha:1];

        [self setBackgroundColor:_skyColor];

        [self nameMovement];
        [self playButtonPushed];
        [self groundMovement];
        [self cloudMovement];
    }

    return self;
}
- (id)initWithSize:(CGSize)size{
    if(self = [super initWithSize:size]){

        _skyColor = [SKColor colorWithRed:25.0/255.0 green:171.0/225 blue:1 alpha:1];

        [self setBackgroundColor:_skyColor];

        SKNode *_moving = [SKNode node];

        [self addChild:_moving];
    }

    return self;
}
- (void)groundMovement{
    //Ground texture declaration
    groundTexture = [SKTexture textureWithImageNamed:@"Ground"];
    groundTexture.filteringMode = SKTextureFilteringNearest;

    //SKAction Declarations
    groundSpriteMovement = [SKAction moveByX:-groundTexture.size.width/2 y:0 duration:0.04 * 100];
    resetgroundSpriteMovement = [SKAction moveByX:groundTexture.size.width/2 y:0 duration:0];
    repeatForevergroundSpriteMovement = [SKAction repeatActionForever:[SKAction sequence:@[groundSpriteMovement, resetgroundSpriteMovement]]];

    //Ground Sprite declaration
    groundSprite = [SKSpriteNode spriteNodeWithTexture:groundTexture];
    groundSprite.anchorPoint = CGPointMake(0, 0);
    groundSprite.position = CGPointMake(0, 0);
    [groundSprite runAction:repeatForevergroundSpriteMovement];

    [_moving addChild:groundSprite];

}
地面移动方法:

- (id)initWithSize:(CGSize)size{
    if(self = [super initWithSize:size]){

        _skyColor = [SKColor colorWithRed:25.0/255.0 green:171.0/225 blue:1 alpha:1];

        [self setBackgroundColor:_skyColor];

        [self nameMovement];
        [self playButtonPushed];
        [self groundMovement];
        [self cloudMovement];
    }

    return self;
}
- (id)initWithSize:(CGSize)size{
    if(self = [super initWithSize:size]){

        _skyColor = [SKColor colorWithRed:25.0/255.0 green:171.0/225 blue:1 alpha:1];

        [self setBackgroundColor:_skyColor];

        SKNode *_moving = [SKNode node];

        [self addChild:_moving];
    }

    return self;
}
- (void)groundMovement{
    //Ground texture declaration
    groundTexture = [SKTexture textureWithImageNamed:@"Ground"];
    groundTexture.filteringMode = SKTextureFilteringNearest;

    //SKAction Declarations
    groundSpriteMovement = [SKAction moveByX:-groundTexture.size.width/2 y:0 duration:0.04 * 100];
    resetgroundSpriteMovement = [SKAction moveByX:groundTexture.size.width/2 y:0 duration:0];
    repeatForevergroundSpriteMovement = [SKAction repeatActionForever:[SKAction sequence:@[groundSpriteMovement, resetgroundSpriteMovement]]];

    //Ground Sprite declaration
    groundSprite = [SKSpriteNode spriteNodeWithTexture:groundTexture];
    groundSprite.anchorPoint = CGPointMake(0, 0);
    groundSprite.position = CGPointMake(0, 0);
    [groundSprite runAction:repeatForevergroundSpriteMovement];

    [_moving addChild:groundSprite];

}

“我宁愿只有一个节点容纳groundMovement、cloudMovement……等方法所包含的所有子节点”。有一个节点包含所有子节点,它是SKScene(self)。它目前是如何呈现的?请提供相同的描述。@akashg我的意思是,当我创建一个名为_moving的SKNode时。我将把我所有的精灵节点,如groundSprite、cloudSprite…等存储在一个移动节点中。因此,在initWithSize方法中,它只需要绘制一次,而不是在我当前的工作方法中绘制4次。为什么要这样做?保存3个绘制调用(如果这是您的意图)几乎不会对fps产生影响(如果这是您的目标)。@learncos2D代码行数越少,代码看起来越简单、越漂亮:3