2016-03-22 20 views
2

Ich habe wie unten gekennzeichnet:Wie kann ich eine Anzahl von SpriteNodes innerhalb der Bildschirmgröße erscheinen lassen und sich innerhalb des Bildschirms bewegen?

func spriteCollection(count : Int) -> [SKSpriteNode]{ 

    var spriteArray = [SKSpriteNode]() 

    for _ in 0..<count { 

     let sprite = SKSpriteNode(imageNamed: "node.png") 

     //giving random position to sprites, but problem is some sprites are going invisible. How do I make it appear inside the view? 

     let x = CGFloat(arc4random_uniform(UInt32(UIScreen.mainScreen().bounds.size.height))) 

     let y = CGFloat(arc4random_uniform(UInt32(UIScreen.mainScreen().bounds.size.width))) 

     sprite.position = CGPoint(x: x, y: y) 

     spriteArray.append(sprite) 

    } 

    return spriteArray 

} 

override func didMoveToView(view: SKView) { 

    let spriteCollection = spriteCollection(10) 

    for sprite in spriteCollection{ 

     //facing problem here, not sure how to move it inside the view 

     let x = CGFloat(arc4random_uniform(UInt32(size.height))) 

     let y = CGFloat(arc4random_uniform(UInt32(size.width))) 

     let action = SKAction.moveTo(CGPoint(x: x , y: y), duration: 5) 

     sprite.runAction(action) 

     addChild(sprite) 
    } 
} 

Das Problem, das ich ist jetzt mit Blick auf bin, wenn ich Zählung 10 bis spriteCollection passieren, ich nur 5 oder 6 Sprites sehen und ruhen alle versteckt sind. Ich möchte nur alle Sprites innerhalb der Bildschirmgröße erscheinen lassen und wenn ich Bewegung mache, sollte ihre Position auch innerhalb des Bildschirms sein. Ich arbeite im Querformat. Könnte mir bitte jemand helfen, dieses Problem zu lösen ..

+0

So die Größe der Szene überprüfen und die Spawn-Koordinaten prüfen und sehen, ob einige Knoten sind off- Bildschirm ... – Whirlwind

+0

Ich habe gerade die Positionen der Knoten sowie die Breite und Höhe der Ansicht gedruckt. Optional (667,0) <--- Ansicht der Breite Optional (375,0) <--- Ansicht der Höhe x und y-Positionen aller Knoten unter (492,0, 62,0) (479,0, 67,0) (189,0, 248,0) (91,0 , 298,0) (54,0, 214,0) (490,0, 155,0) (590,0, 224,0) (127,0, 122,0) (328,0, 233,0) (204,0, Sieht aus 195,0) wie alle Koordinaten innerhalb sind aber noch einige Knoten sind nicht sichtbar. Was mache ich falsch? –

+0

Wie groß ist die Szene? (Sie fügen der Szene Knoten hinzu). Die Szene kann eine andere Größe als die Ansicht haben. Standardmäßig ist die Szenengröße 1024 x 768, wenn Sie sie aus der .sks-Datei laden. – Whirlwind

Antwort

0

Das Problem, das Sie laufen, ist die Tatsache, dass die Grenzen des Bildschirms auf das Gerät im Hochformat ausgerichtet sind, während die Grenzen der Ansicht auf der Bildschirmgröße basieren im Landschaftsmodus.

Eine Möglichkeit, das Problem zu lösen wäre Ihre x- und y-Berechnungen umzukehren, wenn Sie in „Platz auf dem Bildschirm“

// Note how width and height appear to be "backward" here. That's because the screen 
// coordinates are defined by the portrait orientation of the device, 
// but the view will eventually be in a landscape orientation 

let x = CGFloat(arc4random_uniform(UInt32(UIScreen.mainScreen().bounds.size.width))) 
let y = CGFloat(arc4random_uniform(UInt32(UIScreen.mainScreen().bounds.size.height))) 

Aber ich denke, eine bessere Idee, Sprites wäre zu warten, arbeiten zu bewegen in ihre Ausgangspositionen bis nach der Ansicht erstellt wurde und sie dann auf die Grenzen der Ansicht und nicht zufällig basierend Position, um den Grenzen des Bildschirm

+0

Danke für Ihren Vorschlag, wenn Sie in meinem Code sehen können, habe ich die Breite und Höhe vertauscht. Für x-Position betrachte ich Höhe und umgekehrt. Aber ich stehe immer noch vor dem Problem. und ich habe auch versucht, die Ansichtsgrenzen anstelle von Bildschirm zu betrachten, aber immer noch kein Glück. Haben Sie noch weitere Vorschläge, um dies zu reslove? –

+0

Ich druckte nur die Positionen der Knoten sowie Breite und Höhe der Ansicht. Optional (667,0) Ansicht der Breite Optional (375,0) Ansicht der Höhe (492,0, 62,0) (479,0, 67,0) (189,0, 248,0) (91.0, 298.0) (54.0, 214.0) (490,0, 155,0) (590,0, 224,0) (127,0, 122,0) (328,0, 233,0) (204,0, 195,0) –