BufferedImage Position

.basti

Aktives Mitglied
Guten Abend,
mein Problem ist folgendes: Ich erstelle ein BufferedImage als Spielfigur und lass es mit der g.drawImage()-Methode auf die Position x=0 setzen. Allerdings wird die Spielfigur nicht bei x=0 angezeigt sondern ca. bei x=40. Ich vermute, dass das Bild einfach eine größere Breite hat als das eingezeigt Bild selbst. Meine Frage lautet, wie ich das ändern kann, sodass mein Spieler auch bei x=0 ist.
 

.basti

Aktives Mitglied
ich glaub das löst das Problem nicht richtig. die eigentlich Größe des Bildes ist größer als das gezeigte bild selbst. s. Anhang. ich möchte wissen wie ich das ändern kann also, dass das bild auch so groß ist wie die gezeichnete Größe.
 

Anhänge

  • Bildschirmfoto 2022-01-24 um 16.48.08.png
    Bildschirmfoto 2022-01-24 um 16.48.08.png
    60,8 KB · Aufrufe: 2

.basti

Aktives Mitglied
Ich folge eigentlich deinem Modell welches du mir mal privat geschickt hast:Main Klasse, Spiel, Sprite, Interface. Jetzt habe ich aber noch neue Klassen erstellt und zwar einmal SpielerSprite welche von Sprite erbt. Diese zeichnet das jeweilige Bild als Spieler. Das selbe passiert mit dem Hintergrund. Auch für den habe ich eine weitere Klasse namens BackgroundSprite, die auch von Sprite erbt.

[CODE lang="java" title="SpielerSprite Klasse"]package game;

import java.awt.Graphics;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
public class SpielerSprite extends Sprite{
BufferedImage img ;
public SpielerSprite(){
try {
img = ImageIO.read(new File("images/Spieler.png"));
}
catch(IOException e) {
e.printStackTrace();
}
}

public BufferedImage getImg() {
return img;
}
@Override
public void draw(Graphics g) {
g.drawImage(getImg(),getX(),getY(),null);
g.drawRect(getX(), getY(), img.getWidth(), img.getHeight());
}
}
[/CODE]

[CODE lang="java" title="BackgroundSprite"]package game;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
public class BackgroundSprite extends Sprite{
BufferedImage imgBack;


public BackgroundSprite(){
try {
imgBack = ImageIO.read(new File("images/Boden.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void draw(Graphics g) {
g.drawImage(imgBack,100,100,null);
g.drawRect(100,100,imgBack.getWidth(),imgBack.getHeight());

}

}
[/CODE]

diese Bilder zeichne ich in meiner Spiel Klasse, welche von Panel erbt, mit paintComponent().
 

Blender3D

Top Contributor
diese Bilder zeichne ich in meiner Spiel Klasse, welche von Panel erbt, mit paintComponent().
Java:
 @Override
    public void draw(Graphics g) {
        g.drawImage(imgBack,100,100,null);
        g.drawRect(100,100,imgBack.getWidth(),imgBack.getHeight());
        
    }
Du zeichnest hier an einer konstanten Position (100, 100).
Das ist aber nicht im Sinne eines Sprites. Dieser hat seine eigenen Koordinaten , x, y.
Im Falle einer Klasse die von Sprite erbt, sollten die Variablen Koordinaten unbedingt benutzt werden.
Eine fixe Position kann dann mittels
Java:
Sprite s = new Sprite ...
s.setPos(100,100);
gesetzt werden.
 

.basti

Aktives Mitglied
Sorry, aber das löst das Problem leider immer noch nicht. Mein Image wird immer noch zu klein angezeigt. Die setPosition() Methode funktioniert, aber die hat nix am Problem geändert. Also nochmal: Ich zeichne auf ein Frame zwei verschieden BufferedImage. Beide setze ich mit der eben genannten Methode auf eine Position. Allerdings wird mir das Bild nicht an der jeweiligen Position sondern viel zu weit unten angezeigt.
Bei meinem Anhang ist zu erkennen dass mein Bild (Boden) nicht wie ich will bei x=100, y=100 ist sondern y viel zu groß ist. Das Rechteck Außenrum zeigt die eigentlich Größe des Bildes an, was mich darauf schließen lässt, dass mein Bild, also der Boden, einfach kleiner ist als das eigentliche Bild. Meine Frage ist wie ich das behebe, sodass das der gezeichnete Boden auch bei 100,100 ist.
 

Anhänge

  • Bildschirmfoto 2022-01-24 um 16.48.08.png
    Bildschirmfoto 2022-01-24 um 16.48.08.png
    60,8 KB · Aufrufe: 0

Blender3D

Top Contributor
Meine Frage ist wie ich das behebe, sodass das der gezeichnete Boden auch bei 100,100 ist.
Der Sprite sollte ein passendes Image besitzen. Außerdem ist es ratsam eine Image Loader zu benutzen, und die Bilder vorab zu laden, um Verzögerungen während des Spiels zu vermeiden.
Im obigen Link habe ich einen vereinfachten Image Loader gezeigt, den könntest Du benutzen.
[CODE lang="java" title="ImageLoader" highlight="17-25"]import java.awt.Image;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import javax.imageio.ImageIO;

public class ImageLoader {
public static String sourceDir = "./src/"; // Eclipse source folder
public static String resourceDir = "resources/"; // Hier den Pfad anpassen
private final static HashMap<String, Image> images = new HashMap<String, Image>();

public static Image get(String name) {
return images.get(name);
}

public static Image getScaledImage(String name, int width, int height) {
Image image = get(name);
if (image == null)
return null;
if (image.getWidth(null) != width || image.getHeight(null) != height) {
images.remove(name);
image = image.getScaledInstance(width, height, Image.SCALE_SMOOTH);
images.put(name, image);
}
return image;
}

public static void loadImages(String[] nameImages, String type) {
for (String name : nameImages) {
String fileName = resourceDir + name + "." + type;
File file = new File(sourceDir + fileName);
Image image = null;
System.out.println(fileName);
try {
if (file.exists())
image = ImageIO.read(file);
else
image = ImageIO.read(ClassLoader.getSystemResource(fileName));
if (image != null)
images.put(name, image);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}[/CODE]
 

.basti

Aktives Mitglied
Problem hat sich geklärt. War eigentlich ganz einfach ich hatte es nur nicht zugeschnitten gehabt das bild. Danke trotzdem :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B BufferStrategy zu BufferedImage? Irgendwie? Spiele- und Multimedia-Programmierung 2
D getsubimage aus BufferedImage und Rueckwandlung in ein ImagePlus bild Spiele- und Multimedia-Programmierung 0
V BufferedImage[] aus anderer Classe auslesen Spiele- und Multimedia-Programmierung 2
F [JMyron] Bild von int[] zu BufferedImage Spiele- und Multimedia-Programmierung 2
Q BufferedImage vs. Heap Space ‒ Warum wird der Speicher nicht freigegeben? Spiele- und Multimedia-Programmierung 6
M Performance Problem bei BufferedImage Spiele- und Multimedia-Programmierung 7
R BufferedImage > Integer.MAX_VALUE Spiele- und Multimedia-Programmierung 9
M Pixel eines BufferedImage bearbeiten (Performance) Spiele- und Multimedia-Programmierung 23
G BufferedImage -> Farbe wechselt willkürlich Spiele- und Multimedia-Programmierung 15
P int-Array zu BufferedImage (performance?) Spiele- und Multimedia-Programmierung 14
agentone BufferedImage transparent löschen Spiele- und Multimedia-Programmierung 12
radiac Stringtext mit BufferedImage Textur. Spiele- und Multimedia-Programmierung 6
kowa BufferedImage und Antialias Spiele- und Multimedia-Programmierung 2
T BufferedImage#setRGB #getRGB zu langsam Spiele- und Multimedia-Programmierung 4
J Zeichnen in BufferedImage und dieses in Datei speichern Spiele- und Multimedia-Programmierung 2
A Image in BufferedImage konvertieren Spiele- und Multimedia-Programmierung 2
Z Transparenz in BufferedImage Spiele- und Multimedia-Programmierung 8
Z JME - Rendering in BufferedImage Spiele- und Multimedia-Programmierung 14
A Bildbereich als BufferedImage Spiele- und Multimedia-Programmierung 3
M BufferedImage blass machen Spiele- und Multimedia-Programmierung 5
Lulumann6 BufferedImage in VolatileImage casten Spiele- und Multimedia-Programmierung 10
F BufferedImage verursacht OutOfMemoryError Spiele- und Multimedia-Programmierung 11
P Rotation von BufferedImage (Affine Transformation) Spiele- und Multimedia-Programmierung 7
S Image to BufferedImage Spiele- und Multimedia-Programmierung 3
coolian meine funktion um die höhe des terrains an bestimmter position in diesem fall spieler position zu bekommen giebt nur 0 zurück Spiele- und Multimedia-Programmierung 6
T Position eines Image verändern mithilfe eines Timers Spiele- und Multimedia-Programmierung 6
E Isometrische Tiles mit unterschiedlicher Größe an korrekter Position zeichnen Spiele- und Multimedia-Programmierung 1
BRoll AudioInputStream (Mp3) aktuelle Position Spiele- und Multimedia-Programmierung 0
A .jpg-Bild auf andere Position verschieben Spiele- und Multimedia-Programmierung 4
M [JAVA 3D] Position des Objektes verändern Spiele- und Multimedia-Programmierung 16
B Position der ViewingPlatform und Visueller Objekte setzen Spiele- und Multimedia-Programmierung 3
W "Kamera"-Position Spiele- und Multimedia-Programmierung 24
M Exakte Position auf Kugel mit Maus picken , Java3d Spiele- und Multimedia-Programmierung 14
T Maus-Cursor-Position manipulieren Spiele- und Multimedia-Programmierung 3
K Position im Raum bestimmen Spiele- und Multimedia-Programmierung 11
M Position der ViewingPlatform als Point3d-Objekt? Spiele- und Multimedia-Programmierung 12
F Position eines Objektes auslesen. Spiele- und Multimedia-Programmierung 7
G Wie kann ich die Kamera / View Position ausgeben? Spiele- und Multimedia-Programmierung 3
X Bild auf aktueller position drehen Spiele- und Multimedia-Programmierung 2
D mehrere Graphiken erstellen und ihre Position definieren Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben