2016-07-31 7 views
1

ein kompletter Neuling mit Swift und SpriteKit also bitte sanft sein.CGContextDrawTiledImage Anzeige schwarzen Hintergrund wenn über eine bestimmte Größe

Ich entwickle ein einfaches Spiel, im Moment ist es nichts weiter als eine Spielwelt und ein Spieler, der einfach runterfährt, bis er an den Rand der Spielwelt gerät und dann stirbt (hey! Ich lerne hier und bekomme um Spielphysik usw. zu verstehen).

Wie auch immer, ich habe meine Hintergrund-Rendering mit dem folgenden Code, ich möchte eine Kreiskarte mit einem Radius von 2000 erstellen, und das Hintergrundbild möchte ich gekachelt, um den Raum zu füllen, der folgende Code erstellt den gekachelten Hintergrund:

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) 

Beachten Sie die Größe des coverageSize, die ich je hatte zu schaffen, die Größe des Kreisradius zu bedecken, wenn ich die coverageSize an Schürze verlassen. 2000 dann wird das Hintergrundbild korrekt angezeigt, sobald ich über 2000 gehe dann wird der Hintergrund als schwarze Farbe angezeigt. Wenn ich die coverageSize auf 2000 belasse, bekomme ich den blauen Hintergrund zwischen der Kante der Textur und der Kante des Kreises.

Kann jemand sehen, was ich falsch mache? und gibt es eine bessere Möglichkeit, ein Bild innerhalb eines bestimmten Radius zu zeichnen?

Antwort

0

Beginnen Sie einfach mit einem einfachen blauen Bild und stellen Sie sicher, dass Ihr Bildausschnitt zuerst bearbeitet wird, bevor Sie mit dem Kombinieren des Bildausschnitts und des Kachelknotens fortfahren. Auch wenn eine Kachel in CoreGraphics funktioniert, wird sie langsam und benötigt viel Speicher. Ein viel verbesserter Impl kann auf meiner blog post gefunden werden, Sie können einfach die Kacheln direkt in einem SpriteKit Shader tun und dann die Ergebnisse zuschneiden. Achten Sie darauf, mit weißer Farbe zu beschneiden, Crop ist ein einfacher 0/1-Schwellenwerttest, Sie sollten keine Farbe verwenden.