1

SKSpriteNode 由多个图像组成的最佳方法是什么?

我发现它[SKTexture textureWithImage:image];不使用 scale 属性(当我将它与自定义位图组装图像一起使用时,我有一个小的SKSpriteNode)。

也许我可以在倍数之间创建一个链接,SKSpriteNode但我不确定这对于碰撞检测是否是一个好主意。

编辑:

适合我的解决方案。
此代码采用 3 个纹理,将它们绘制在GraphicsContext创建UIImage.
然后我把它添加UIImage到我SKNode现在有多个纹理的地方。但是,在我的情况下指定size 属性非常重要。如果不这样做,节点将使用错误的比例因子,并且您将拥有小纹理(非视网膜)。SKNode [self setSize:CGSizeMake(WIDTH_HERO, HEIGHT_HERO)];

CGSize mergedSize = CGSizeMake(WIDTH_HERO, HEIGHT_HERO);
UIGraphicsBeginImageContextWithOptions(mergedSize, NO, 0.0f);

[textureImage1 drawInRect:CGRectMake(0, 0, WIDTH_HERO, textureImage1.size.height)];
[textureImage2 drawInRect:CGRectMake(0, 40, WIDTH_HERO, textureImage2.size.height)];
[textureImage3 drawInRect:CGRectMake(0, 0, WIDTH_HERO, textureImage3.size.height)];

UIImage *mergedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[self setTexture:[SKTexture textureWithImage:mergedImage]];
4

1 回答 1

2

您可以SKSpriteNode使用下一个纹理创建另一个并调用addChild:原始节点,然后更改新节点相对于父节点的位置。

这是在我的子类中SKSpriteNode

    UIImage* bottom = [[UIImage imageNamed: @"obstacle_base"] resizableImageWithCapInsets: UIEdgeInsetsMake(0, 0, 0, 0)];
    UIImage* top = [UIImage imageNamed: @"obstacle_top"];

    SKTexture* bottomT = [SKTexture textureWithImage: bottom];
    SKTexture* topT = [SKTexture textureWithImage: top];

    [self setTexture: bottomT];

    // create top
    SKSpriteNode* topNode = [[SKSpriteNode alloc] initWithTexture: topT];
    topNode.position = CGPointMake(0, height/2 - topNode.size.height/2);
    [self addChild: topNode];
于 2014-02-13T20:17:16.117 回答