2014-05-06 4 views
24

Dieser Beitrag bezieht sich auf einen früheren Beitrag von wollen lernen, wie zwischen LIBGDX und Box2D richtig zu rendern. Ich musste das Ansichtsfenster gut verstehen, bevor ich fortfahren konnte.
Nach vielen Code/Post Lesungen, ich fühlte, dass die Bedeutung von "Ansichtsfenster" war "das Rechteck Öffnung eines Objektivs der Kamera, die LIBGDX Spielwelt, wo ich es über die Welt bewegen kann, um zu sehen, was ich will". Aber nach mehr Lektüre schien mir die eigentliche Bedeutung nicht annähernd zu sein.
Ich habe das LIBGDX-Wiki gelesen und lese in der OpenGL-Dokumentation, die das Ansichtsfenster als zwei verschiedene Dinge zu erklären scheint.LIBGDX: Was ist ein "Viewport"?

Libgdx Wiki:

„Das Darstellungsfeld ist ein rechteckiger Betrachtungsbereich des Schirms, wo die 3D-Szene projiziert, ist sie nichts mehr ist, die 3-dimensionalen Objekte auf die 2-dimensionale Ebene als abbildet..“

OpenGL:. „Das Ansichtsfenster zeigt die Form des Bereichs zur Verfügung Bildschirm in dem die Szene abgebildet wird“

Stackoverflow:

"... Es hat mehrere Definitionen in verschiedenen Kontexten ...": '(

Ich habe versucht, Zehn Forum-Beiträge und Anleitungen zu lesen. Aber leider springen fast alle hinein, als ob "Ansichtsfenster" so ein primitives Konzept wäre, dass jeder versteht und weiß.
Ich weiß, dass ich für diese äußerst grundlegende Frage viel Wärme bekommen werde. Bitte, flamme nicht, frage ich weil ich eigentlich kein weiß Ich brauche wirklich Hilfe.

Wie auch immer, in die eigentliche Frage.

Was ist "Ansichtsfenster" im LIBGDX-Kontext?

+4

Ausgezeichnet q. Dies ist die Art von Dingen, die als selbstverständlich betrachtet werden, aber wenn Sie durch Beispiele gehen, stellen Sie fest, dass Leute herumhacken und die Komponenten wegen grundlegender Fehler in ihrem Verständnis der Basiskomponenten missbrauchen. – RichieHH

Antwort

25

Das hängt von der Version von LibGDX ab, die Sie verwenden. Mit LibGDX 1.0.0 wurde die Viewport Klasse eingeführt und wahrscheinlich sind das die neuesten Tutorials und Artikel, wenn sie über "Viewports" sprechen.

Diese Klasse verwaltet zwei Dinge:

  • Das Ansichtsfenster einer Kamera
  • Die OpenGL Darstellungs

Das Ansichtsfenster einer Kamera legt fest, wie viel Sie Ihre Spielwelt sehen wollen. Wenn Sie eine riesige TiledMap der Größe 10000px X 10000px haben, dann möchten Sie wahrscheinlich nur einen kleinen Bereich dieser Karte auf einmal zeigen. Wenn Sie das Kamera-Ansichtsfenster als 800px X 480px definieren, sehen Sie einen Teil Ihrer Karte, der genau diese Dimension aufweist (zumindest im Fall einer OrthographicCamera). Es ist wie ein Fenster, durch das Sie durch Ihre Welt schauen und Sie definieren die Größe über das Ansichtsfenster.

Das OpenGL-Ansichtsfenster definiert den Bereich, dem die Ansicht der Kamera zugeordnet werden soll. Standardmäßig entspricht dieses Ansichtsfenster 100% der Größe Ihres Fensters auf Desktop-Betriebssystemen. Das könnte aber auch anders sein. A FitViewport mit LibGDX 1.0.0 kann dieses Ansichtsfenster so skalieren, dass das Seitenverhältnis eines von Ihnen definierten "virtuellen Ansichtsfensters" beibehalten wird (das ist das Ansichtsfenster der Kamera, das von der Klasse Viewport verwaltet wird). Das heißt, wenn das Seitenverhältnis des Fensters nicht mit dem Seitenverhältnis Viewport (virtuell) übereinstimmt, wird das OpenGL-Ansichtsfenster auf eine kleinere Größe eingestellt und schwarze Balken erscheinen. Sie können sich also eine andere Ebene zwischen dem tatsächlichen Fenster auf Ihrem Desktop und der Kamera vorstellen. Diese Ebene nimmt die Ausgabe Ihrer Kamera auf und skaliert diese auf die definierte Größe innerhalb Ihres Desktop-Fensters.

+0

Danke für diese großartige Erklärung. Hat sich die Bedeutung/Verwendung/Definition des Ansichtsfensters in Libgdx vor Version 1.0.0 geändert? – coffeenet

+0

Vor Version 1.0.0 war es nur das Ansichtsfenster der Kamera und das OpenGL-Ansichtsfenster, weil die 'Viewport'-Klasse, die beide verwaltet, noch nicht existierte. – noone

+0

Also in der neuesten Version von LIBGDX, camera.viewportWidth/Height & stage.setViewport() folgen Sie dem gleichen Konzept, wie Sie freundlicherweise erklärt haben, oder? Und, ist die Einstellung camera.viewportWidth/Height die gleiche wie die Einstellung stage.setViewport()? – coffeenet