Ios SpriteKit背景PNG,Alpha显示黑色
我有一个用Swift制作的Ios SpriteKit背景PNG,Alpha显示黑色,ios,iphone,swift,sprite-kit,png,Ios,Iphone,Swift,Sprite Kit,Png,我有一个用Swift制作的Spritekit游戏,游戏结束后,我有一个背景是png文件,其alpha值为0.5ish(因此是透明的)。我是用photoshop制作的 我用它来淡化比赛细节,并把记分卡放在上面 当我在运行iOS 9.2的iPhone6Plus上使用它时,它工作得非常好,会淡化细节并显示记分卡。。。但当我在运行iOS 9.2的模拟器或运行iOS 8.4的iPhone5c上运行它时,它只是显示为黑色。。。覆盖整个游戏屏幕 声明如下: //alpha'sd png created
Spritekit
游戏,游戏结束后,我有一个背景是png
文件,其alpha值为0.5ish(因此是透明的)。我是用photoshop制作的
我用它来淡化比赛细节,并把记分卡放在上面
当我在运行iOS 9.2的iPhone6Plus上使用它时,它工作得非常好,会淡化细节并显示记分卡。。。但当我在运行iOS 9.2的模拟器或运行iOS 8.4的iPhone5c上运行它时,它只是显示为黑色。。。覆盖整个游戏屏幕
声明如下:
//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
]))
并这样称呼:
//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
]))
这是模拟器的屏幕截图。。。但正如我提到的,它也发生在我的iPhone5c上,8.4
黑色应该是透明的蓝色光线,允许玩家在背景中仍然可以看到游戏,但没有那么生动
你知道为什么吗?所以有一个答案是:
根据文件:
雪碧套件仅适用于纯色。为了获得最佳效果,请使用
平台类提供的预设颜色或定义的自定义颜色
在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图像,因此效率更高
我仍然有兴趣知道为什么它不能像我最初使用的那样工作,但这是一个解决方案。背景是sknode还是skspritenode?你试过那个节点的alpha属性了吗?它是一个
SKSpriteNode
。它对我的6+有效,所以alpha值很好。我唯一能想到的是SpriteKit在iOS 9上有一些iOS 8中没有的东西。。。但所有的图像代码都在上面。我觉得模拟器没有显示alpha…sprite kit从8到9有很多变化,很多错误都被修复了,至于模拟器,让我们面对它,它是一个模拟器,你不能100%相信它