2016-10-14 6 views
10

Siwft 3ではノードの位置を計算するために使ったCGRectGetMidXとYが見つかりませんでした。 CGPointMakeも見つかりませんでした。この場合、SKSceneの中心にどのようにノードを設定できますか?SwiftのCGRectGetMidX/Yはどこですか3

ありがとうございます!

更新: この方法でノードを作成し、その位置を指定しました。

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) 

なぜ指定された場所と異なる場所が好きですか?私は最初にSwift3に変更があったと考えていましたが、CGPointMakeの減少はこの問題を引き起こしましたが、それが原因であるようには見えません。この場合、CGRectの使用はより良いですか?この位置の問題を解決するコードを書くことができれば非常に役に立ちます。再度、あなたの助けに感謝します。

+0

[CGRectMake、CGPointMake、CGSizeMake、CGRectZero、CGPointZeroはスイフトで利用できない]の可能な重複(http://stackoverflow.com/questions/37946990/cgrectmake-cgpointmake-cgsizemake-cgrectzero-cgpointzero-is-unavailable -in) –

+1

.midXと.midYを使用することができます –

+0

この質問を投稿しました。アドバイスはありますか? – bagels

答えて

24

Swiftでは、古いスタイルの表記を使用しないでください。ただ、コンストラクタとプロパティを使用:スウィフトに使用すべきではないなどCGRectGetMidX/YCGPointMake、同じよう

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

Cグローバル関数を(彼らはスウィフト3で取り外し、スウィフト2.2で非推奨になります)。

Swiftは、イニシャライザ、インスタンスメソッドなどを使用して、ネイティブタイプとしてとCGPointをインポートします。これらはC関数のようにグローバルネームスペースを汚染することはありません。

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 

上記のAPIリファレンスは上記にリンクされています。 CoreGraphics API referenceも便利です。

+0

あなたの答えと参考に感謝します。 SKSceneクラスでは、オブジェクトを作成していて、それを望みどおりの場所に配置したいと思っていました。myObject1.position = CGPoint(x:self.frame.size.width/2、y:self.frame.size 。高さ/ 2)。しかし、シミュレータ上で、生成されたノードは、私の指定された位置とどこかに異なっていました。それはまったく中心ではありませんでした。これはなぜ起こるのですか? – bagels

+0

私は擬似キットで作業していませんが、推測しなければならない場合、 'myObject1.position'はその中心ではなくノードのコーナーを指します。ドキュメントをすばやく見るだけで、おそらく['anchorPoint'](https://developer.apple.com/reference/spritekit/skspritenode/1519877-anchorpoint)をノードの視覚センター – Alexander

+0

うーん...それは正しく動作していません... – bagels

0

あなたのコードに中心計算が多すぎます。これを使って。

extension CGRect { 
     var center : CGPoint { 
      get { 
      return CGPoint(x:self.midX, y: self.midY) 
      } 
     } 
    } 
関連する問題