2013-12-09 55 views
3

我想用图片/图案填充SKShapeNode,但我仍然没有成功。用图案图像填充SKShapeNode

你能帮我解决这个问题还是给我一个替代方案? 我想创建一个充满图案图像的Collidable自定义形状(来自任何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支持除纯色之外的任何东西。顺便说一句,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不能作为maskNodeSKCropNode,但我没有自己测试过。在这种情况下,您可能必须使用SKSpriteNode而不是SKShapeNode

5

从iOS版8.0开始出现在SKShapeNode fillTexture财产。

0

嘛,用现代斯威夫特(?你用斯威夫特现在,右),你可以尝试:

var marbleNode: SKSpriteNode! 

后来的后来,在您的init方法:

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”)条目。点击它,然后点击第一列中间/底部的“+”号,通过单词过滤器。在出现的菜单中,选择“新建图像集”。出现标有“图像”的新条目。点击单词“Image”将其更改为“SmallerSwirl”。

在SmallerSwirl条目旁边,您会看到标有1x,2x和3x的空白。他们是针对不同的屏幕分辨率。首先将首选的.png图像拖动到1x方块中。无论您想要如何命名该图像,都可以命名该图像。它不必被命名为SmallerSwirl,尽管它可以。如果你喜欢,将其他图像拖到2x和3x插槽。

运行,你应该看到你的首选图像体现为精灵,在屏幕上跳舞。