2013-12-09 3 views
3

Я пытаюсь заполнить SKShapeNode образ/шаблон, но я все еще не увенчался успехом.Заполнить SKShapeNode с рисунком image

Можете ли вы помочь мне решить это или дать мне альтернативу? Я хочу создать настраиваемую пользовательскую форму (из любого типа SpriteKit), заполненную образцом.

Я попытался следующие:

UIBezierPath *path = [[UIBezierPath alloc] init]; 
    [path addArcWithCenter:CGPointMake(0.0, 0.0) radius:50.0 startAngle:0.0 endAngle:(M_PI*2.0) clockwise:YES]; 
SKShapeNode *shape = [[SKShapeNode alloc] init]; 
UIImage *patternImg = [UIImage imageNamed:@"pattern"]; 
shape.path = path.CGPath; 
shape.fillColor = [[SKColor alloc] initWithCGColor:[[UIColor alloc] initWithPatternImage:patternImg].CGColor]; 

, а также:

shape.fillColor = [[SKColor alloc] initWithPatternImage:[[UIImage alloc] initWithCGImage:[UIImage imageNamed:@"Basketball"].CGImage]]; 

Это работает (но это не то, что я ищу):

shape.fillColor = [SKColor redColor]; 

Спасибо!

+0

Я не думаю, что SKShapeNode поддерживает что-либо, кроме сплошного цвета. Btw, UIColor - это то же самое, что и SKColor. – LearnCocos2D

+0

@ LearnCocos2D благодаря вам Я видел, что Cocos2d решает большинство вещей, которые я пытаюсь сделать, например, дизайн уровней, физика/столкновения. Я еще раз посмотрю на это сегодня (и на cocos2d-x тоже). Благодаря! –

ответ

2

У меня была проблема с образцом в моей игре, наконец, моим решением было добавить SKSpriteNode в качестве дочернего элемента SKShapeNode, и он отлично работал.

SKSpriteNode* node = [[SKSpriteNode alloc] initWithImageNamed:@"bombIcon.png"]; 
node.name = @"bomb"; 
node.size = CGSizeMake(10, 10); 
[self.bombNode addChild:node]; 

Где self.bombNode - это SKShapeNode.

Надеется, что это помогает

1

Вы можете попытаться достичь этого с помощью SKCropNode. Тем не менее, я видел несколько вопросов здесь, что SKShapeNode не может действовать как maskNode для SKCropNode, но я сам его не тестировал. В этом случае вам, вероятно, придется использовать SKSpriteNode вместо SKShapeNode.

5

Начиная с прошивки 8.0 есть fillTexture свойства в SKShapeNode.

0

Ну, используя современную Swift (? Вы используете Swift теперь, справа), вы можете попробовать:

var marbleNode: SKSpriteNode! 

Тогда позже, в методе инициализации:

marbleNode = SKSpriteNode(imageNamed: "SmallerSwirl"); 

marbleNode.physicsBody = SKPhysicsBody(circleOfRadius: 35.0) 

marbleNode.physicsBody?.dynamic = true 
marbleNode.physicsBody?.affectedByGravity = true 
print(marbleNode.physicsBody) 

marbleNode.position = CGPointMake(centerPoint.position.x + 10.0, centerPoint.position.y + 10.0) 

self.addChild(marbleNode) 

Хорошо, так что дает нам круглый спрайт-узел для работы. Узел Sprite реагирует на физику, потому что вы настраиваете его физическое тело отдельно. Все идет нормально. Теперь нам нужно обратиться к части с затушеванными деталями, а именно к введению изображения SmallerSwirl .png.

Когда вы настраивали свой проект, он включал запись Assets.xcassets (произносится как «x c assets»). Нажмите на него, затем щелкните знак «+» в середине/нижней части первого столбца, с помощью фильтра слов. В появившемся меню выберите «Новый набор изображений». Появится новая запись с надписью «Изображение». Нажмите на слово «Изображение», чтобы изменить его на «SmallerSwirl».

Рядом с записью SmallerSwirl вы видите пробелы, обозначенные 1x, 2x и 3x. Они предназначены для разных разрешений экрана. Начните с перетаскивания вашего предпочтительного .png изображения в квадрат 1x. Это изображение можно назвать тем, что вы хотите, чтобы оно было названо. Его не нужно называть SmallerSwirl, хотя это может быть. Перетащите другие изображения в 2x и 3x слоты, если хотите.

Запустите, и вы увидите свое предпочтительное изображение, воплощенное в качестве спрайта, танцующего вокруг экрана.