Laden...

XNA(XBOX360) Bildschirmauflösung bzw. sicher sichtbaren Bereich des TVs auslesen

Erstellt von Robin0 vor 10 Jahren Letzter Beitrag vor 10 Jahren 3.022 Views
R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren
XNA(XBOX360) Bildschirmauflösung bzw. sicher sichtbaren Bereich des TVs auslesen

Hallo,

Ich habe folgendes problem:
Wenn ich versuche die Auflösung meines Bildschirms auszulesen an dem die XBOX360 angeschlossen ist, wird mir immer die Auflösung meines 1. Bildschirms ausgegeben.

Wie kann ich die Bildschirmauflösung meines TV´s auslesen?

Wie stelle ich die richtige bildschirmauflösung ein?
[Edit:]
TV=PHILIPS Model No.:20PFL4122/10
Schnitstelle: HDMI
[/Edit]

C
168 Beiträge seit 2010
vor 10 Jahren

Bei xBox sollte man niemals mit der Autoskalierung arbeiten!

Es wird dringend empfohlen das Spiel standardmäßig mit 1280x720 laufen zu lassen.

Die Xbox hat eine gleich bleibende Leistung je höher die auflösung ist desto höher bzw. desto teurer wird ein Zeichenvorgang.Das Bedeutet sobald dein Spiel etwas aufwändiger ist kannst du sowas wie 1920x1080 vergessen 😉.

The Xbox 360 system supports both HDTV and normal television sets, at multiple resolutions (480p, 720p, 1080i, and 1080p)

Du kannst also 640x480, 1280x720 oder 1920x1080 verwenden empfohlen wird aber 1280x720 und wird auch bei den meisten Xbox spielen verwendent.

Sollte das Spiel für den PC sein kannst du die Werte vom Desktop erstmal nutzen, bei Xbox jedoch nicht.

GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width
GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren

Das problem stellt sich jedoch in der korrekten darstellung, ohne die skalierungswerte oder die auflösung des Endgerätes kann ich nicht herrausfinden an welcher stelle der Bildsildschirmrand erreicht ist.

Wenn ich eine textur in die untere-rechte ecke des bildschirms plaziren möchte kann ich folglich nur raten, was die programierung schwierig gestaltet.

C
168 Beiträge seit 2010
vor 10 Jahren

Quatsch Du hast doch alle infos wenn du dein Bildschirm auf 1280x720 setzt

IN 2D wäre der Mittelpunkt des Bildschirms an den Koordinaten
X=640 y=360

und oben links wäre X=0 Y=0

IN 3D wäre der Mittelpunkt des Bildschirms an den Koordinaten
x=0 y=0 (z=0) zu mindestens solang wie man die Kamera nicht bewegt 😃

Sprich die auflösung auf dem endgerät ist unintressant da dein Cursor ja nicht an den Endgerät Koordinaten bzw. Größe gekoppelt ist sondern an deine Auflösung die du verwendest. (1280x720)

Du musst dein Programm natürlich noch in Fullscreen setzen dazu verwendet man:

IsFullscreen = true;

Aber das sollte dir denke ich klar sein ohne das sind würde man ja immer im Fenstermodus spielen und das will glaube ich keiner. 😃

Es wäre vielleicht sinnvoll wenn du dich erstmal mit den Koordinatensystem vertraut machst. Z.B. versuchen ein Rechteck zu Zentrieren egal bei welcher Bildschirm auflösung oder allgmeines neu ausrichten von elementen bei änderung der Auflösung.

Hier solltest du auch noch einige 2DGames finden davon solltest du dir vielleicht ein paar mal anschauen und den Code schritt für schritt durchgehen.
Die Projekte sind auch alle sehr gut Dokumentiert. http://xbox.create.msdn.com/en-US/

EDIT:

Noch als kleine Denkhilfte 😃

Stell dir vor du hast 2 User die dein Spiel auf der XBox Spielen wollen
User1 hat eine Full HD TV sprich 1920x1080
User2 hat einen 4k TV sprich 3840 x 2160

würde jetzt dein Spiel mit der Auflösung der Endgeräte nutzen also 1920x1080 oder 3840 x 2160 würdest du beim 4k TV starke Performance-Probleme bekommen desweiteren wären alle Objekte deutlich kleiner mit Ausnahme du würdest eine neue Größe berechnen. Wenn du dir aber andere Games anschaust und dort die Auflösung veränderst siehst du sofort das z.B. in Menüs die Button größer und unscharfer sind, sprich es werden auch keine größen neu berechnet diese sind alle fix 😉.

mal ganz davon abgesehen das die Xbox keine 4k Tv's unterstützen würde wenn man die Auflösung des Bildschirmsnutzen müsste.

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren

Ich versuch es nocheinmal.

Mit dem befehl:
(Texture2D MyTexture;)

spriteBatch.Draw(MyTexture,new Rectangle(0,0,MyTexture.Width,MyTexture.Height),null,Color.White);

Kann ich zwar die Grafik darstellen jedoch wird nur ein kleiner teil oben liks dargestellt. Die graik ist 50x50Px groß, Sie wird nich ganz, nich halb in die aeußere ecke gezeichnet sondern so ca. 30%(in der X achse/und40%(in der Y Achse). Der rest der Grafik verschwindet hinter den grenzen meines TV-Bildschirms.
Ich würd ja n screenshot von machen, aber da ich das wie gesagt versuche etwas für die XBOX360 zu programmieren geht das nicht.
ToggleToFullscreen ist auch keine Lösung, da ich, ich widerhole für die XBOX programmere und da gibt es keine WinForm elemente.
Ich hab auch keine Cursor auf der XBOX!.

Der tipp mit dem Rechteck zentrieren egal bei welcher auflösung... was glaubst du wo mein problem liegt!?

Und die auflösung meines Bildschirms nutzen... steht in der Frage... wie bekomm ich die raus!?

Trotzdem danke für den versuch.

5.658 Beiträge seit 2006
vor 10 Jahren

Hi Robin0,

Und die auflösung meines Bildschirms nutzen... steht in der Frage... wie bekomm ich die raus!?

Unter Zeichnen eines Sprites gibt es ein Beispiel:

Rectangle retval = new Rectangle(
                graphics.GraphicsDevice.Viewport.X,
                graphics.GraphicsDevice.Viewport.Y,
                graphics.GraphicsDevice.Viewport.Width,
                graphics.GraphicsDevice.Viewport.Height);

Christian

Weeks of programming can save you hours of planning

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren

Wenn ich graphics.GraphicsDevice.Viewport.Width und
graphics.GraphicsDevice.Viewport.Height
verwende dann wir die Grafik immernoch falsch dargestellt.

Das Bild im anhang hab ich als referenz bild genommen und versucht es ganz darzustellen.
nur leider wird die Grafik erst ab der Farbe Grün oder Gelb dargestellt.(Ich wollte n foto machen aber darauf erkennt mans nich)(Maße der grafik entspechen den weten aus %Vievport%)

Mein problem liegt in der korrekten darstellung.
[Edit:]
TV=PHILIPS Model No.:20PFL4122/10
Schnitstelle: HDMI
[/Edit]

C
168 Beiträge seit 2010
vor 10 Jahren

Das hat nichts mit den Programm zu tun sondern liegt an HDMI nennt sich overscan bzw. underscan.

Am besten suchst für dein entsprechendes Modell einfach bei google wie du overscan abschaltest.

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

5.658 Beiträge seit 2006
vor 10 Jahren

nur leider wird die Grafik erst ab der Farbe Grün oder Gelb dargestellt.(Ich wollte n foto machen aber darauf erkennt mans nich)(Maße der grafik entspechen den weten aus %Vievport%)

Auf der von mir verlinkten Seite steht: "Achten Sie auf der Xbox 360 darauf, keine Vordergrundsprites in die äußeren 10 oder 20 Prozent des Bildschirms zu zeichnen. Auf einigen Fernsehern werden die Ränder des Bildschirms ggf. undeutlich dargestellt. Die GetTitleSafeArea-Funktion berechnet unter Angabe eines Sicherheitsprozentsatzes den sicheren Bereich des aktuellen Viewport."

Das hat auch nichts mit deiner Ursprungsfrage (Positionierung der Sprite) zu tun.

Christian

Weeks of programming can save you hours of planning

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 10 Jahren

Danke an alle erstmal 😃

Hatte gehoft das man den Overscan irgentwie auslesen/Berechnen kann. Leder geht das nicht.-

XNA stellt eine Methode bereit unter "graphics.GraphicsDevice.Viewport.TitleSafeArea" finden sich die X-Y werte innerhalb dennen alles aufjedenfall sichtbar ist.

Overscan erlaeuterung:
http://www.indiedev.de/wiki/Title_Safe_Area

C
168 Beiträge seit 2010
vor 10 Jahren

Nein mit Overscan berechnet man nichts sondern man Positioniert die HDMI übertragung richtig.

Wenn du Overscan abschaltest würdest du bei dir auch alles richtig angezeigt bekommen, hab das gleich Problem bei einem anderen Samsung Modell gehabt 😄. Das Problem ist aber das man das nicht bei allen Geräten abschalten kann ... grade bei älteren nicht 😉

mit TitleSafeArea solltest du die Position bestimmen können das funktioniert aber auch nicht bei jedem Gerät 😉

Real programmers don't comment their code - it was hard to write, it should be hard to understand.