2016-07-31 58 views
1

一個完整的新手與Swift和SpriteKit所以請溫柔。CGContextDrawTiledImage當超過一定的尺寸時顯示黑色背景

我正在開發一個簡單的遊戲,目前它只不過是一個遊戲世界和一個只是向下移動直到撞到遊戲世界的邊緣而死的玩家(嘿!我在這裏學習並獲得瞭解遊戲物理等)。

無論如何,我有我的背景渲染與下面的代碼,我想創建一個半徑爲2000的圓形地圖,我想平鋪填充空間的背景圖像,下面的代碼創建平鋪背景:

let coverageSize = CGSizeMake(8000, 8000) 
let textureSize = CGRectMake(0, 0, 599, 519) 
let backgroundCGImage = UIImage(named: "background")?.CGImage 
UIGraphicsBeginImageContext(CGSizeMake(coverageSize.width, coverageSize.height)) 
let context = UIGraphicsGetCurrentContext() 
CGContextDrawTiledImage(context, textureSize, backgroundCGImage) 
let tiledBackground = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

let backgroundTexture = SKTexture(image: tiledBackground) 
let backgroundTiles = SKSpriteNode(texture: backgroundTexture) 
backgroundTiles.yScale = 0.5 
backgroundTiles.xScale = 0.5 

let cropNode = SKCropNode() 
let mask = SKShapeNode(circleOfRadius: 2000) 
mask.fillColor = UIColor(red: 0/255, green: 0/255, blue: 255/255, alpha: 1.0) 
cropNode.maskNode = mask 
cropNode.addChild(backgroundTiles) 
self.world?.addChild(cropNode) 

通知的coverageSize我不得不創建覆蓋圓半徑的大小,如果我離開coverageSize在停機坪的大小。 2000然後背景圖像正確顯示,只要我超過2000年,那麼背景顯示爲黑色。如果我將coverageSize降到2000,那麼我會看到紋理邊緣與圓形邊緣之間的藍色背景。

任何人都可以看到我做錯了什麼?有沒有更好的方法來繪製平鋪在特定半徑內的圖像?

回答

0

只需從一張簡單的藍色圖像開始,並確保您的作物在開始合併作物和瓦節點之前先工作。另外,雖然在CoreGraphics中使用tile會起作用,但速度會很慢並且會佔用大量內存。在我的blog post上可以找到一個大大改進的impl,您可以直接在SpriteKit着色器中進行平鋪,然後裁剪結果。一定要用白色作物裁剪,作物是一個簡單的0/1閾值測試,你不應該使用一種顏色。