【问题标题】:How to generate SKTexture from a modified SKSpriteNode?如何从修改后的 SKSpriteNode 生成 SKTexture?
【发布时间】:2014-05-22 18:36:31
【问题描述】:

所以我有一个 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 然后作为原始图像(SKAction 前)显示在屏幕上,然后您可以明显看到 SKActions 发生在 -屏幕。

【问题讨论】:

    标签: ios objective-c sprite-kit


    【解决方案1】:

    实际上应该可以从使用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;
    }
    

    【讨论】:

      【解决方案2】:

      您应该能够使用以下方法完成此任务:

      -(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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多