2014-02-08 5 views
0

Что является лучшим способом иметь SKSpriteNodeсостоит из нескольких изображений?SKSpriteNode несколько текстур

Я обнаружил, что [SKTexture textureWithImage:image]; не использует свойство шкалы (когда я использую его с пользовательским растровым изображением, у меня есть маленький SKSpriteNode).

Может быть, я могу создать ссылку между множителями SKSpriteNode, но я не уверен, что это хорошая идея для обнаружения столкновений.

EDIT:

Решение, которое работает для меня.
Этот код принимает 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];