Ios7 用图案图像填充SKShapeNode

Ios7 用图案图像填充SKShapeNode,ios7,sprite-kit,skshapenode,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)

我试图用一个图像/图案填充一个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]];
这很有效(但这不是我想要的):


谢谢大家!

您可以尝试使用
SKCropNode
实现这一点。然而,我在这里看到了几个问题,
SKShapeNode
不能充当
SKCropNode
maskNode
,但我自己没有测试过。在这种情况下,您可能必须使用
SKSpriteNode
而不是
SKShapeNode
我在游戏中遇到了示例问题,最后我的解决方案是添加一个SKSpriteNode作为SKShapeNode的子级,效果很好

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


希望对您有所帮助

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

那么,使用现代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)
好的,这给了我们一个圆形的精灵节点。精灵节点响应物理,因为您单独设置了其物理体。到目前为止,一切顺利。现在我们需要解决隐藏的部分,即SmallerSwirl.png图像的介绍

设置项目时,它包括Assets.xcsets(发音为“xc Assets”)条目。单击它,然后单击第一列中间/底部的“+”符号,通过单词过滤器。从出现的菜单中,选择“新建图像集”。此时会出现一个标记为“图像”的新条目。单击单词“Image”将其更改为“SmallerSwirl”

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


跑步时,你会看到你喜欢的形象是一个精灵,在屏幕上跳舞。

我认为SKShapeNode只支持纯色。顺便说一句,UIColor和SKColor是一样的。@learncos2D多亏了你,我已经看到Cocos2d解决了我试图做的大部分事情,比如关卡设计、物理/碰撞。今天我将进一步了解它(也将关注cocos2d-x)。谢谢基本上与问题无关。
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)