Sprite kit 奇怪的事情发生在有透明边框的SKSpriteNode上

Sprite kit 奇怪的事情发生在有透明边框的SKSpriteNode上,sprite-kit,skspritenode,Sprite Kit,Skspritenode,好的,我有这个代码: SKSpriteNode *flagTile = [((BGSKView *) self.skView).tileSprites[@"flag"] copy]; flagTile.anchorPoint = CGPointZero; flagTile.size = touchedNode.size; flagTile.name = @"flag"; [touchedNode addChild:

好的,我有这个代码:

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

        [touchedNode addChild:flagTile];
当用户点击一个字段(一个SKSpriteNode)时,它会向其子标志节点添加一个以上的精灵。 touchedNode纹理大小为80x80,标志纹理为80x80。。。它们完全相同,主要区别在于旗帜纹理具有透明的边界

在这里:

但奇怪的事情发生了:flag节点的真实(我们称之为“tappable”)区域总是比touchedNode小,而且它的位置有点奇怪

像这样:

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

我做错了什么

我真正需要的是让我的flagTile可点击区域达到touchedNode的大小。还有一个:如果我替换:

SKSpriteNode *flagTile = [((BGSKView *) self.skView).tileSprites[@"flag"] copy];
关于这一点:

SKSpriteNode *flagTile = [SKSpriteNode spriteWithColor:[UIColor clearColor] size:touchedNode.size];
它工作得很好

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


谢谢。

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

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


我解决了我的问题,在两个角落(左下角和右上角)添加了两个点,不透明度设置为1%,效果非常好。

哇!谢谢,但这真的是唯一的解决办法吗?如果我有更复杂的图形,需要使用带边框的透明图像,并且没有额外的颜色,那该怎么办?这取决于您的代码结构。你可以做几件事。你可以在对角点上放一个小点,而不是使用alpha+1层。另一个更干净的选择是只使用精灵节点,并在其上添加一个更大的不可见节点来处理触摸。您可以使用您的标志图像创建标志的alpha(这应该是黑色背景上的白色标志),然后可以在Photoshop中将其合并以创建32位PNG文件。请注意,可能最好将主标志也放在坚实的背景上,颜色并不重要,因为它将被alpha删除。这样你就不会得到角点,大小是从完整的图像(没有透明像素)中选取的@sangony我认为最好的答案是添加颜色清晰、大小合适的透明节点。更干净、更容易实现。您可以编辑您的答案,并感谢您提供的信息。