我正在使用SpriteKit和Swift创建一个太空探索游戏。我正在使用Core Graphics生成空间环境。由于玩家可以控制可以向各个方向移动的宇宙飞船,我创建了9种不同的背景,并将它们定位在这样的用户周围。
7 8 9
4 5 6
1 2 3
玩家从第5层开始。我的游戏使用2048x1536屏幕和aspectFill,所以我可以支持所有分辨率。
我使用此代码生成背景。
UIGraphicsBeginImageContext(CGSizeMake(width, height))
let ctx = UIGraphicsGetCurrentContext();
let max = width * height / CGFloat(starCountModifier)
for i in 0...Int(max)
{
let x = arc4random_uniform(UInt32(width))
let y = arc4random_uniform(UInt32(height))
let alpha = CGFloat(Float(arc4random()) / Float(UINT32_MAX))
CGContextSetFillColorWithColor(ctx, SKColor(red: 1.0, green: 1.0, blue: 1.0, alpha: alpha * alpha * alpha).CGColor)
CGContextFillRect(ctx, CGRect(x: CGFloat(x), y: CGFloat(y), width: 2, height: 2))
}
let textureImage: UIImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext()
let texture = SKTexture(CGImage: textureImage.CGImage)
let sprite = SKSpriteNode(texture: texture)
addChild(sprite)
一个问题就可以了。我创建的每个背景都需要大约20-25mb的内存!
即使我不绘制星星,也可以通过在该上下文中创建SKSpriteNode来分配这么多内存。
有没有办法优化这个纹理数据?
感谢。