2014-02-08 74 views
0

什麼是最好的方式有一個SKSpriteNode組成的多個圖像SKSpriteNode多紋理

我發現[SKTexture textureWithImage:image];不使用scale屬性(當我使用它與一個自定義位圖組裝圖像我有一個小SKSpriteNode)。

也許我可以創建多個之間的鏈接SKSpriteNode但我不確定這是碰撞檢測的好主意。

編輯:

解決方案,爲我的作品。
此代碼需要3個紋理,在GraphicsContext中繪製它們,創建一個UIImage
然後我將這個UIImage添加到我的SKNode,現在它有多個紋理。然而,它是非常重要指定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]]; 
+0

你需要多個精靈,把它們放在同一sknode和使用accumulatedFrame的碰撞 – LearnCocos2D

+0

你真的必須使用SKTexture創建一個精靈節點? –

+0

我想是的。即使你可以創建一個SKSpriteNode而不明確指定紋理,它背後也有一個。 –

回答

1

您可以用下一個質地創建另一個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];