Ios 如何在Sprite工具包中显示包含所有子节点的父节点?
我在将所有精灵节点添加到单个父节点,然后在屏幕上显示该父节点内部的所有子节点时遇到问题 我当前的工作方法是简单地获取添加到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
-(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