如何在SKSpriteNode移动时仅显示阴影或任何发光效果?

3
我希望在屏幕上拖动SKSpriteNode时,能够显示任何效果或动画。
我查阅了许多网站,但是没有找到与我的问题相关的答案。我对SKSpriteNode有一点了解。
请问有谁可以指导我解决这个问题吗?
谢谢。

你尝试过使用SKLightNodes吗? - Knight0fDragon
看一下这个答案:https://dev59.com/lVkS5IYBdhLWcg3wHDHU#40362874。它展示了如何制作一个发光效果。然后你可以在不移动或者任何你想要的情况下隐藏它。 - Nik
或者...您想让阴影看起来和表现得怎样?无论哪种回答,都能帮助我回答您的问题。 - Confused
好的。所以你想展示它在被拖动时离开了表面?这就是你使用发光/阴影的原因?顺便说一下,回复时请像我在这里一样在回复中加上我的名字 @Mounika,这样我就会收到通知。 - Confused
@Confused 好的,有没有什么方法可以解决我的问题? - Mounika
显示剩余4条评论
1个回答

3
使用工厂创建阴影:
import SpriteKit

class MAKE {

    private static let view:SKView = SKView()

    static func makeShadow(from source: SKTexture, rgb: SKColor, a: CGFloat) -> SKSpriteNode {
        let shadowNode = SKSpriteNode(texture: source)
            shadowNode.colorBlendFactor = 0.5  // makes the following line more effective
            shadowNode.color = SKColor.gray // makes for a darker shadow. Off for "glow" shadow
        let textureSize = source.size()
        let doubleTextureSize = CGSize(width: textureSize.width * 2, height: textureSize.height * 2)
        let framer = SKSpriteNode(color: UIColor.clear, size: doubleTextureSize)
            framer.addChild(shadowNode)
        let filter = CIFilter(name: "CIGaussianBlur")
        let blurAmount = 10
        filter?.setValue(blurAmount, forKey: kCIInputRadiusKey)
        let effectsNode = SKEffectNode()
            effectsNode.filter = filter
            effectsNode.blendMode = .alpha
            effectsNode.addChild(framer)
            effectsNode.shouldRasterize = true
        let tex = view.texture(from: effectsNode)
        let shadow = SKSpriteNode(texture: tex)
            shadow.colorBlendFactor = 0.5
            shadow.color = rgb
            shadow.alpha = a
            shadow.zPosition = -1
    return shadow
    }
}

现在,您可以随意创建一个按钮,但请确保您已创建了一个与按钮完全相同大小和形状的buttonTexture,最好是其灰色版本。您需要将其发送到上面的模糊工厂shadowmaker中,如下所示:

shadowSprite = MAKE.makeShadow(from: buttonTexture, rgb: myColor, a: 0.33)
        shadowSprite.position = CGPoint(x: self.frame.midX, y: self.frame.midY - 5)
        addChild(shadowSprite)

您可以在这里了解更多有关工厂模式的详细信息,包括如何和为什么使用它:

Create \(Use) SKView as \(in a) factory \(static class)

1
谢谢你的回答。我正在尝试在Xamarin.Mac中编写代码,但我认为它是Swift代码 :( - Mounika
我对C#一无所知,@Mounika。或者E调的键。 - Confused
嗯...好的,我会尝试在技术上回答你。 - Mounika
你可能会发现大部分答案都不是用C#编写的。学习如何将其翻译成C#是一项重要的技能。这些文档可能会有所帮助 - https://developer.xamarin.com/guides/mac/application_fundamentals/patterns/ https://developer.xamarin.com/guides/mac/application_fundamentals/mac-apis/ - Chris Hamons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接