TileMap KeyListener - Problem

Alex_

Mitglied
Hallo,

ich versuche mich grade an einem Spiel. Habe davor noch nichts in dieser Richtung gemacht und bin daher in diesem Gebiet noch Neuling ;)
Ich dachte an ein 2D Strategie Spiel, welches auf einer Tile-Map basiert. Aus Hintergrundbilder, für die einzelnen Felder, wollte ich gif Dateien verwenden.

Zur Zeit beschäftige ich mich noch mit der Tile Map und habe damit ein kleines Problem. (Überprüfungen, ob man am Ende der Map ist, hab ich noch nicht eingebaut und er ist zur Zeit auch mehr provisorisch gedacht, da ich mich erst mal mit der Tilde Map anfreunden will ;)). Ich bekomme immer folgende Fehlermeldung, wenn ich z.B. eine Pfeiltaste länger gedrückt halte und somit durch die Karte navigiere:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at sample.GamePanel.drawCoordinates(GamePanel.java:193)
	at sample.GamePanel.paintComponent(GamePanel.java:168)
	at javax.swing.JComponent.paint(JComponent.java:1054)
	at javax.swing.JComponent.paintChildren(JComponent.java:887)
	at javax.swing.JComponent.paint(JComponent.java:1063)
	at javax.swing.JComponent.paintChildren(JComponent.java:887)
	at javax.swing.JComponent.paint(JComponent.java:1063)
	at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
	at javax.swing.JComponent.paintChildren(JComponent.java:887)
	at javax.swing.JComponent.paintToOffscreen(JComponent.java:5228)
	at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482)
	at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413)
	at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
	at javax.swing.JComponent.paint(JComponent.java:1040)
	at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
	at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78)
	at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:115)
	at java.awt.Container.paint(Container.java:1967)
	at java.awt.Window.paint(Window.java:3867)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:781)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
	at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
	at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
	at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701)
	at java.awt.EventQueue.access$000(EventQueue.java:102)
	at java.awt.EventQueue$3.run(EventQueue.java:662)
	at java.awt.EventQueue$3.run(EventQueue.java:660)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:671)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)




Ok, hier also mein Code:
Java:
package sample;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class GamePanel extends JPanel {

	private static final long serialVersionUID = 1L;

	public Tile[][] map; // Zweidimendionales Array, mit dem man alle Felder der
							// Karte ueber ihre x und y Koordinate ansprechen
							// kann

	public Tile[][] currentView; // Array, welches die momentan zu sehenden
									// Felder speichert.

	private final int tileSize = 40;
	int visionSize = 15; // Die Anzahl der Felder, die zu sehen sind (Sowohl in
							// Richtung der x- als auch der y-Achse)

	// Die aktuelle Position der Figur (blaues Kaestchen)
	int xPos = 0;
	int yPos = 0;

	private final JFrame frame;

	public static void main(String[] args) {
		new GamePanel(new Rectangle(0, 0, 600, 620), 70, 15);
	}

	/**
	 * 
	 * @param rect
	 *            Groesse des Panels.
	 * @param mapSize
	 *            Anzahl der Felder, die erstellt werden sollen. (Ein Feld hat
	 *            eine festgelegte Groesse von 40)
	 * @param visionSize
	 *            Anzahl der Felder die angezeigt werden sollen.
	 */
	public GamePanel(Rectangle rect, int mapSize, int visionSize) {
		super();
		setBounds(rect);

		this.visionSize = visionSize;

		// Beide Variablen mit der festgelegten Groesse der Felder (40)
		// multiplizieren.
		mapSize *= tileSize;
		visionSize *= tileSize;

		this.map = new Tile[mapSize][mapSize];
		this.currentView = new Tile[visionSize][visionSize];

		// Karte erstellen
		for (int y = 0; y < mapSize; y += tileSize) {
			for (int x = 0; x < mapSize; x += tileSize) {
				Tile t = new Tile(x, y, null);
				map[x][y] = t;
			}
		}

		// Frame zur Anzeige des Panels
		frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setBounds(rect);
		frame.setLayout(null);

		// Panel dem frame hinzufuegen
		frame.add(this);

		calculateCurentView();

		frame.setLocationRelativeTo(null);
		frame.setVisible(true);

		// KeyListener hinzufuegen
		frame.addKeyListener(new KeyListener() {

			@Override
			public void keyTyped(KeyEvent e) {
			}

			@Override
			public void keyReleased(KeyEvent e) {
			}

			// Wenn Richtungstaste gedrueckt, bewegung ausfuehren
			@Override
			public void keyPressed(KeyEvent e) {

				if (e.getKeyCode() == KeyEvent.VK_LEFT) {
					goLeft();
				}

				if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
					goRight();
				}

				if (e.getKeyCode() == KeyEvent.VK_UP) {
					goUp();
				}

				if (e.getKeyCode() == KeyEvent.VK_DOWN) {
					goDown();
				}
			}
		});
	}

	private void goRight() {
		xPos += tileSize / 2;
		calculateCurentView();
		frame.repaint();
	}

	private void goLeft() {
		xPos -= tileSize / 2;
		calculateCurentView();
		frame.repaint();
	}

	private void goUp() {
		yPos -= tileSize / 2;
		calculateCurentView();
		frame.repaint();
	}

	private void goDown() {
		yPos += tileSize / 2;
		calculateCurentView();
		frame.repaint();
	}

	// paintComponent Methode des GamePanels ueberschreiben.
	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);

		drawCoordinates(g);

		// Spielfigur (blaues Kaestchen ) malen
		g.setColor(Color.BLUE);
		int xy = ((visionSize * tileSize) / 2) - (tileSize / 2);
		g.fillRect(xy, xy, tileSize, tileSize);
		g.setColor(Color.BLACK);
	}

	private void calculateCurentView() {

		// Das aktuelle Sichtfeld, je nach Bewegungsrichtung neu berechnen
		// (Zuweisen von den jeweiligen Tiles-Objekten aus 'map', welche die
		// komplette Karte beinhaltet, nach 'currentView')
		for (int y = 0; y < currentView.length; y += tileSize) {
			for (int x = 0; x < currentView.length; x += tileSize) {
				currentView[x][y] = map[x + xPos][y + yPos];
			}
		}
	}

	// Koordinaten der einzelnen Felder malen
	private void drawCoordinates(Graphics g) {
		for (int y = 0; y < currentView.length; y += tileSize) {
			for (int x = 0; x < currentView.length; x += tileSize) {
				int x1 = currentView[x][y].x;
				int y1 = currentView[x][y].y;

				g.drawString("" + x1, x + 5, y + 15);
				g.drawString("" + y1, x + 5, y + 30);

				g.drawRect(x, y, 40, 40);
			}
		}
	}
}

class Tile {
	int x, y; // x, y-Position des Feldes
	BufferedImage[] image; // Spaeter .gif Datei als Hintergrundbild laden

	public Tile(int x, int y, BufferedImage[] image) {
		this.x = x;
		this.y = y;
		this.image = image;
	}
}

Grüße,
Alex
 

eRaaaa

Top Contributor
Steht doch immer alles schön in der Fehlermeldung, gucke dir die einzelnen Zeilen mal an:
Code:
    at sample.GamePanel.drawCoordinates(GamePanel.java:193)
    at sample.GamePanel.paintComponent(GamePanel.java:168)
Leider passen die Zeilennummern mit deinem geposteten Code nicht überein -> schlecht!
Wenn ich raten müsste würde ich auf die Zeile int x1 = currentView[x][y].x; tippen und sagen, dass currentView[x][y] = null ist, kann mich aber auch irren :bae:
 

Alex_

Mitglied
Danke :)
Hab die Zeilenangaben in der Fehlermeldung gestern wohl überlesen:D

Das die Zeilenangaben der Fehlermeldung nicht ganz mit dem Code übereinstimmen, liegt daran, dass ich noch paar Zeilen, die eigentlich nur zum debuggen dienen vor dem Post entfernt habe, aber noch die alte Fehlermeldung benutzt habe;)

Ok, dann guck ich mal warum mein currentView an der Stelle int x1 = currentView[x][y].x; null ist. Das komische ist aber, dass die Fehlermeldung zwar kommt, die Karte aber trotzdem richtig scrollt. Vielleicht ein Performance-Problem in der Berechnung des currentViews? (auch wenn ich mir das nicht so richtig vorstellen kann)

Grüße,
Alex
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Tilemap Hilfestellung Spiele- und Multimedia-Programmierung 7
R Tilemap Darstellungsfehler Spiele- und Multimedia-Programmierung 24
J TileMap auf 3D Quad Spiele- und Multimedia-Programmierung 3
P 2D Game - Alternative zur TileMap? Spiele- und Multimedia-Programmierung 2
L Platzieren von Objekten auf TileMap Spiele- und Multimedia-Programmierung 6
D Map wieder Tilemap =( Spiele- und Multimedia-Programmierung 4
T TileMap Serialisieren Spiele- und Multimedia-Programmierung 2
Quaxli TileMap ruckelt Spiele- und Multimedia-Programmierung 19
M Tilemap, aber wie? (Ein Konzept) Spiele- und Multimedia-Programmierung 4
B KeyListener Bug Spiele- und Multimedia-Programmierung 2
M KeyListener funktioniert nicht während Timer läuft Spiele- und Multimedia-Programmierung 26
B Den KeyListener in einer JavaFXML Application benutzen Spiele- und Multimedia-Programmierung 2
R Probleme mit JPanel!KeyListener geht nicht Spiele- und Multimedia-Programmierung 6
M KeyListener Spiele- und Multimedia-Programmierung 8
T Problem mit JnR-Steuerung / KeyListener Spiele- und Multimedia-Programmierung 6
A KeyListener - Thread Problem Spiele- und Multimedia-Programmierung 2
F Problem mit KeyListener in Applet Spiele- und Multimedia-Programmierung 4
StrikeTom KeyListener Funktioniert nicht Spiele- und Multimedia-Programmierung 3
D Space Invaders(KeyListener Problem) Spiele- und Multimedia-Programmierung 3
S Ping Pong: KeyListener in Paint und while Spiele- und Multimedia-Programmierung 10
Developer_X Java "Multi"KeyListener Spiele- und Multimedia-Programmierung 15
C Anfängerfrage: Plazierung Panel im JFrame und KeyLIstener Spiele- und Multimedia-Programmierung 4
A Mit KeyListener zwei Tasten gleichzeitig abfragen Spiele- und Multimedia-Programmierung 2
T Doppel KeyListener Spiele- und Multimedia-Programmierung 16
S Probleme mit dem Licht und dem KeyListener Spiele- und Multimedia-Programmierung 2
K Jump n Run Keylistener und Schleifen Spiele- und Multimedia-Programmierung 8
M Jpanel mit Keylistener Spiele- und Multimedia-Programmierung 6
D Pfeiltasten beim KeyListener Spiele- und Multimedia-Programmierung 1
R KeyListener hält nicht mit Spiele- und Multimedia-Programmierung 14
A [HILFE] - Minecraft-Problem! Spiele- und Multimedia-Programmierung 1
C Plugin Problem Spiele- und Multimedia-Programmierung 2
J JLayer Problem Spiele- und Multimedia-Programmierung 1
Meeresgott LWJGL 3 Problem mit einer Texture Spiele- und Multimedia-Programmierung 4
G Low Poly 3D LWJGL Shader Problem Spiele- und Multimedia-Programmierung 4
O Problem beim Aufrufen des Spiels von einem Menü Spiele- und Multimedia-Programmierung 7
G LIBGDX Texturen Problem Spiele- und Multimedia-Programmierung 1
G LIBGDX Problem beim resizen des Frames Spiele- und Multimedia-Programmierung 3
C AutoClicker Problem Spiele- und Multimedia-Programmierung 2
S OOP Logik Problem Spiele- und Multimedia-Programmierung 5
G LIBGDX Viewport Problem Spiele- und Multimedia-Programmierung 3
J Problem mit Game Of Life Spiele- und Multimedia-Programmierung 3
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
C Minecraft Minecraft Plugin Problem Spiele- und Multimedia-Programmierung 17
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
V Problem mit BufferStrategy Spiele- und Multimedia-Programmierung 2
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
E A-Stern Algorithmus Problem und Implementierung einer Map Spiele- und Multimedia-Programmierung 6
T LWJGL 2.9.2: Seltsamer Effekt beim Rendern (VertexShader Problem?) Spiele- und Multimedia-Programmierung 3
W Generelles Problem: Entscheidungsfindung Spiele- und Multimedia-Programmierung 4
T Problem bei Kollisionsabfrage Spiele- und Multimedia-Programmierung 4
C Vier Gewinnt Problem mit Ordnerstruktur Spiele- und Multimedia-Programmierung 2
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Sound Problem Spiele- und Multimedia-Programmierung 3
T Problem beim Aufbau des Spielfelds Spiele- und Multimedia-Programmierung 18
M Sound Engin Problem 2 Spiele- und Multimedia-Programmierung 2
J Problem bei der GUI - Zu viele Spielbretter Spiele- und Multimedia-Programmierung 2
D LWJGL gluLookAt "Umschauen" Problem Spiele- und Multimedia-Programmierung 0
D Problem mit Würfelanimierung in LWJGL Spiele- und Multimedia-Programmierung 7
C Zeldaklon Problem mit Wand-Kollision Spiele- und Multimedia-Programmierung 8
0 Boxen übereinander stapelt Problem Spiele- und Multimedia-Programmierung 5
D Textfield im Game ,Problem: while-Schleife Spiele- und Multimedia-Programmierung 3
R 2D platformer - enemy damage -> TIMER PROBLEM Spiele- und Multimedia-Programmierung 3
S LWJGL Kamera Problem - Alles verzerrt Spiele- und Multimedia-Programmierung 4
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
Seikuassi LWJGL-Problem Spiele- und Multimedia-Programmierung 2
L Minecraft Minecraft Plugin programmieren (Craftbukkit 1.7.2) Problem Spiele- und Multimedia-Programmierung 4
B Minecraft mehr Ram zuweißen Problem Spiele- und Multimedia-Programmierung 0
K Bukkit Plugin Problem Spiele- und Multimedia-Programmierung 3
Y Problem mit repaint() in run() Spiele- und Multimedia-Programmierung 2
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
T Problem mit Kollisionsabfrage der NPC Spiele- und Multimedia-Programmierung 1
J Minecraft Problem mit dem JRE - Minecraft Spiele- und Multimedia-Programmierung 3
TheSorm Problem mit 2 classen NullPointerException Spiele- und Multimedia-Programmierung 1
S Problem mit 4 gewinnt(MinMax Algorithmus) Spiele- und Multimedia-Programmierung 2
N Problem in der Main.class Spiele- und Multimedia-Programmierung 1
J Blöcke, Hitboxen, Koolisionsabfrage - Problem Spiele- und Multimedia-Programmierung 8
S Problem mit 3d-Polygon Spiele- und Multimedia-Programmierung 2
A Problem mit Sound Spiele- und Multimedia-Programmierung 5
C Nxt Duell Problem Spiele- und Multimedia-Programmierung 4
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
ruerob Problem bei Fade-Out von Sounds Spiele- und Multimedia-Programmierung 3
L [Slick2D] Problem bei Speicherfreigabe Spiele- und Multimedia-Programmierung 2
M Bukkit Plugin Problem Spiele- und Multimedia-Programmierung 22
T Java3D Rendering Problem Spiele- und Multimedia-Programmierung 7
J Problem bei pixelgenauer Kollisionsabfrage Spiele- und Multimedia-Programmierung 10
F Problem mit dem Abspielen von byte[] (Audioprogrammierung) Spiele- und Multimedia-Programmierung 2
C Problem mit Abspielen von Audio-Dateien Spiele- und Multimedia-Programmierung 3
R Problem bei Farbe ändern/4Gewinnt Spiele- und Multimedia-Programmierung 5
R StringIndexOutOfBoundsException - Problem Spiele- und Multimedia-Programmierung 2
S Problem mit Sichtfeld/Licht in einem Raster Spiele- und Multimedia-Programmierung 5
G Acht-Damen-Problem HILFE! Spiele- und Multimedia-Programmierung 11
J Problem mit Threads Spiele- und Multimedia-Programmierung 8
N Problem mit Kollisionsabfrage beim Fallen Jump & Run Spiele- und Multimedia-Programmierung 5
S Problem mit Zeitsteuerung der Game Loop Spiele- und Multimedia-Programmierung 4
Fu3L Problem mit 3D Noise Spiele- und Multimedia-Programmierung 4
L Problem beim Rätsellöser Spiele- und Multimedia-Programmierung 3
D Problem beim bewegen einer Figur Spiele- und Multimedia-Programmierung 2
T Problem bei LinkedList / JPanel Spiele- und Multimedia-Programmierung 4
T Problem mit ClassLoader und LWJGL Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben