Dans mon jeu, j'essaie de placer des images sur différents calques pour que les choses soient claires.Comment placer des objets sur différents calques Z dans SpriteKit
E.g. Le terrain est à la couche Z 0, tandis que les améliorations et les villes sont à la couche Z 1, tandis que les unités sont à une couche supérieure.
Je suis un tutoriel (http://helpmecodeswift.com/sprite-kit/spritekit-gameift-2-0-part-2) et je suis en train de copier leur méthode (changer les noms pour répondre à mes besoins) et cela ne semble pas fonctionner.
Voici deux images de l'exacte même code (je veux celui à droite, bien que la ville rouge devrait avoir une unité au-dessus de celui-ci aussi):
Question (pas question de sujet): Pourquoi ces images ne vont-elles pas charger? Remarque: Les grands carrés de couleur sont des "villes", tandis que les pièces à la recherche de pions sont des unités, les graphismes sont juste remplis jusqu'à ce que j'achève la majeure partie du jeu et que je crée des textures dédiées.
Voici le code qui traite des couches (unités et villes sont mises sur les couches à droite):
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!
vous ne montrant aucun code où vous avez réellement régler le zPosition des objets –
Ils sont ajoutés t o les couches que j'ai créées. Par exemple. 'improvementsLayer.addChild (BlueCity)' –
oui, mais vous ne montrez pas le code. Vous posez une question spécifique sur la superposition de zPosition, mais vous ne montrez pas le code correspondant à ce que vous essayez déjà. –