使用图案图像填充SKShapeNode

时间:2013-12-09 20:31:48

标签: ios7 sprite-kit skshapenode

我正在尝试使用图像/模式填充SKShapeNode,但我仍然没有成功。

你能帮我解决这个问题还是给我一个替代方案? 我想创建一个填充了图案图像的可碰撞自定义形状(来自任何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];

谢谢!

4 个答案:

答案 0 :(得分:5)

从iOS 8.0开始,SKShapeNode中有fillTexture属性。

答案 1 :(得分: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。

希望有所帮助

答案 2 :(得分:1)

您可以尝试使用SKCropNode来实现这一目标。但是,我在这里看到了几个问题,SKShapeNode无法充当maskNode的{​​{1}},但我自己没有对其进行过测试。在这种情况下,您可能必须使用SKCropNode而不是SKSpriteNode

答案 3 :(得分:0)

好吧,使用现代Swift(你现在使用Swift,对吧?),你可以试试:

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"的新条目出现。点击单词" Image"把它改成" SmallerSwirl"。

在SmallerSwirl条目旁边,您会看到标记为1x,2x和3x的空白。它们适用于不同的屏幕分辨率。首先将您首选的.png图像拖入1x广场。该图像可以命名为您想要命名的任何名称。它不必被命名为SmallerSwirl,尽管它可以。如果您愿意,可以将其他图像拖到2x和3x插槽中。

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