2017-10-10 3 views
-1

Ich möchte eine universelle Anwendung mit SpriteKit-Ansicht erstellen.
Aber das iPad Display ist größer als iPhone Display!Größe der Knoten in der SpriteKit-Ansicht entsprechend der unterschiedlichen Anzeigegröße ändern

1) Wie kann ich die Knoten, die sie in der Größe ändern, entsprechend den Anzeigedimensionen positionieren? Ich meine, wenn ich einen Knoten für iPhone Bildschirm hinzufügen möchte ich nicht, dass auf iPad die Dimension dieses Knotens ist gleich der Dimension von auf dem iPhone, ich möchte die gleichen Knoten mit differents Größen für jeden anderen Bildschirm haben.

2) Und auch Wie kann ich diese Knoten für differents Anzeige positionieren?

Vielen eine Menge

Antwort

0

ersten Satz eine automatische Marge für Ihre App:

var gameArea: CGRect 

override init(size: CGSize) { 

    let maxAspectRatio: CGFloat = 16.0/9.0 
    let playableWidth = size.height/maxAspectRatio 
    let margin = (size.width - playableWidth)/2 
    gameArea = CGRect(x: margin, y: 0, width: playableWidth, height: size.height) 

    super.init(size: size) 
} 

Dann Sie Ihre SKNode

player.physicsBody = SKPhysicsBody(polygonFrom: path) 
player.physicsBody!.affectedByGravity = false 
player.physicsBody!.categoryBitMask = PhysicsCategories.Player 
player.physicsBody!.collisionBitMask = PhysicsCategories.None 
player.physicsBody!.contactTestBitMask = PhysicsCategories.Enemy 
player.constraints = [SKConstraint.positionX(SKRange(lowerLimit: gameArea.minX + player.size.width/2, upperLimit: gameArea.maxX - player.size.width/2))]` 
+0

Danke, aber ich meine Farbe Sprites nicht Knoten. –

+0

oh ok, tut mir leid, leider kann ich dir nicht helfen .. –

+0

das ist fast das gleiche wie .aspectFit aber mit mehr Arbeit – Knight0fDragon

0

Ich habe wollen die gleichen Knoten mit differents implementieren können Größen für jeden unterschiedlichen Bildschirm.

Wenn ich verstehe, was Sie wollen, hier meine Antwort:

Sie haben zwei Möglichkeiten:

1 - https://www.raywenderlich.com/49695/sprite-kit-tutorial-making-a-universal-app-part-1

2 - programmatisch Ändern der Größe:

// code in objc 

// defines global 
#define IS_IPAD  (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 

#define SCALE_FACTOR (IS_IPAD ? 2 : 1) // what ever you want 

// usage in the code 
sprite.size = CGSizeMake(width * SCALE_FACTOR, height * SCALE_FACTOR); 

// etc... 

EDIT:

Die Position ist immer relativ zu den Eltern. Die Ankerpunkte sind auch hier wichtig. Hier ein Beispiel, wie man ein Label direkt an die Szene anfügt. Die Etikettenposition ist oben in der Mitte:

func addBestScoreLabel(bestScore: Int) { 
     let bestScoreLabel = SKLabelNode() 

     bestScoreLabel.text = "Best Score: " + String(bestScore) 
     bestScoreLabel.fontSize = 20 // what ever 
     bestScoreLabel.fontColor = .red // what ever 
     bestScoreLabel.zPosition = 10 // what ever 
     bestScoreLabel.position = CGPoint(x: self.frame.width/2, y: self.frame.height - bestScoreLabel.frame.height) 

     // add the label to the scene 
     self.addChild(bestScoreLabel) 
    } 

// call the function 
addBestScoreLabel(bestScore: 1234) 
+0

wo muss ich den Code? –

+0

Zuerst erstellst du dein Sprite, richtig? Danach gibst du ihm eine Größe. Wenn Sie dies tun, können Sie den Skalierungsfaktor je nach Gerät berücksichtigen. – Yann

+0

Können Sie bitte Code schreiben? das ist mein Code: bestScoreLabel.position = CGPoint (x: self.frame.width/256, y: selbst.frame.height/256 + self.bestScoreLabel.frame.width/3 - 20) bestScoreLabel.scale (zu : CGSize (width: self.frame.width - 30, height: self.frame.width/2)) vielen Dank –

Verwandte Themen