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:flagTile];

当用户点击一个字段(SKSpriteNode)时,它会向其子节点(标志节点)添加一个 Sprite 。 touchNode纹理大小是80x80,flag纹理是80x80...它们完全相等,主要区别是flag纹理有透明边框。

这里:

enter image description here

但是奇怪的事情发生了:标志节点总是真实(我们称其为“可点击”)区域小于touchedNode,并且它的位置有点奇怪.

像这样:

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 Sprite 后更改纹理属性 - 没有任何效果。

谢谢。

最佳答案

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

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

enter image description here

关于sprite-kit - 带有透明边框的 SKSpriteNode 会发生奇怪的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23070591/

相关文章:

swift 3 SKAction 速度属性

swift - 如何使用 CGPath 为该图像制作 SKPhysicsBody?

ios - touch.locationInView 没有像我想的那样工作

swift - SKSpriteNode 未检测到触摸事件

swift - Sprite 节点的起始位置

ios - 如何在 SpriteKit 的不同设备上使 SKSpriteNode 的速度相同?

ios - 使用 SKSpriteNode 缩放时的像素化圆圈

ios - Sprite Kit 物理变量与 Cocos2d+Box2d 的比较

swift - 如何在每次触摸SKNode时加1点