2014-04-14 76 views
2

好吧,我有这样的代码:奇怪的事情发生的SKSpriteNode与透明边框

 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 ......它们是完全相等的,主要区别在于标志纹理具有透明边框。

这里:

enter image description here

但奇怪的事情发生了:标志节点总是有其真正(可以称之为“可点击”)面积比touchedNode小,它的位置是怎样的一个奇怪的事情。

像这样:

enter image description here

我的所有层的结构是这样的: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后更改纹理属性 - 没有任何工作。

谢谢。

回答

2

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

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

enter image description here

+0

哇!谢谢,但这真的是唯一的解决方案吗?如果我有更复杂的图形需要使用带有边框的透明图像并且没有附加颜色? – AndrewShmig

+2

这一切都取决于你的代码结构。有几件事你可以做。您可以将一个小点放在对角上,而不是使用alpha + 1图层。另一个更清晰的选择是按照原样使用sprite节点,并在其上添加一个更大的不可见节点来处理触摸。 – sangony

+0

你可以使用你的国旗图像来创建一个国旗的alpha(这应该是一个黑色背景上的白色标志),然后你可以在Photoshop中结合这个来创建一个32位PNG文件。请注意,最好将主标记放置在坚实的背景上,颜色无关紧要,因为无论如何它都会被alpha删除。这样,你不会结束角落点,并从整个图像(没有透明像素)取得尺寸 – fuzzygoat

1

我已经在两个角落增加了两个点解决我的问题(左下和右上)与不透明度设置为1%,和它的工作很大。