2D Sprites an die JPanel Größe (Auflösung) anpassen/skalieren

CuriousBob

Mitglied
Hi,
ich habe gerade das 2D-Spieleprogrammierung Tutorial von Quaxli durchgearbeitet und auch schon ein paar Änderungen vorgenommen. Jetzt hätte ich allerdings ein paar Fragen zu den Sprites.

Ich würde es gerne so machen das sich der Benutzer eine beliebige Auflösung aussuchen kann (800x600, 1024x768, etc.) und die Sprites sich entsprechend anpassen. Gibt es dafür vllt. Methoden die die Sprites auf dich richtige Größe ausdehnen bzw. verkleinern?
Bisher ist es dem 800x600 Hintergrundbild (.jpg) nämlich ganz egal ob das JPanel größer ist als das Bild. Das behält seine feste Größe und bleibt an der 0x0 Position.

Als nächtes hätte ich noch eine Frage zur Positionierung. Ich würde z.B. einen Gegner bei x=256, y=252 starten lassen. Natürlich sind das zwei "unterschiedliche" Positionen, wenn man einmal eine JPanel Größe von 800x600 und einmal 1920x1080 hat. Wie gehe ich da am geschicktesten vor?
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ganz allgemein klingt das, als solltest/könntest/würdest/müßtest du dir ein eigenes Koordinatensystem bauen. Wenn du ein einem 100x100-Panel 10x10 Tiles (order Sprites) unterbringst, und das ganze dann in ein 200x200-Panel malen willst, kannst du eigentlich einfach alles skaliert zeichnen (Graphics2D#scale und los...). Vielleicht ist aber noch mehr notwendig. Warte mal ab, was Quaxli dazu sagt.
 

Quaxli

Top Contributor
Warum soll ausgerechnet ich was dazu sagen? ;) Sowas ist im Tutorial nicht vorgesehen, das ist ja was für Anfänger und geht von einer fixen Größe aus.

Der Ansatz von Marco klingt für mich ganz gut. Ich haber aber so etwas auch noch nie ausprobiert und frage mich gerade, wie das optisch wirkt, wenn man die vorhanden Sprites einfach um den Faktor x vergrößert? Könnte u. U. etwas klobig werden.

Das Problem mit der Startposition würde ich rechnerisch lösen. x-Position von 256 ist bei 800 Pixeln Breite grob gerechnet ein Drittel. Das läßt sich ja einfach rechnen...
 

Quaxli

Top Contributor
Ich habe jetzt mal auf die Schnelle ein bißchen rumprobiert, weil mich das doch interessiert hat:
Graphics2D.scale(...) funktioniert und wenn man ein bißchen mit den RenderingHints rumspielt, könnte man ein brauchbares Ergebnis hinbekommen.

Für's Tutorial habe ich einfach mal nur die Zeichenroutine geändert. Damit ist das Bild zwar nicht vollständig sichtbar, aber mich hat an der Stelle auch nur die Optik interessiert. Auch mit den verwendeten RenderingHints habe ich nicht groß rumprobiert, so daß da evtl. noch ein besseres Ergebnis möglich ist.

Java:
	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		
		Graphics2D g2 = (Graphics2D) g;
		//g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
		g2.scale(1.5,1.5);
		
		g2.drawImage(background, 0, 0, this);
		
		g2.setColor(Color.red);
		g2.drawString("FPS: " + Long.toString(fps), 20, 10);
		
		if(!isStarted()){
			return;
		}
		

		if(actors!=null){
			for(int i=0;i<actors.size();i++){
				actors.get(i).drawObjects(g2);
			}
		}
		
	}

Insgesamt sieht das einigermaßen gut aus. Da so nur die Grafik größer gemalt wird, hat man auch keinen Schmerz mit Startpositionen etc..

Alternative wäre vielleicht noch, das Programm in eine FullScreen-Anwendung umzuwandeln. Da gibt's im "Killer Game Programming" - Tutorial schöne Erklärungen dazu
Killer Game Programming in Java
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Laufanimation eines Sprites Spiele- und Multimedia-Programmierung 6
S MouseEvents für Sprites Spiele- und Multimedia-Programmierung 3
Anfänger2011 Wichtig: Grafik und Sprites erstellen Spiele- und Multimedia-Programmierung 1
lumo opengl, sprites/tiles Spiele- und Multimedia-Programmierung 8
K Sprites mit Transparenten Hintergrund Spiele- und Multimedia-Programmierung 2
Quaxli isometrische Sprites erstellen Spiele- und Multimedia-Programmierung 2
D Koordinaten eines 2D Sprites Spiele- und Multimedia-Programmierung 2
D Unterscheidung von Sprites mit verschiedenen Eigenschaften Spiele- und Multimedia-Programmierung 4
P 2D Spiel mir drehbaren Bildern (Sprites) programmieren Spiele- und Multimedia-Programmierung 10
K Sprites / Kollision Spiele- und Multimedia-Programmierung 3
H sprites Spiele- und Multimedia-Programmierung 19
R JPanel wird erst im Fullscreen angezeigt Spiele- und Multimedia-Programmierung 1
P selectedItem aus einem Methodenerstellten JPanel auslesen. Spiele- und Multimedia-Programmierung 5
M JPanel mit Graphics2D Objekten mit JScrollpane Spiele- und Multimedia-Programmierung 6
K JPanel wechseln & Neu starten - SnakeSpiel Spiele- und Multimedia-Programmierung 2
A paintComponent in JPanel in JFrame Spiele- und Multimedia-Programmierung 7
N JPanel Inhalt aktualisiert nach Thread.sleep nicht Spiele- und Multimedia-Programmierung 2
S Thread und jpanel-paintcomponent kombinierbar?? Spiele- und Multimedia-Programmierung 14
E Animiertes JPanel dynamisch wechseln Spiele- und Multimedia-Programmierung 3
W Panel/JPAnel createImage() Exception Spiele- und Multimedia-Programmierung 2
R Probleme mit JPanel!KeyListener geht nicht Spiele- und Multimedia-Programmierung 6
T Problem bei LinkedList / JPanel Spiele- und Multimedia-Programmierung 4
F Vektorgrafik in JPanel Spiele- und Multimedia-Programmierung 5
E Active Rendering im FSEM auf ein JPanel? Spiele- und Multimedia-Programmierung 4
L 2D-Spiele ruckeln auf JPanel Spiele- und Multimedia-Programmierung 7
A Mehrere geometrische Objekte in JPanel zeichnen Spiele- und Multimedia-Programmierung 4
X JPanel dynamisch (Koordinatensystem)? Spiele- und Multimedia-Programmierung 30
M Jpanel Graphik speichern Spiele- und Multimedia-Programmierung 6
DamienX Canvas vs JPanel Spiele- und Multimedia-Programmierung 15
S Problem mit JPanel bzw p a i n t Spiele- und Multimedia-Programmierung 6
K stringWidth bei Graphics von JPanel und Printer unterschiedl Spiele- und Multimedia-Programmierung 4
R SimpleUniverse in JPanel Spiele- und Multimedia-Programmierung 4
M 1. Menüleiste wird doppelt gezeichnet 2. awt auf ein jpanel Spiele- und Multimedia-Programmierung 4
M Jpanel mit Keylistener Spiele- und Multimedia-Programmierung 6
D 2D Graphic Objekte in ein JPanel einfügen Spiele- und Multimedia-Programmierung 2
E Isometrische Tiles mit unterschiedlicher Größe an korrekter Position zeichnen Spiele- und Multimedia-Programmierung 1
J Unicode Font Größe ändern Spiele- und Multimedia-Programmierung 2
Developer_X Bild Größe einstellen Spiele- und Multimedia-Programmierung 2
U JPG in größe ändern und speichern Spiele- und Multimedia-Programmierung 3
M Einfaches Legespiel: Größe des Spielfeld reduzieren Spiele- und Multimedia-Programmierung 19

Ähnliche Java Themen

Neue Themen


Oben