so dass ich ein Basis-Spiel-Setup haben, die unten in der bitbucket Link zu finden ist:Spann Kamera um den Hintergrund einer Szene in SpriteKit
Ich bin derzeit eine harte Zeit zu verstehen, wie zu übersetze den Kameraknoten in Relation zum Layout der Szene.
Ziel ist es, dass die Kamera dem Player bis zum Erreichen einer durch die Größe der Szene definierten Eckgrenze folgt. In diesem speziellen Testszenario Setup ist die Szene 1000x1000 in der Größe mit einer Kamera Skala von 1
Der folgenden Code verwendet wird, um die Position der Kamera zu ändern, wenn eine neue Position gesetzt, um den Charakter zu folgen:
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)))
}
}
Es gibt Hardcore-Werte, die derzeit der erforderlichen Szenengröße entsprechen, und ich bin mir nicht sicher, wie ich diese Ergebnisse über die Skala erhalten kann. Die Skala ist standardmäßig:
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFill
Ohne das Wissen, zu wissen, gibt es eine Übersetzung in der Skala, standardmäßig würde ich die Grenzen erwartet largestSceneDimensionXValue sein - cameraSize.width/2 largestSceneDimensionYValue - cameraSize.height/2
Als High-Level-Beispiel. Kann mir jemand helfen, diese Übersetzung zu bekommen?
Insgesamt ist die Szene wie die folgende in allen Ecken aussehen sollte:
Dies ist sehr ähnlich zu meinem ersten Ansatz, der nicht funktioniert, wenn die Kamera zurück und andere Bedingungen skaliert. Der Hauptgrund, warum ich den Code oben angehängt habe, ist das Referenzszenario. Wenn Sie das oben genannte in den Code, der im Repo gepostet wird, arbeiten können, dann sollte es perfekt sein, aber ich bin 100% positiv, wird es nicht. Die Kamera-Skalierung sollte 0,44 sein, aber ich habe alles normalisiert, um herauszufinden, woher die Werte kommen. – TheCodingArt
Beachten Sie, dass die Breite der Szene nicht mit der Breite der Kamera übereinstimmt. – TheCodingArt
ich spielte herum mit Ihrem Code und es fing an, mein eigenes Projekt zu werden lol .. theres wirklich eine Menge gehen dort .. wenn ich Sie war, könnte ich ein neues Beispielprojekt beginnen, das jedes Element der Kompliziertheit addiert (cameraScale .. usw.) nacheinander, bis Sie einen einfacheren Weg finden, das Problem zu lösen. – hamobi