2016-06-01 12 views
0

Ich habe Mühe, einen Weg zu finden, den Bildschirm mit Zeilen und Zeilen von Sprite-Knoten zu füllen.Bildschirm mit Bodentexturknoten füllen

Ich kann derzeit nur eine durchgezogene Linie wie so bekommen.

enter image description here

Ich mag es so der Code selbst wiederholt, so dass es unter der aktuellen Zeile füllt, habe ich mehrere Dinge ohne Glück versucht.

Ich bin neu in SpriteKit und iOS Spielentwicklung, so dass ich etwas offensichtliches verpassen könnte.

Unten ist mein Code, jede Hilfe mit sehr geschätzt werden.

let world = SKNode() 
let ground = Ground() 

override func didMoveToView(view: SKView) { 
/* Setup your scene here */ 
self.backgroundColor = UIColor(red: 0.4, green: 0.6, blue: 0.95, alpha: 1) 
self.addChild(world) 
var groundPosition = CGPoint(x: -self.size.width, y: 600) 
let groundSize = CGSize(width: self.size.width * 3, height: 0) 
ground.spawn(world, position: groundPosition, size: groundSize) 


} 

class Ground: SKSpriteNode, GameSprite{ 
var textureAtlas: SKTextureAtlas = SKTextureAtlas(named: "ground.atlas") 

// Property named groundTexture to store current ground texture: 
var groundTexture:SKTexture? 
func spawn(parentNode: SKNode, position: CGPoint , size: CGSize) { 
    parentNode.addChild(self) 
    self.size = size 
    self.position = position 
    self.anchorPoint = CGPointMake(0, 1) 
    //default to the the mud texture 
    if groundTexture == nil { 
     groundTexture = textureAtlas.textureNamed("grass") 
    } 
    // Repeate the texture 
    createChildren() 
} 

//Builds nodes to repeate the ground 
func createChildren() { 
    if var texture = groundTexture{ 
     var tileCount:CGFloat = 0 
     let textureSize = texture.size() 
     let tileSize = CGSize(width: 25, height: 15) 
     // Build nodes until we cover the screen 
     while tileCount * tileSize.width < self.size.width{ 
      // randomly chooses the texture that will be used 
      let random = arc4random_uniform(50) 
      if random < 25{ 
       texture = textureAtlas.textureNamed("grass") 
      }else{ 
       texture = textureAtlas.textureNamed("mud") 
      } 
      let tileNode = SKSpriteNode(texture: texture) 
      tileNode.size = tileSize 
      tileNode.position.x = tileCount * tileSize.width 
      tileNode.anchorPoint = CGPoint(x: 0, y: 1) 
      self.addChild(tileNode) 
      tileCount++ 
     } 
    } 
} 
+0

Sie nicht die y-Eigenschaft der Position überall ändern. –

+0

Danke Nick für das Kommentieren, hast du eine ungefähre Vorstellung davon, wo die y-Position eingestellt werden soll? Dies ist das Bit, auf dem ich feststecke. –

+0

Bevor Sie sich mit der Optimierung beschäftigen, sollte es wahrscheinlich eine äußere Schleife außerhalb Ihrer aktuellen while-Schleife geben, die die y jedes Mal ändert, wenn Sie einen horizontalen Durchlauf für _n_mal ausgeführt haben (basierend auf der Größe der Szene). –

Antwort

1

versuchen, dies zu verwenden, anstatt createchildren():

// Anzahl der Zeilen benötigt, um den Bildschirm zu füllen.

var num = self.frame.height/groundTexture.size.height 

// Methode den Bildschirm mit wiederholtem Gras zu füllen:

for no in 2..num { 

     var groundTextRep = groundTexture.copy 

     groundTextRep.position = CGPoint(x: groundTexture.position.x, y: (groundTexture.position.y * no) 
    } 
+0

Danke für diesen Kommentar Fady ich schaffte es, dies auszuarbeiten, aber mein Weg war nicht so sauber wie dieses lol, ich werde es versuchen und krank lassen Sie wissen, wie ich mich verstehe. –

+0

@ConorHolman Der beste Dank für diese Gemeinschaft ist, die Fay Lateef Antwort als die richtige Antwort auszuwählen, indem Sie es markieren, ich sehe, dass Sie in Ihren Threads nie getan haben, stellen Sie es bitte so ein, dass die anderen Benutzer die Lösungen richtig finden können. –

Verwandte Themen