SpriteKit背景PNG与Alpha显示黑色

时间:2015-12-30 19:01:57

标签: ios iphone swift sprite-kit png

我在Swift中制作了Spritekit游戏,当游戏结束时,我的背景是png文件的alpha值为0.5ish(所以它的透视)。我是在photoshop中制作的。

我用它来消除游戏细节,并将记分卡放在顶部。

当我在iPhone 6上使用它并运行iOS 9.2时,它运行良好,使细节变得迟钝并显示记分卡......但是当我在运行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 ......

simulator screenshot

黑色应该是透明的蓝色光线,让玩家仍能在背景中看到游戏,但不是那么生动......

任何想法为什么?

1 个答案:

答案 0 :(得分:0)

所以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图像,因此效率更高。

我仍然有兴趣知道为什么它不起作用我原来的方式,但这是一个较少的解决方案。