Pacman-Grafik

Schrubber

Bekanntes Mitglied
Guten Abend,

Ich bin derweil an einem Pacman-Spiel dran. Habe gerade mein Spielfeld und die Bewegung fertiggestellt, nun bin ich aber an dem eigentlichen Spielfeld.

Und zwar sieht meine Datei, die mir den Pacman zeichnet, so aus:

Java:
import java.awt.*;
import javax.swing.*;

public class FeldelementUi extends JPanel
{
	private Feldelement fe;
	
	public FeldelementUi(Feldelement fe)
	{
		this.fe = fe;
		setSize(50,50);
	}
	
	public void paint(Graphics g)
	{
		super.paint(g);
		g.setColor(Color.black);
		if(fe.isHatPac())
		{
			g.drawOval(0,0,25,25);
		}
		}
	}

Nun möchte ich aber anstatt des Ovals nen Bild, bsp. name "Test.jpg" mit der Größe 25*25 in das GridLayout einfügen. Größe: 30*20Felder.


Wie? :)

Danke im vorraus,
Schrubber
 

agentone

Bekanntes Mitglied
Beim Laden des Spiels einmalig das Bild laden:
Java:
BufferedImage pacman=ImageIO.read(new File("Test.jpg"));
Und später in der paint-Methode zeichnen:
Java:
g.drawImage(pacman,0,0,null);
 

agentone

Bekanntes Mitglied
Lädst du das Bild auch wirklich nur ein Mal ?

Übrigens: Du solltest unter Swing nicht 'paint' sondern 'paintComponent' überschreiben...
 

Schrubber

Bekanntes Mitglied
sry stehe heute irgendwie voll aufm schlauch. wie mache ich das denn, dass er es nuer einmal läd? Wenn ichs ja in die public void paint(Graphics g) packe, läd er es ja jedesmal neu :(
 

Schrubber

Bekanntes Mitglied
Java:
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;

import javax.imageio.ImageIO;
import javax.swing.*;

public class FeldelementUi extends JPanel
{
	public void xy()
	{
		BufferedImage pacman = null;
		try {
			pacman = ImageIO.read(new File("pacman_close.jpg"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	private Feldelement fe;
	
	public FeldelementUi(Feldelement fe)
	{
		this.fe = fe;
		setSize(50,50);
	}
	
	public void paintComponent(Graphics g)
	{
		
		super.paint(g);
		g.setColor(Color.black);
		if(fe.isHatPac())
		{
			//g.drawOval(0,0,25,25);
			g.drawImage(xy.pacman,0,0,null);
		}
		}
	}

Nur der is ja falsch mit de. xy.pacman, da ers iwie net findet :/
 

Eldorado

Bekanntes Mitglied
pack doch das einlesen der Datei in den Konstruktor und speicher es als Instanzvariable:
Java:
import javax.swing.*;
 
public class FeldelementUi extends JPanel{
    BufferedImage pacman;
    public FeldelementUi() {
        try {
            pacman = ImageIO.read(new File("pacman_close.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
        
    public void paintComponent(Graphics g) {        
        super.paintComponent(g);
        g.drawImage(pacman, 0, 0, null);
    }
}
 

Schrubber

Bekanntes Mitglied
Okay.

Nun gibts mucken in meiner 2. Class Feldelement

Java:
public Feldelement(String name)
	{
		this.name = name;
		hatPac = false;
		ui = new FeldelementUi();
	}

Fehler: The constructor FeldelementUi() is undefined
 

Landei

Top Contributor
Offenbar findet er den Konstruktor nicht. Übersetze das Projekt nochmal komplett neu, manchmal bekommt die IDE bestimmte Änderungen nicht mit.
 

Schrubber

Bekanntes Mitglied
Ich soll das ganze Projekt nochmal neu schreiben? o_O Die Zeit hab ich leider nicht mal. Es hat ja alles funktioniert bis auf den Pacman zum laufen zu kriegen. Oder hilft es einfach, euch dne kompletten Quelltext hier rein zu posten? Danke ;)

Schrubber
 

Landei

Top Contributor
LOL! Nicht neu schreiben, nur neu compilieren :)

Wenn "The constructor FeldelementUi() is undefined" kommt, wird zwar die Klasse gefunden, aber nicht der entsprechende Konstruktor. Da du ja sicher schon überprüft hat, dass es diesen gibt (und du ja sicher Eldorados Code ausprobiert hast, der so einen Konstruktor hat), kann es nur irgendwo in der IDE haken, z.B. das deine Class-Files nicht auf dem letzten Stand sind oder so...
 

Schrubber

Bekanntes Mitglied
Soo...

Hab nochmal alles richtig compiled. Fehler weiterhin.
meine 2 Dateien:

Java:
public class Feldelement
{
	private FeldelementUI ui;
	private Feldelement nord;
	private Feldelement sued;
	private Feldelement west;
	private Feldelement ost;
	private boolean hatPac;
	String name;
	
	
	public Feldelement(String name)
	{
		this.name = name;
		hatPac = false;
		ui = new FeldelementUI(this);
		
	}

	
	public boolean isHatPac()
	{
		return hatPac;
	}


	public void setHatPac(boolean hatPac)
	{
		this.hatPac = hatPac;
	}


	public FeldelementUI getUi()
	{
		return ui;
	}


	public Feldelement getNord()
	{
		return nord;
	}


	public void setNord(Feldelement nord)
	{
		this.nord = nord;
	}


	public Feldelement getSued()
	{
		return sued;
	}


	public void setSued(Feldelement sued)
	{
		this.sued = sued;
	}


	public Feldelement getWest()
	{
		return west;
	}


	public void setWest(Feldelement west)
	{
		this.west = west;
	}


	public Feldelement getOst()
	{
		return ost;
	}


	public void setOst(Feldelement ost)
	{
		this.ost = ost;
	}
	
	
	public String toString()
	{
		return name;
	}

	
}

Java:
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.*;

import javax.imageio.ImageIO;
import javax.swing.*;
 
public class FeldelementUI extends JPanel{
    BufferedImage pacman;
    public FeldelementUI() 
    {
        try {
            pacman = ImageIO.read(new File("pacman_close.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
        
    public void paintComponent(Graphics g) {        
        super.paintComponent(g);
        g.drawImage(pacman, 0, 0, null);
    }
}


Fehler:
ui = new FeldelementUI(this);

Konstruktor :/
 

Eldorado

Bekanntes Mitglied
na ist doch kein Wunder: du rufst einen Konstruktor mit dem Parameter 'this'(in diesem Fall die Klasse Feldelement) auf, der Konstruktor der existiert ist aber parameterlos.
Java:
ui = new FeldelementUI();
mfg
Eldorado
 

magna

Mitglied
Kombiniere doch einfach was du vorher schon hattest mit dem was man dir zeigte:

Java:
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class Pacman {
}

class Feldelement {
    private final FeldelementUI ui;
    private Feldelement nord;
    private Feldelement sued;
    private Feldelement west;
    private Feldelement ost;
    private boolean hatPac;
    String name;

    public Feldelement(final String name) {
	this.name = name;
	hatPac = false;
	ui = new FeldelementUI(this);
    }

    public boolean isHatPac() {
	return hatPac;
    }

    public void setHatPac(final boolean hatPac) {
	this.hatPac = hatPac;
    }

    public FeldelementUI getUi() {
	return ui;
    }

    public Feldelement getNord() {
	return nord;
    }

    public void setNord(final Feldelement nord) {
	this.nord = nord;
    }

    public Feldelement getSued() {
	return sued;
    }

    public void setSued(final Feldelement sued) {
	this.sued = sued;
    }

    public Feldelement getWest() {
	return west;
    }

    public void setWest(final Feldelement west) {
	this.west = west;
    }

    public Feldelement getOst() {
	return ost;
    }

    public void setOst(final Feldelement ost) {
	this.ost = ost;
    }

    public String toString() {
	return name;
    }
}

class FeldelementUI extends JPanel {
    private final Feldelement feldelement;
    BufferedImage pacman;

    public FeldelementUI(final Feldelement feldelement) {
	this.feldelement = feldelement;
	setSize(50, 50);
	try {
	    pacman = ImageIO.read(new File("pacman_close.jpg"));
	} catch (final IOException e) {
	    e.printStackTrace();
	}
    }

    public void paintComponent(final Graphics g) {
	super.paintComponent(g);
	g.drawImage(pacman, 0, 0, null);
    }
}
 

Schrubber

Bekanntes Mitglied
Das Problem ist ja, dass die Hintergrundfarbe variiert. Ich hab 1ne Farbe für Wände, 1ne für Gehwege und 1ne für Sperrzonen. Und nach den Möglichkeiten, die ich bisher hatte (oder ich habs falsch verstanden), ändert er alle Hintergrundfarben :/ oder nicht?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Pacman AWT, Swing, JavaFX & SWT 9
I Libraries für AWT für andere Grafik-Frameworks tauglich machen AWT, Swing, JavaFX & SWT 6
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
M Umwandlung in den HSV-Farbraum lässt die Grafik pixelig werden AWT, Swing, JavaFX & SWT 8
S 2D-Grafik Winkelberechnungen auf 2D Grafik AWT, Swing, JavaFX & SWT 2
E Grafik karte erkennen AWT, Swing, JavaFX & SWT 3
S JavaFX Java Custom Node Grafik zurückgeben AWT, Swing, JavaFX & SWT 2
D Swing JCombobox Aktion löscht Grafik AWT, Swing, JavaFX & SWT 1
K Grafik in JFrame einpassen AWT, Swing, JavaFX & SWT 3
C Nach Aufruf von anderer Klasse streikt Grafik AWT, Swing, JavaFX & SWT 1
T AWT Grafik"Array" einzelne Elemente verschieben AWT, Swing, JavaFX & SWT 1
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
S Höhendaten in einer Grafik ausgeben AWT, Swing, JavaFX & SWT 2
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
S Grafik in einer Klassen einfügen/hinzufügen AWT, Swing, JavaFX & SWT 1
C 2D Grafik ein Bild soll permanent durchlaufen AWT, Swing, JavaFX & SWT 2
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
F AWT Grafik wird nicht richtig aktualisiert AWT, Swing, JavaFX & SWT 2
J JTabbedPane Grafik unterhalb der Tabs AWT, Swing, JavaFX & SWT 3
F Grafik hängt sich auf AWT, Swing, JavaFX & SWT 20
S LookAndFeel GUI-Grafik AWT, Swing, JavaFX & SWT 5
J Verschwommene Grafik AWT, Swing, JavaFX & SWT 4
C LayoutManager Grafik soll nicht im GridLayout Skalieren AWT, Swing, JavaFX & SWT 3
F Grafik mit Buttons versehen AWT, Swing, JavaFX & SWT 8
C Grafik Taschenrechner AWT, Swing, JavaFX & SWT 5
J Grafik (Kreis) schneller bewegen? AWT, Swing, JavaFX & SWT 6
Kenan89 Grafik und Text in JPanel anzeigen AWT, Swing, JavaFX & SWT 8
D Fenster mit Grafik überlappen AWT, Swing, JavaFX & SWT 3
Maxim6394 Rotation einer Grafik in swing AWT, Swing, JavaFX & SWT 13
D Swing Grafik in JPanel anzeigen. AWT, Swing, JavaFX & SWT 3
W Grafik von JFrame korrekt speichern AWT, Swing, JavaFX & SWT 7
S Grafik Fehler AWT, Swing, JavaFX & SWT 15
M Swing JLabel (mit einer Grafik) aktualisieren AWT, Swing, JavaFX & SWT 2
D 2D-Grafik Problem beim Drucken eines Grafik-Objekts AWT, Swing, JavaFX & SWT 2
Daniel_L Grafik erstellen, drin zeichnen und dann speichern AWT, Swing, JavaFX & SWT 2
D Grafik über JPanels hinweg verschieben AWT, Swing, JavaFX & SWT 2
C Grafik von main aus aufrufen AWT, Swing, JavaFX & SWT 13
O Swing Label(bzw. Grafik) verdekt von anderm Label AWT, Swing, JavaFX & SWT 2
T rekursive Grafik AWT, Swing, JavaFX & SWT 5
I 2D-Grafik Problem mit schreiben von Text auf eine Grafik AWT, Swing, JavaFX & SWT 7
F Swing Framework gesucht (Swing, Chart, "Scheduling" Grafik) AWT, Swing, JavaFX & SWT 2
N Eigener Grafik Editor mit fehlerhafter Anzeige AWT, Swing, JavaFX & SWT 4
lordcarlos Dynamische und interaktive grafik AWT, Swing, JavaFX & SWT 5
D Systemmodale Grafik AWT, Swing, JavaFX & SWT 10
J Geladene Grafik in ImageIcon auf Panel fest positionern. AWT, Swing, JavaFX & SWT 8
W Grafik aktualisieren AWT, Swing, JavaFX & SWT 5
S Swing Zugriff auf Polyline in Grafik AWT, Swing, JavaFX & SWT 4
A Swing Bei größe verändern des Fensters Grafik weg AWT, Swing, JavaFX & SWT 3
C gute Grafik-Bibliotheken gesucht AWT, Swing, JavaFX & SWT 6
D JFormattedTextfield um Grafik erweitern AWT, Swing, JavaFX & SWT 15
O Grafik wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
P JPanel mit Grafik von HDD über JTree AWT, Swing, JavaFX & SWT 10
S 2D-Grafik beeinflussen durch Scrollbalken AWT, Swing, JavaFX & SWT 2
A Grafik aus MIME-kodiertem Inhalt erzeugen AWT, Swing, JavaFX & SWT 2
T (WACOM) Grafik Tablet abfragen AWT, Swing, JavaFX & SWT 3
S Button mit Grafik versehen AWT, Swing, JavaFX & SWT 5
D Grafik bearbeiten AWT, Swing, JavaFX & SWT 11
M Ich habe Werte und Brauche Grafik! AWT, Swing, JavaFX & SWT 3
M Grafik flexibel an berechneten Koordinaten positionieren AWT, Swing, JavaFX & SWT 4
M dynamische Grafik in JFrame einbetten AWT, Swing, JavaFX & SWT 2
G Transparente Grafik über JMF Video zeichnen AWT, Swing, JavaFX & SWT 2
I Grafik in Text umwandeln AWT, Swing, JavaFX & SWT 11
G Grafik auf mehrere Methoden/Klassen zerlegen AWT, Swing, JavaFX & SWT 2
G Grafik in Button einbinden AWT, Swing, JavaFX & SWT 3
M Grafik in JFrame in Kombination mit Steuerelementen AWT, Swing, JavaFX & SWT 2
T grafik in jpanel wird nicht neugezeichnet AWT, Swing, JavaFX & SWT 7
F Zellen über eine Grafik legen AWT, Swing, JavaFX & SWT 7
S Grafik Farbwert verändern? AWT, Swing, JavaFX & SWT 8
D Farbe einer Grafik über den Cursor abfragen AWT, Swing, JavaFX & SWT 6
G Keine Anzeige von Grafik bei externem paintComponent-Aufruf AWT, Swing, JavaFX & SWT 2
S Popup auf Grafik AWT, Swing, JavaFX & SWT 18
J Grafik "sichtbar" verschieben AWT, Swing, JavaFX & SWT 2
G Grafik auf JComponent ohne Überschreiben von Paint-Methoden AWT, Swing, JavaFX & SWT 4
G Grafik erzeugen: eine Art Zustandsgraph eines Automaten AWT, Swing, JavaFX & SWT 7
P grafik in JScrollPanel AWT, Swing, JavaFX & SWT 5
D AppletCode als JAR aus JSP benutzen und als Grafik speichern AWT, Swing, JavaFX & SWT 2
S Update von Grafik auf JPanel AWT, Swing, JavaFX & SWT 2
S Auf einem JTabbedPane eine Grafik zeichnen AWT, Swing, JavaFX & SWT 11
W Grafik in JLabel aktualisieren AWT, Swing, JavaFX & SWT 4
S Tooltip mit Grafik AWT, Swing, JavaFX & SWT 2
D Visualisierung einer Selektion in einer Grafik. AWT, Swing, JavaFX & SWT 7
P Vektor-Grafik im XML-Format speichern AWT, Swing, JavaFX & SWT 39
P Grafik auf Button AWT, Swing, JavaFX & SWT 3
E Einträge der JComboBox werden durch Grafik verdeckt AWT, Swing, JavaFX & SWT 11
L Komponente und Grafik gleichzeitig auf JPanel zeichnen AWT, Swing, JavaFX & SWT 11
T swing - grafik schrittweise ausgeben ohne repaint() AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben