Ios 如何从修改的SkSpritode生成SKTexture?

Ios 如何从修改的SkSpritode生成SKTexture?,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,所以我有一个SKSpriteNode,它经历了两次SKAction,修改了它的形状和颜色,但是我想把修改后的SKSpriteNode作为SKTexture返回,我可以应用到另一个SKSpriteNode。这就是我目前正在使用的 1生成修改后的laserNode并将其存储为属性 -(void)generateLaserSprite { SKSpriteNode *laserNode = [SKSpriteNode spriteNodeWithTexture:[SKTexture textu

所以我有一个SKSpriteNode,它经历了两次SKAction,修改了它的形状和颜色,但是我想把修改后的SKSpriteNode作为SKTexture返回,我可以应用到另一个SKSpriteNode。这就是我目前正在使用的

1生成修改后的laserNode并将其存储为属性

-(void)generateLaserSprite
{
    SKSpriteNode *laserNode = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:@"Laser.png"]];
    [laserNode runAction:[SKAction group:@[[SKAction colorizeWithColor:[SKColor redColor] colorBlendFactor:100 duration:0.0],
                                           [SKAction scaleXBy:0.4 y:0.7 duration:0.0],
                                           ]]];
    _laserSprite = laserNode
}
2然后,来自SKScene的方法调用此方法来检索属性的副本

-(SKSpriteNode*)retrieveLaserSprite
{
        SKSpriteNode *laserNode = [_laserSprite copy];
        laserNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(laserNode.size.width*0.8, laserNode.size.height*0.8)];
        //other laserNode.physicsBody modifications

        return laserNode;

目前的问题是,当我调用第二个方法retrieveLaserSprite时,返回的LaserNode将作为原始图像pre-SKAction显示在屏幕上,然后您可以在屏幕上看到SKAction的发生

实际上应该可以从使用SKView类的-SKTexture*textureFromNode:方法修改其渲染属性的精灵创建纹理

您的代码如下所示:

-(SKSpriteNode*)retrieveLaserSprite {
    SKTexture *tempTexture = [self.view textureFromNode:_laserSprite];
    SKSpriteNode *laserNode = [SKSpriteNode spriteNodeWithTexture:tempTexture];
    laserNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(laserNode.size.width*0.8, laserNode.size.height*0.8)];
    //other laserNode.physicsBody modifications

    return laserNode;
}

您应该能够通过以下方式完成此任务:

-(SKSpriteNode*)retrieveLaserSprite 
{
    SKTexture *texture = [self.view textureFromNode:[_laserSprite copy]];
    SKSpriteNode *laserNode = [SKSpriteNode spriteNodeWithTexture:texture];
    laserNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(laserNode.size.width*0.8, laserNode.size.height*0.8)];
    //other laserNode.physicsBody modifications

    return laserNode;
}