2016-07-31 9 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年を過ぎると背景が黒色に表示されます。 coverageSizeを2000のままにしておくと、テクスチャのエッジとサークルのエッジの間に青色の背景が表示されます。

私が間違っていることを誰も見ることができますか?特定の半径内にタイル張りされた画像を描画するには良い方法がありますか?

答えて

0

単純な青いイメージから始めて、クロップが最初に機能していることを確認してから、クロップとタイルノードを結合するようにしてください。また、CoreGraphicsでタイルを実行すると速度が遅くなり、多くのメモリが使用されます。 blog postで大幅に改善されたインプラントが見つかりました。スプライトキットのシェーダでタイリングを直接行い、結果をトリミングすることができます。白い色で切り抜いてください、作物は単純な0/1閾値テストです、あなたは色を使うべきではありません。

関連する問題