使用透明边框的SKSpriteNode会发生奇怪的事情

时间:2014-04-14 21:17:40

标签: sprite-kit skspritenode

好的,我有这段代码:

        SKSpriteNode *flagTile = [((BGSKView *) self.skView).tileSprites[@"flag"] copy];
        flagTile.anchorPoint = CGPointZero;
        flagTile.size = touchedNode.size;
        flagTile.name = @"flag";

        [touchedNode addChild:flagTile];

当用户点击一个字段(SKSpriteNode)时,它会向其子节点添加一个精灵 - 标记节点。 touchNode纹理大小为80x80,标志纹理为80x80 ......它们完全相同,主要区别在于标志纹理具有透明边框。

下面:

enter image description here

但奇怪的是:标志节点总是真实(让我们称之为#34; tappable")区域小于被触摸的节点及其位置是一种奇怪的事情。

像这样:

enter image description here

我的所有图层的结构都是这样的:compoundNode包含两个图层--A和B.当需要调整整个树的大小时,设置xScale和yScale(compoundNode)。没有其他大小的操作。

我做错了什么?

我真正需要的是将flagTile可点击区域设置为touchNode的大小。还有一个:如果我更换:

SKSpriteNode *flagTile = [((BGSKView *) self.skView).tileSprites[@"flag"] copy];

这一个:

SKSpriteNode *flagTile = [SKSpriteNode spriteWithColor:[UIColor clearColor] size:touchedNode.size];

效果很好。

我甚至尝试在创建clearColor精灵后更改纹理属性 - 没有任何效果。

感谢。

2 个答案:

答案 0 :(得分:2)

命令SKSpriteNode *flagTile = [((BGSKView *) self.skView).tileSprites[@"flag"] copy];正在创建您的精灵,但忽略了标志周围的不可见部分。当我在图像编辑器(Adobe Fireworks)中打开您的标记图像并选择您的标记时,只选择实际标记rect(查看我发布的图像)。

我能想到的唯一解决方法是在标志后面添加一个白色(或任何你想要的颜色)方块,大小为80,80。然后将方块的alpha设置为完全透明的1点。我认为这应该允许整个80 x 80的图像可以触摸。

enter image description here

答案 1 :(得分:1)

我通过在两个角落(左下角和右上角)添加两个点来解决我的问题,不透明度设置为1%并且效果很好。