In meinem Spiel versuche ich Bilder auf verschiedenen Ebenen zu platzieren, so dass klar ist, wo die Dinge sind.Wie man Objekte auf verschiedene Z-Ebenen in SpriteKit setzt
z. Terrain befindet sich auf der Z-Ebene 0, während Verbesserungen und Städte sich auf der Z-Ebene 1 befinden, während sich die Einheiten auf einer höheren Ebene befinden.
Ich folge einem Tutorial (http://helpmecodeswift.com/sprite-kit/spritekit-gameift-2-0-part-2) und bin Kopieren ihrer Methode (Ändern der Namen an meine Bedürfnisse) und es scheint nicht zu funktionieren.
Hier sind zwei Bilder aus exakt den gleichen Code (ich das auf der rechten Seite wollen, obwohl die rote Stadt eine Einheit auf ihm haben sollte):
Frage (keine Themenfrage): Warum werden diese Bilder nicht geladen?
Hinweis: Die großen Farbquadrate sind "Städte", während die Schachfiguren Einheiten sind, die Grafiken sind nur Füller, bis ich den Großteil des Spiels beende und tatsächlich dedizierte Texturen mache.
Hier ist der Code, der mit den Schichten beschäftigt (Einheiten und Städte auf den richtigen Schichten gelegt werden):
class GameScene: SKScene {
var mapTerrain: SKTileMapNode!
override func sceneDidLoad() {
cam = SKCameraNode()
cam.xScale = 1
cam.yScale = 1
self.camera = cam
self.addChild(cam)
cam.position = CGPoint(x: 100, y: 100)
setUpLayers()
loadSceneNodes()
setUpUI()
testSpawn()
//print("\(self.frame.width), \(self.frame.height)")
}
func setUpUI(){
zoomIn.setButtonType(NSMomentaryLightButton)
zoomIn.title = "Zoom In"
zoomIn.alternateTitle = "Zoom In"
zoomIn.acceptsTouchEvents = true
view?.addSubview(zoomIn) //put button on screen
zoomOut.setButtonType(NSMomentaryLightButton)
zoomOut.title = "Zoom Out"
zoomOut.alternateTitle = "Zoom Out"
zoomOut.acceptsTouchEvents = true
view?.addSubview(zoomOut) //put button on screen
endTurn.setButtonType(NSMomentaryLightButton)
endTurn.title = "End Turn"
endTurn.alternateTitle = "End Turn"
endTurn.acceptsTouchEvents = true
view?.addSubview(endTurn) //put button on screen
}
func loadSceneNodes(){
guard let mapTerrain = childNode(withName: "mapTerrain")
as? SKTileMapNode else{
fatalError("Background node not loaded")
}
self.mapTerrain = mapTerrain
//GKGridGraph
}
func setUpLayers() {
improvementsLayer = SKNode()
improvementsLayer.name = "Objects Layer"
addChild(improvementsLayer)
unitsLayer = SKNode()
unitsLayer.name = "Units Layer"
addChild(unitsLayer)
}
func testSpawn(){
if spawnCount == 0{
for i in 0...10{
spawnRedLegion(at: mapTerrain.centerOfTile(atColumn: 2, row: i), i: i)
}
for i in 0...10{
spawnBlueLegion(at: mapTerrain.centerOfTile(atColumn: 3, row: i), i: i)
}
spawnCount += 1
for i in 0...0{
spawnRedCity(at: mapTerrain.centerOfTile(atColumn: 0, row: 1), i: i)
spawnBlueCity(at: mapTerrain.centerOfTile(atColumn: 5, row: 1), i: i)
}
}
}
func spawnRedLegion(at: CGPoint, i: Int){
let RedLegion = legion(texture: textureRedLegion, moveTo: nil, tag: i, health: 2)
RedLegion.position = at
RedLegion.team = "Red"
unitsLayer.addChild(RedLegion)
legionList.append(RedLegion)
}
func spawnBlueLegion(at: CGPoint, i: Int){
let BlueLegion = legion(texture: textureBlueLegion, moveTo: nil, tag: i, health: 2)
BlueLegion.position = at
BlueLegion.team = "Blue"
unitsLayer.addChild(BlueLegion)
legionList.append(BlueLegion)
}
func spawnRedCity(at: CGPoint, i: Int){
let RedCity = city(texture: textureRedCity, tag: i, health: 1, production: 1, workDone: 0)
RedCity.position = at
RedCity.team = "Red"
improvementsLayer.addChild(RedCity)
cityList.append(RedCity)
}
func spawnBlueCity(at: CGPoint, i: Int){
let BlueCity = city(texture: textureBlueCity, tag: i, health: 1, production: 1, workDone: 0)
BlueCity.position = at
BlueCity.team = "Blue"
improvementsLayer.addChild(BlueCity)
cityList.append(BlueCity)
}
....
}
//this is in another file
let textureRedLegion = SKTexture(imageNamed: "Red Checker")
let textureBlueLegion = SKTexture(imageNamed: "Black Checker")
let textureRedCity = SKTexture(imageNamed: "Red Square")
let textureBlueCity = SKTexture(imageNamed: "Black Square")
struct layers {
static let background: CGFloat = 0
static let improvements: CGFloat = 1
static let units: CGFloat = 3
}
var improvementsLayer: SKNode!
var unitsLayer: SKNode!
Sie keinen Code zeigt, wo Sie die zPosition der Objekte tatsächlich eingestellt –
Sie t hinzugefügt werden o die Ebenen, die ich erstellt habe. Z.B. 'improvementsLayer.addChild (BlueCity)' –
ja, aber Sie zeigen den Code nicht. Sie stellen eine Frage speziell zur zPosition-Schichtung, zeigen aber nicht den relevanten Code zu dem, was Sie bereits versuchen. –