Così ho una messa a punto gioco di base che si possono trovare al link qui sotto bitbucket:bloccaggio telecamera intorno lo sfondo di una scena in SpriteKit
Attualmente sto attraversando un periodo difficile capire come traduci il nodo della videocamera in relazione al layout della scena.
L'obiettivo è far seguire la videocamera al giocatore fino a raggiungere un limite d'angolo definito dalla dimensione della scena. In questa configurazione particolare scenario di test, la scena è 1000x1000 dimensioni con una scala di fotocamera 1.
Il codice di seguito viene utilizzato per modificare la posizione della fotocamera quando una nuova posizione viene impostato per seguire il carattere:
var cameraPosition: CGPoint {
get {
return CGPoint(x: camera!.position.x, y: camera!.position.y)
}
set {
let cameraScale = CGFloat(1)
let sceneScale = CGFloat(1)//CGFloat(1 - 0.44 + 0.05 /*possible rounding error adjustment*/)
// let viewAspectRatio = CGRectGetWidth(view!.frame)/CGRectGetHeight(view!.frame)
let newPositionValue = double2(x: Double(newValue.x * sceneScale), y: Double(newValue.y * sceneScale))
let scaledSceneSize = CGSize(width: size.width * sceneScale , height: size.height * sceneScale)
//// scaledSceneSize.height = scaledSceneSize.height/viewAspectRatio
let cameraSize = view!.bounds.size
let scaledCameraSize = CGSize(width: cameraSize.width * cameraScale, height: cameraSize.height * cameraScale)
let minX = 0//-scaledSceneSize.width * anchorPoint.x + scaledCameraSize.width/2
let minY = -219//-scaledSceneSize.height * anchorPoint.y + scaledCameraSize.height/2
let minValues = double2(x: Double(minX), y: Double(minY))
let maxX = 0//(scaledSceneSize.width * anchorPoint.x - scaledCameraSize.width/2) //size.width - cameraSize.width/2
let maxY = 219//(scaledSceneSize.height * anchorPoint.y - scaledCameraSize.height/2) //- cameraSize.height/2
let maxValues = double2(x: Double(maxX), y: Double(maxY))
let clampedPosition = clamp(newPositionValue, min: minValues, max: maxValues)
camera!.position = CGPoint(x: (clampedPosition.x/Double(sceneScale)), y: (clampedPosition.y/Double(sceneScale)))
}
}
Ci sono dei valori fondamentali che attualmente si adattano alle dimensioni della scena richiesta e non sono sicuro su come ottenere questi risultati tramite la scala. La scala di default è:
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFill
Senza la conoscenza di sapere c'è una traduzione in scala, per impostazione predefinita, mi aspetterei i confini di essere largestSceneDimensionXValue - cameraSize.width/2 largestSceneDimensionYValue - cameraSize.height/2
Come esempio di alto livello. Qualcuno potrebbe aiutarmi a ottenere questa traduzione?
Nel complesso la scena dovrebbe essere simile al seguente in tutti gli angoli:
VS avere l'overflow sfondo nero nella telecamera come tale:
Questo è molto simile al mio primo approccio che non funziona quando ridimensionamento della fotocamera e altre condizioni. Il motivo principale per cui ho allegato il codice sopra è di fare riferimento allo scenario specifico. Se riesci a far funzionare il codice sopra riportato nel repository, allora dovrebbe essere perfetto ma sono al 100% positivo che non lo farà. La scala della fotocamera dovrebbe essere .44, ma ho normalizzato tutto per capire da dove vengono i valori. – TheCodingArt
Notare la larghezza della scena non corrisponde alla larghezza della telecamera. – TheCodingArt
ho giocato con il tuo codice e sta iniziando a diventare il mio progetto lol .. ce n'è davvero tanto da fare .. se fossi in te potrei iniziare un nuovo progetto di esempio aggiungendo in ogni elemento di complessità (cameraScale .. ecc.) uno alla volta fino a trovare un modo più semplice per risolvere il problema. – hamobi