5

我正在尝试用图像/图案填充 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

4 回答 4

4

从 iOS 8.0 开始,fillTextureSKShapeNode 中有属性。

于 2015-02-24T08:12:12.397 回答
3

我在我的游戏中遇到了示例问题,最后我的解决方案是添加一个 SKSpriteNode 作为 SKShapeNode 的子节点,它运行良好。

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

self.bombNode 是一个 SKShapeNode。

希望能帮助到你

于 2014-03-24T11:48:27.727 回答
2

您可以尝试使用SKCropNode. 但是,我在这里看到了几个SKShapeNode不能作为maskNodefor 的问题SKCropNode,但我自己没有测试过。在这种情况下,您可能必须使用SKSpriteNode而不是SKShapeNode.

于 2013-12-10T08:35:20.813 回答
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(发音为“xc assets”)条目。单击它,然后单击第一列中间/底部的“+”号,按单词过滤器。从出现的菜单中,选择“新图像集”。出现一个标有“图像”的新条目。单击单词“Image”将其更改为“SmallerSwirl”。

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

运行,你应该会看到你喜欢的图像体现为一个精灵,在屏幕上跳舞。

于 2015-11-12T07:48:05.217 回答