2016-10-14 3 views
10

IN Siwft 3 konnte ich CGRectGetMidX und Y nicht finden, die ich verwendet, um die Position der Knoten zu berechnen. Auch ich konnte CGPointMake nicht finden. Wie kann ich in diesem Fall Knoten im Zentrum von SKScene setzen?Wo ist CGRectGetMidX/Y in Swift 3

Danke!

Update: Ich erstellte einen Knoten und spezifizierte die Position davon, indem Sie auf diese Weise schreiben;

let node = SKSpriteNode() 
node.position = CGPoint(x:self.frame.size.width/2, y:self.frame.size.height/2) 
node.size = CGSize(width: 100, height: 100) 
node.color = SKColor.red 
self.addChild(node) 

Warum ist es woanders wie ein anderer Ort als der angegebene Ort? Ich dachte zuerst, dass es eine Änderung in Swift3 gab und die Depresciation von CGPointMake verursachte dieses Problem, aber es scheint nicht, dass es die Ursache ist. Ist in diesem Fall die Verwendung von CGRect besser? Es ist sehr hilfreich, wenn Sie Code schreiben könnten, der dieses Positionsproblem behebt. Nochmals vielen Dank für Ihre Hilfe.

+0

Mögliche Duplikat [CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero ist nicht verfügbar in Swift] (http://stackoverflow.com/questions/37946990/cgrectmake-cgpointmake-cgsizemake-cgrectzero-cgpointzero-is-unavailable -in) –

+1

können Sie .midX und .midY verwenden –

+0

Ich habe diesen Fragebeitrag aktualisiert. Hast du irgendeinen Ratschlag? – bagels

Antwort

24

In Swift sollten Sie diese alten Schreibweisen nicht verwenden. Nur die Konstrukteure verwenden und Eigenschaften:

let point = CGPoint(x: 1, y: 2) 
let rect = CGRect(x: 1, y: 2, width: 3, height: 4) 
let mx = rect.midX 
4

C globale Funktionen wie CGRectGetMidX/Y, CGPointMake usw. sollten nicht in Swift verwendet werden (sie sind in Swift 2.2, entfernt in Swift 3 veraltet).

Swift importiert CGRect und CGPoint als native Typen, mit Initialisierer, Instanzmethoden usw. Sie sind viel natürlicher zu verwenden, und sie verschmutzen nicht den globalen Namensraum, wie die C-Funktionen einmal getan haben.

let point = CGPoint(x: 0, y: 0) //replacement of CGPointMake 

let rect = CGRect(x: 0, y: 0, width: 5, height: 5) //replacement of CGRectMake 

let midX = rect.midX //replacement of CGRectGetMidX 
let midY = rect.midY //replacement of CGRectGetMidY 

Ihre respect API-Referenz ist oben verlinkt. Sie könnten auch die CoreGraphics API reference auch praktisch finden.

+0

Vielen Dank für Ihre Antwort und die Referenz. In einer SKScene-Klasse habe ich ein Objekt erstellt und wollte es so platzieren, wie ich es wollte, also war mein Schreiben myObject1.position = CGPoint (x: self.frame.size.width/2, y: self.frame.size .height/2). Im Simulator jedoch war der erzeugte Knoten irgendwo anders als meine spezifizierte Position. Es war überhaupt nicht in der Mitte. Warum passiert das? – bagels

+0

Ich habe nicht mit dem Kit "bostity" gearbeitet, aber wenn ich raten musste, bezieht sich "myObject1.position" auf die Ecke des Knotens, nicht auf seine Mitte. Schon bei einem kurzen Blick auf die Dokumente sieht es so aus, als ob Sie wahrscheinlich den ['anchorPoint'] (https://developer.apple.com/reference/spritekit/skspritenode/1519877-anchorpoint) als Knoten definieren möchten Visual Center – Alexander

+0

Hmm ... Es funktioniert nicht richtig ... – bagels

0

Haben Sie zu viele Berechnungen in Ihrem Code. Benutze das.

extension CGRect { 
     var center : CGPoint { 
      get { 
      return CGPoint(x:self.midX, y: self.midY) 
      } 
     } 
    }