2017-06-24 9 views
1

すべてのデバイスで正しく表示されるようにアプリケーションを正しく設定する際に問題があります。私は自分のゲームをiPhoneに最適にしたいと思っています。GameScene(size: CGSize(width: 1334, height: 750))を使って自分のシーンサイズを設定し、.aspectFillを使用すると、iPadsでは私がうまくいくものを表示するスペースが少なくなります。問題は、各ノードのフレームの高さと幅に関連するようにノードを配置する方法です。私はself.frame.height,self.frame.widthself.frame.midXなどを使ってノードを配置しています。ゲームを走らせると、私は自分のiPhone 6で動作していると考えて正しく配置しますが、iPadではすべてが壊れていて、ノードは画面外です。私はこれを理解しようと夢中になります普遍的なアプリケーション用のスプライトキットのスケーリング

答えて

1

私のゲームでは、私のアプリに、各長さ、幅、高さなどをどれだけ大きくするかを指示する数値を使用して解決しました。その電話の幅と高さを使用して、他のデバイスのために拡大する必要がある要素を計算します。この例ではiPhone 4をベースに使用しますが、どのデバイスでも使用できるのは、そのデバイスに応じてnumbersを変更するだけです。

ポートレートモード:

var widthFactor = UIScreen.main.bounds.width/320.0 //I divide it by the default iPhone 4 width 
var heightFactor = UIScreen.main.bounds.height/480.0 

風景モード:

var widthFactor = UIScreen.main.bounds.width/480.0 //I divide it by the default iPhone 4 landscape width  
var heightFactor = UIScreen.main.bounds.height/320.0 

もしノード、例えばコイン画像を作成するときに、スケールファクタによって、その座標または幅/高さを掛け:

let coin = SKSpriteNode(imageNamed: "coin") 
coin.position = CGPoint(x: 25 * widthFactor, y: self.size.height - 70 * heightFactor) 
+0

にこれをクリアすることができ、画面上のいくつかのノードを得るように見えたが、彼らはまだ正しく配置していません。たとえば、ノードをx:200とy:200に配置した場合、iPhoneでは正しく表示されますが、iPadではx:200とy:400のようになります。両方のデバイスで同じように見えるようにする必要があります – Brejuro

+0

私は自分の答えを変更しました。 'x'に' widthFactor'を、 'y'に' heightFactor'を掛けましたか? – Eric

+0

ええ、私のアプリは横になっているので、幅と高さを入れ替えましたか? – Brejuro

1

私はあなたが探しているものは、この答えにあるかもしれないと思います:https://stackoverflow.com/a/34878528/6728196

具体的に私は(あなたの例に合わせて編集した)この部分は、あなたが探しているものだと思う:ユーザーが使用している場合

if UIDevice.current.userInterfaceIdiom == .pad { 
    // Set things only for iPad 

    // Example: Adjust y positions using += or -= 
    buttonNode.position.y += 100 
    labelNode.position.y -= 100 
} 

は基本的に、これは単にiPhoneの位置から一定量を加算または減算しますiPad。これはあまり複雑ではなく、画面の特定の値(self.size.width * decimalPercentage)だけ位置のx値とy値の両方を増減することができます。

この方法を使用するもう1つの利点は、iPhoneの位置を変更しているだけなので、設定したデフォルト値を使用して開始することです。その後、iPad上では、それが変更されます。

これは私が知っているように理解するのは難しい場合ので、私は説明

関連する問題