这不起作用 - newNode
的纹理为nil
:
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
SKSpriteNode *node = [SKSpriteNode spriteNodeWithColor:[UIColor orangeColor] size:CGSizeMake(100, 100)];
SKTexture *texture = [self.view textureFromNode:node];
SKSpriteNode *newNode = [SKSpriteNode spriteNodeWithTexture:texture];
[self addChild:newNode];
}
return self;
}
这确实有效:
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
SKSpriteNode *node = [SKSpriteNode spriteNodeWithColor:[UIColor orangeColor] size:CGSizeMake(100, 100)];
SKAction *createNewNode = [SKAction runBlock:^{
SKTexture *texture = [self.view textureFromNode:node];
SKSpriteNode *newNode = [SKSpriteNode spriteNodeWithTexture:texture];
[self addChild:newNode];
}];
[self runAction: createNewNode];
}
return self;
}
有人可以解释一下原因!?谢谢!
如果您想知道为什么没有添加node
场景:textureFromNode
的Apple文档说明:"正在渲染的节点不需要出现在查看呈现的场景。"
答案 0 :(得分:2)
我的猜测是:在您创建精灵节点的位置(在场景的initWithSize:
内),节点图尚未完全设置。场景未与视图连接(由其显示),因此未设置用于渲染。
使用颜色的精灵的SKSpriteNode纹理很可能仅在场景出现后创建。这可以解释为什么运行块操作有效。
您也可以通过简单地将代码从initWithSize:
移动到场景的didMoveToView
方法来解决这个问题,该方法是在视图上显示场景后调用的。