【问题标题】:SpriteKit Backdrop PNG with Alpha showing blackSpriteKit 背景 PNG,Alpha 显示为黑色
【发布时间】:2023-03-20 15:17:02
【问题描述】:

我有一个用 Swift 制作的 Spritekit 游戏,当游戏结束时,我有一个 png 文件的背景,它的 alpha 值为 0.5ish(所以它是透明的)。我是在 Photoshop 中制作的。

我用它来处理游戏细节并将记分卡放在上面。

当我在运行 iOS 9.2 的 iPhone 6 上使用它时,它工作得很好,使细节变得模糊并显示记分卡......但是当我在运行 iOS 9.2 的模拟器或运行 iOS 8.4 的 iPhone 5C 上运行它时,它只是出现黑色...覆盖整个游戏屏幕...

它是这样声明的:

    //alpha'sd png created in photoshop. approx. 0.3 alpha
    let backdrop = SKSpriteNode(imageNamed: "Background_Alpha") 

    backdrop.anchorPoint = CGPoint(x: 0.5, y: 1.0)
    backdrop.position = CGPoint(x: size.width/2, y: size.height)
    backdrop.name = "ScoreScreen"
    backdrop.zPosition = Layer.UIBackground.rawValue
    worldNode.addChild(backdrop)

并像这样调用:

    backdrop.alpha = 0
    let drop = SKAction.fadeInWithDuration(kAnimDelay)
    drop.timingMode = .EaseInEaseOut
    backdrop.runAction(SKAction.sequence([
        SKAction.waitForDuration(kAnimDelay),
        drop
        ]))

这是模拟器的屏幕截图...但正如我所提到的,它也发生在我的 iPhone 5C 和 8.4...

黑色应该是透明的蓝光,让玩家仍然可以看到背景中的游戏,但没有那么生动......

有什么想法吗?

【问题讨论】:

  • 背景是sknode还是skspritenode?你试过那个节点的 alpha 属性吗?
  • 这是一个SKSpriteNode。好吧,它适用于我的 6+,所以 alpha 值很好。我唯一能想到的是,SpriteKit 为 iOS 9 提供了一些 iOS 8 中没有的东西……但是该图像的所有代码都在上面。我认为模拟器只是不显示 alpha...

标签: ios iphone swift sprite-kit png


【解决方案1】:

所以this question 的答案是:

根据文档here

Sprite Kit 仅适用于纯色。为获得最佳效果,请使用 平台类提供的预设颜色或定义的自定义颜色 在 RGBA 设备色彩空间中

这是否仍然正确,我不知道,但我所做的而不是使用 alpha'd png 只是使用 Spritekit 从头开始​​创建它并调用如下:

    let backdrop = SKSpriteNode(color: 
                          SKColor(red: 29.0/255.0, 
                                green: 113.0/255.0, 
                                 blue: 149.0/255.0, 
                                alpha: 0.3),         //set alpha here
                                 size: size)

    backdrop.position = CGPoint(x: size.width/2, y: size.height/2)
    backdrop.name = "ScoreScreen"
    backdrop.zPosition = Layer.UIBackground.rawValue
    worldNode.addChild(backdrop)                     //add it to world

    //because I set the alpha in the SKSpriteNode,
    //I can still animate it in from alpha=0 to alpha=0.3:

    backdrop.alpha = 0
    let drop = SKAction.fadeInWithDuration(kAnimDelay)
    drop.timingMode = .EaseInEaseOut
    backdrop.runAction(SKAction.sequence([
        SKAction.waitForDuration(kAnimDelay),
        drop
        ]))

这现在可以工作,并在游戏结束屏幕上显示整个游戏的透明精灵,以使场景变得沉闷。考虑到项目不再需要存储整个 png 图像,效率也会大大提高。

我仍然想知道为什么它不能像我最初拥有的那样工作,但这是一个解决方案。

【讨论】:

  • 从8到9的sprite kit发生了很大的变化,修复了很多bug,至于模拟器,让我们面对现实吧,它是一个模拟器,你不能100%相信它
猜你喜欢
  • 2018-03-15
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
相关资源
最近更新 更多