SpriteKit:你如何突出场景的一部分,就像在教程中一样?

Posted

技术标签:

【中文标题】SpriteKit:你如何突出场景的一部分,就像在教程中一样?【英文标题】:SpriteKit: How do you highlight a section of the scene, like in a tutorial? 【发布时间】:2015-03-10 19:01:44 【问题描述】:

我正在尝试在游戏中创建一个教程,它会遍历 UI 的各个部分并突出显示它们,同时使场景的其余部分变暗。

我认为我可以使用 Sprites 和 SKBrendMode 做到这一点,但苹果参考指南中对这些的解释很差。

有什么想法吗?

【问题讨论】:

【参考方案1】:

实现此目的的一种方法是使用 SKSpriteNodes 组合您想要的“cookie”,然后创建纹理以将其“按原样”渲染到新的 SpriteNode,然后将其作为一个整体与场景混合。

在这个简单的示例中,我使用了一个矩形来突出显示,但您可以将该节点设为任何节点类型或图像,并相应地调整 alpha 值。

正常绘制场景,然后添加以下代码:

// dim the entire background of the scene to 70% darker
SKSpriteNode* background = [SKSpriteNode spriteNodeWithColor:[UIColor colorWithRed:0
                                                                             green:0
                                                                              blue:0
                                                                             alpha:0.7]
                                                        size:self.frame.size];

// make a square of 100,100. This could be an image or shapenode rendered to a spritenode
// make the cut out only dim 20% - this is because no dim will look very harsh
SKSpriteNode* cutOut = [SKSpriteNode spriteNodeWithColor:[UIColor colorWithRed:0
                                                                         green:0
                                                                          blue:0
                                                                         alpha:0.2]
                                                    size:CGSizeMake(100,100)];

// add the cut out to the background and make the blend mode replace the colors
cutOut.blendMode = SKBlendModeReplace;
[background addChild:cutOut];

// we now need to make a texture from this node, otherwise the cutout will replace the underlying
// background completely

SKTexture* newTexture = [self.view textureFromNode:background];
SKSpriteNode* newBackground = [SKSpriteNode spriteNodeWithTexture:newTexture];

// position our background over the entire scene by adjusting the anchor point (or position)
newBackground.anchorPoint = CGPointMake(0,0);
[self addChild:newBackground];

// if you have other items in the scene, you'll want to increaes the Z position to make it go ontop.
newBackground.zPosition = 5;

【讨论】:

或者使用 SKCropNode 获得更快的解决方案。 我认为 SKCropNode 会裁剪精灵,而不是反转裁剪区域 - 或者是否有裁剪模式来改变其行为? 有快速的解决方案吗?谢谢 @Marin 抱歉——我还不是 Swifty——但同样的原则可能适用。也许作为一个新问题发布并交叉引用我的帖子 - 你会有更多的知名度。 谢谢@GilesDMiddleton,会努力做到的

以上是关于SpriteKit:你如何突出场景的一部分,就像在教程中一样?的主要内容,如果未能解决你的问题,请参考以下文章

使用 swift 和 spritekit,你如何阻止场景在变得活跃/移动到前台后取消暂停?

如何突出显示带有孩子的 div(带有部分不透明层?)就像雅虎邮件一样,参见图片

如何将SpriteKit中的单个游戏场景添加到普通的单视图Swift应用程序中

如何在 SpriteKit 场景编辑器中访问导航图的对象

Swift SpriteKit 出现场景错误

WinForms TreeView - 如何手动“突出显示”节点(就像点击它一样)