好的,我有这个代码:
SKSpriteNode *flagTile = [((BGSKView *) self.skView).tileSprites[@"flag"] copy];
flagTile.anchorPoint = CGPointZero;
flagTile.size = touchedNode.size;
flagTile.name = @"flag";
[touchedNode addChild:flagTile];
当用户点击一个字段(SKSpriteNode)时,它会向其子节点(标志节点)添加一个 Sprite 。 touchNode纹理大小是80x80,flag纹理是80x80...它们完全相等,主要区别是flag纹理有透明边框。
这里:
但是奇怪的事情发生了:标志节点总是其真实(我们称其为“可点击”)区域小于touchedNode,并且它的位置有点奇怪.
像这样:
我所有层的结构都是这样的: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 Sprite 后更改纹理属性 - 没有任何效果。
谢谢。
最佳答案
命令SKSpriteNode *flagTile = [((BGSKView *) self.skView).tileSprites[@"flag"] copy];
正在创建你的 Sprite ,但忽略了标志周围的不可见部分。当我在图像编辑器 (Adobe Fireworks) 中打开您的旗帜图像并选择您的旗帜时,仅选择实际的旗帜矩形(查看我发布的图像)。
我能想到的唯一解决方法是在旗帜后面添加一个白色(或任何您想要的颜色)正方形,大小为 80,80。然后将正方形的 alpha 设置为完全透明以上 1 点。我认为这应该允许整个 80 x 80 图像是可触摸的。
关于sprite-kit - 带有透明边框的 SKSpriteNode 会发生奇怪的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23070591/