2016-07-07 6 views
0

私は6sのiPhoneで、別のディーゼルで私のゲームを開いて問題を抱えていますプラスは、円の中心を大きくし、また、ライン上の小さな円が位置を変更する、私は中央の円が同じサイズ小さな円は常にこの半分の線であることを示します。すべてのデバイスで同じ距離になるようにどのようにスケールするのですか?

import SpriteKit 


struct Circle { 
var position:CGPoint 
var radius:CGFloat 
} 

class GameScene: SKScene { 
let node = SKNode() 
let sprite = SKShapeNode(circleOfRadius: 6) 
var rotation:CGFloat = CGFloat(M_PI) 
var circles:[Circle] = [] 
var circuloFondo = SKSpriteNode() 
var orbita = SKSpriteNode() 

let padding2:CGFloat = 26.0 
let padding3:CGFloat = 33.5 

let padding5:CGFloat = 285.5 
var circulo = SKSpriteNode() 
override func didMoveToView(view: SKView) { 
scaleMode = .ResizeFill 

    backgroundColor = UIColor(red: 0.3, green: 0.65, blue: 0.9, alpha: 1) 

orbita = SKSpriteNode(imageNamed: "orbita2") 
orbita.size = CGSize(width:view.frame.size.width - padding2 , height: view.frame.size.width - padding2) 
orbita.color = UIColor.whiteColor() 
orbita.colorBlendFactor = 1 
orbita.alpha = 1 
orbita.position = view.center 
self.addChild(orbita) 
orbita.zPosition = 3 


circuloFondo = SKSpriteNode(imageNamed: "circuloFondo") 
circuloFondo.size = CGSize(width:view.frame.size.width - padding5 , height: view.frame.size.width - padding5) 
circuloFondo.color = UIColor.whiteColor() 
circuloFondo.alpha = 1 
circuloFondo.position = view.center 
self.addChild(circuloFondo) 
circuloFondo.zPosition = 0 

    let radius1:CGFloat = (view.frame.size.width - padding3)/2 - 1 
    let radius2:CGFloat = (view.frame.size.width - padding5)/2 + 6.5 

circles.append(Circle(position: view.center, radius: radius1)) 
circles.append(Circle(position: view.center, radius: radius2)) 
addChild(node) 


node.addChild(sprite) 
if let circle = nextCircle() { 
node.position = circle.position 
sprite.fillColor = SKColor.whiteColor() 
sprite.zPosition = 4.0 
sprite.position = CGPoint(x:circle.radius, y:0) 
rotate() 
} 

enter image description here

enter image description here

+0

あなたの質問を明確にしてください、それはかなり混乱しています.. –

+0

私はあなた自身の将来の頭痛のトンを避けるために私の答えをチェックすることをお勧めします。 – crashoverride777

答えて

2

あなたは、このような画面の幅を取得することができます

let screenSize: CGRect = UIScreen.mainScreen().bounds 
let screenWidth = screenSize.width 

をし、その後screenWidthの割合であるためにあなたのUIの要素を設定します。たとえば、

私はこのメソッドを成功裏に数回使用しましたが、うまくいくと思います。

+0

ありがとう、クリス、ロック! – Alex

0

あなたの主な問題は、あなたのシーンモードがResizeFillに設定されていることです。これはあなた自身のスケーリングをすべて行わなければならないほどの頭痛を引き起こします。したがって、サークルはさまざまなデバイスでさまざまなサイズになります。スケールモードresizeFillを使用すると、物理エンジンやfontSizesなど、すべてのデバイスで調整する必要のある項目にも影響します。

デフォルトのシーンサイズが1024 * 768(ランドスケープ)または768 * 1024(ポートレート)のシーンスケールモード.AspectFillを使用することをお勧めします。これは、xCodeのデフォルトのゲームテンプレートと同じです。

このようにすべてのiPhoneですべてが同じように見えます。 iPadsでは、画面の上部と下部に多少の画面スペースがあり、背景を覆うだけです。主なやり方は、あなたが中心からあなたのものを配置することです。

さらに、アセットカタログのユニバーサルアセットを使用することができます。すべてが綺麗に見えますが、ぼやけてはなりません。

この方法で調整する必要があるのは、iPadsでは上下にあるボタンを上下に移動する必要があることだけです。

スケールモードResizeFillを使用すると実際に問題があると私は経験から話すことができるので、これを検討することを強くお勧めします。私はそれらを書き直す前に2つのゲームでこの痛みを経験しました。すべてのデバイスに一貫性がなく、プロセスで非常に多くのバグを引き起こしたからです。すべてのデバイスでテストを無駄にし、正しいと感じるまで値を調整していた時間については話しません。

これが役に立ちます。

関連する問題