2016-04-27 11 views
0

Ich habe eine willkürliche nicht-selbstschneidendes Polygon SKShapeNode A. Als grafische Effekt geformt würde ich eine andere SKShapeNode B mit Skala von 0,7 auf der Oberseite des A.Positionierung SKShapeNodes auf der jeweils anderen für grafische Effekte

positionieren möchte

Ich bin in Sprite-Kits Koordinatensystem verloren. Ich kann den SKShapeNode B nicht richtig positionieren. Es sollte ein einfaches Problem sein, aber ich bleibe dabei. ALLE HILFE WERDEN BEREITGESTELLT!

    createdShape.name = "whiteArea" 
        createdShape.strokeColor = shapeBorderColor 
        createdShape.lineWidth = 0.0 
        createdShape.fillColor = shapeFillColor 
        createdShape.alpha = 1.0 
        createdShape.zPosition = shapeZPosition 
        createdShape.glowWidth = 3.0 

        let graphicAddonShape = createdShape.copy() as! SKShapeNode 
        graphicAddonShape.setScale(0.7) 
        graphicAddonShape.lineWidth = 0 
        graphicAddonShape.zPosition = shapeZPosition + 1 
        graphicAddonShape.fillColor = UIColor(red: 15/255, green: 15/255, blue: 15/255, alpha: 1.0) 
        graphicAddonShape.name = "blackArea" 
        graphicAddonShape.physicsBody = nil 

        graphicAddonShape.position.x = createdShape.frame.width/2 - graphicAddonShape.frame.width/2 
        graphicAddonShape.position.y = createdShape.frame.height/2 - graphicAddonShape.frame.height/2 
        createdShape.addChild(graphicAddonShape) 
        self.addChild(createdShape) 
+0

Es wäre viel einfacher, wenn Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) Code bereitstellen könnten, der das Problem hervorbringen kann, über das Sie sprechen. Außerdem sollten Sie als Zusatz ein Bild hinzufügen, das eine gewünschte Ausgabe darstellt. – Whirlwind

+0

Einige Dinge zu beachten, abgesehen von dem, was @SteveIves bereits gezeigt hat, ist, dass 'frame' -Eigenschaft die Kinder dieses Knotens ignoriert. Wenn Sie möchten, dass Kinder in die Berechnung einbezogen werden, sollten Sie die Methode 'calculateAccumulatedFrame()' verwenden. – Whirlwind

Antwort

0

Dies ist der komplette Xcode Spielplatz Code mit plus Ich habe einige Codes am Anfang hinzugefügt, um die Szene zu erstellen und einige Variablen für den Hub einzustellen und Füllfarbe usw.

//: Playground - noun: a place where people can play 

import UIKit 
import SpriteKit 
import XCPlayground 

let sceneView = SKView(frame: CGRect(x: 0, y: 0, width: 480, height: 320)) 

let scene = SKScene(size: CGSize(width: 480, height: 320)) 

sceneView.presentScene(scene) 

XCPShowView("My Scene", view: sceneView) 

var createdShape = SKShapeNode(circleOfRadius: 35) 
let shapeBorderColor = SKColor.greenColor() 
let shapeFillColor = SKColor.yellowColor() 
let shapeZPosition: CGFloat = 1.0 
scene.backgroundColor = SKColor.grayColor() 

createdShape.name = "whiteArea" 
createdShape.strokeColor = shapeBorderColor 
createdShape.lineWidth = 0.0 
createdShape.fillColor = shapeFillColor 
createdShape.alpha = 1.0 
createdShape.zPosition = shapeZPosition 
createdShape.glowWidth = 3.0 

createdShape.position = CGPoint(x: 150, y: 150) 

let graphicAddonShape = createdShape.copy() as! SKShapeNode 
graphicAddonShape.setScale(0.7) 
graphicAddonShape.lineWidth = 0 
graphicAddonShape.zPosition = shapeZPosition + 1 
graphicAddonShape.fillColor = UIColor(red: 15/255, green: 15/255, blue: 15/255, alpha: 1.0) 
graphicAddonShape.name = "blackArea" 

graphicAddonShape.position = CGPointZero // This will be in it's parent co-ordinate system 
createdShape.addChild(graphicAddonShape) 
scene.addChild(createdShape) 

Um die Ausgabe zu sehen, müssen Sie auf Ansicht-> Assistent-Editor-> Assistenz-Editor anzeigen klicken.

Sie werden sehen, dass ich die position von graphicAddonShape zu CGPoint (0,0) gesetzt habe. Die position Eigenschaft eines SKShapeNode bezieht sich auf seine Mitte, also setzen wir das Zentrum von graphicAddonShape auf Position (0,0) in dessen Eltern (createdShape) Koordinatensystem, d.h. createdShape 's Zentrum. Um den Unterschied zu sehen, ändern Sie die zweite von den letzten Zeile von:

createdShape.addChild(graphicAddonShape) 

zu

scene.addChild(graphicAddonShape) 

zu sehen, wie der schwarze Kreis positioniert ist, je nachdem, wer es ist Eltern ist.

+0

In SKShapeNode gibt es kein Größenattribut. Meinst du Rahmen? – user594883

+0

Das scheint nicht zu funktionieren. Die Ergebnisse sind wie folgt. Knoten A in weiß und Knoten B in schwarz. Knoten stehen nicht aneinander und der Unterschied zwischen den Knoten wächst, je nachdem, an welcher Grenze sie sich befinden. http://d.pr/i/119rF – user594883

+0

Ich refaktorierte die Frage, um den Code einzuschließen. – user594883