SpriteKit 背景 PNG,Alpha 显示黑色
SpriteKit Backdrop PNG with Alpha showing black
我有一个 Spritekit
游戏是在 Swift 制作的,当游戏结束时,我有一个背景是一个 png
文件,其 alpha 值为 0.5ish(所以它透视)。我是用 photoshop 做的。
我用它来淡化游戏细节并将记分卡放在它上面。
当我在我的 iPhone 6 plus 运行ning iOS 9.2 上使用它时,效果很好,使细节变暗并显示记分卡...但是当我 运行 它在模拟器 运行ning iOS 9.2 或 iPhone 5C 运行ning iOS 8.4 上,它只是显示黑色...覆盖整个游戏屏幕...
声明如下:
//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 with 8.4...
黑色应该是透明的蓝光,让玩家仍然可以看到背景中的游戏,但不是那么生动...
知道为什么吗?
所以 this question 的答案是:
According to the documentation here:
Sprite Kit works only with solid colors. For best results, use the
preset colors provided by the platform class or a custom color defined
in the RGBA device color space
这是否仍然正确,我不知道,但我没有使用 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 图像,因此效率也更高。
我仍然很想知道为什么它不能像我原来那样工作,但这至少是一个解决方案。
我有一个 Spritekit
游戏是在 Swift 制作的,当游戏结束时,我有一个背景是一个 png
文件,其 alpha 值为 0.5ish(所以它透视)。我是用 photoshop 做的。
我用它来淡化游戏细节并将记分卡放在它上面。
当我在我的 iPhone 6 plus 运行ning iOS 9.2 上使用它时,效果很好,使细节变暗并显示记分卡...但是当我 运行 它在模拟器 运行ning iOS 9.2 或 iPhone 5C 运行ning iOS 8.4 上,它只是显示黑色...覆盖整个游戏屏幕...
声明如下:
//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 with 8.4...
黑色应该是透明的蓝光,让玩家仍然可以看到背景中的游戏,但不是那么生动...
知道为什么吗?
所以 this question 的答案是:
According to the documentation here:
Sprite Kit works only with solid colors. For best results, use the preset colors provided by the platform class or a custom color defined in the RGBA device color space
这是否仍然正确,我不知道,但我没有使用 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 图像,因此效率也更高。
我仍然很想知道为什么它不能像我原来那样工作,但这至少是一个解决方案。