Ios 如何从修改的SkSpritode生成SKTexture?
所以我有一个SKSpriteNode,它经历了两次SKAction,修改了它的形状和颜色,但是我想把修改后的SKSpriteNode作为SKTexture返回,我可以应用到另一个SKSpriteNode。这就是我目前正在使用的 1生成修改后的laserNode并将其存储为属性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
-(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;
}