Figur bewegen

mavinatic

Bekanntes Mitglied
Hallo ich bin dabei mir ein kleines spiel zu schreiben bin jedoch wie alle beginner an den anfängen :)

Mein Playground wird gezeichnet und alle Daten werden eingelesen. Ich habe eine Class Player die Variblen festlegt und diese sich mit get/set Methoden bearbeiten lassen.

Dann habe ich nochn Keylistener der mir die Bewegung ins Spiel bringt aber iwie funktioniert das nicht :/

Player class
Java:
package de.GameDemo.Map;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.geom.Rectangle2D;


public class Player {
	private int posx;
	private int posy;
	private int speed;
	public int getSpeed() {
		return speed;
	}

	public void setSpeed(int speed) {
		this.speed = speed;
	}
	private Rectangle2D playerShape =null;
	
	public int getPosx() {
		return posx;
	}

	public void setPosx(int posx) {
		this.posx = posx;
	}

	public int getPosy() {
		return posy;
	}

	public void setPosy(int posy) {
		this.posy = posy;
	}

	public Player() {
	    playerShape = new Rectangle2D.Double(posx+64,posy+64,32,32);
	}
	public Shape getShape() {
		return playerShape;
	}
}

MainPanel
Java:
package de.GameDemo.GUI;

import java.awt.Graphics;
import java.awt.GridLayout;
import java.io.IOException;

import javax.swing.JPanel;

import de.GameDemo.DataReader.ReadMapData;
import de.GameDemo.DataReader.ReadTextures;
import de.GameDemo.Listeners.KeyboardListener;
import de.GameDemo.Map.DrawPlayer;
import de.GameDemo.Map.Player;
import de.GameDemo.Map.Playground;


public class MainPanel extends JPanel 
{
	MainPanel mainpanel = null;
	
	ReadTextures rt = new ReadTextures();
	ReadMapData rmd = new ReadMapData();
	
	Player p = new Player();
	
	KeyboardListener kbl = new KeyboardListener(p);
	
	public MainPanel() throws IOException {
		setLayout(new GridLayout(1,1));
		
		setFocusable(true);
		addKeyListener(kbl);
	}
	
	public void paint(Graphics g) {
		Playground ground = new Playground(g, rmd.getMap(), rt.getImages());
		DrawPlayer dp = new DrawPlayer(g,p);
	}
	public void setMainPanel(MainPanel panel) {
		kbl.setMainpanel(panel);
	}
}

Listener
Java:
package de.GameDemo.Listeners;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import de.GameDemo.GUI.MainPanel;
import de.GameDemo.Map.Player;

public class KeyboardListener implements KeyListener {
	Player p = null;
	MainPanel mainpanel = null;
	
	public KeyboardListener(Player p) {
		this.p = p;
		p.setSpeed(32);
	}
	
	public void setMainpanel(MainPanel mainpanel) {
		this.mainpanel = mainpanel;
	}

	@Override
	public void keyPressed(KeyEvent arg0) {
		// TODO Auto-generated method stub
		if(arg0.getKeyCode() == 68) {
			p.setPosx(p.getPosx()+p.getSpeed());
			mainpanel.repaint();
		}
	}

	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}

}

Könnt ihr mir'n paar tipps geben wie ich meine figur zum laufen bringe ?

Danke im voraus :)
 

Ruzmanz

Top Contributor
Wo wird den der Mainpanel beim KeyListener gesetzt, sodass die repaint() Methode aufgerufen werden kann?

Es wäre schöner wenn du mit e.getKeyCode() == KeyEvent.VK_DOWN vergleichst. Dann weis auch jeder, welche Taste das ist^^
 

mavinatic

Bekanntes Mitglied
es ist die D taste :)

Ich versteh deine Frage nicht?
Java:
public void setMainPanel(MainPanel panel) {
		kbl.setMainpanel(panel);
	}
 

Ruzmanz

Top Contributor
Wo wird

Java:
public void setMainPanel(MainPanel panel) {
        kbl.setMainpanel(panel);
    }

aufgerufen? Immerhin soll er doch auf deinem Panel repainten, welches meiner Meinung nach null ist:

Java:
mainpanel.repaint();
 

mavinatic

Bekanntes Mitglied
Warum kommt keine Exception wenns Null ist? Das finde ich komisch?!

Ich habs nun umgeändert

Java:
package de.GameDemo.GUI;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Rectangle;
import java.awt.RenderingHints.Key;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Rectangle2D;
import java.io.IOException;

import javax.swing.JPanel;

import de.GameDemo.DataReader.ReadMapData;
import de.GameDemo.DataReader.ReadTextures;

import de.GameDemo.Listeners.KeyboardListener;
import de.GameDemo.Map.Playground;
import de.GameDemo.Player.Player;


public class MainPanel extends JPanel 
{
	ReadTextures rt = new ReadTextures();
	ReadMapData rmd = new ReadMapData();
	
	Player p = new Player();
	Rectangle r = new Rectangle(p.getX(),p.getY(),32,32);
	
	
	MainPanel panel = this;
	
	public MainPanel() throws IOException {
		setLayout(new GridLayout(1,1));
		
		p.setModel(r);
		
		KeyboardListener kbl = new KeyboardListener(panel,p);
		addKeyListener(kbl);
		setFocusable(true);
	}

	public void paint(Graphics g) {
		Playground ground = new Playground(g, rmd.getMap(), rt.getImages());
		
		Graphics2D g2 = (Graphics2D) g;
		g2.fill(p.getModel());
		g2.draw(p.getModel());
	}
}

Java:
	@Override
	public void keyPressed(KeyEvent arg0) {
		// TODO Auto-generated method stub
		if(arg0.getKeyCode()==KeyEvent.VK_RIGHT) {
			player.setX(player.getX()+32);
			main.repaint();
		}
	}

aber es funktioniert immernoch nicht! MainPanel wird übergeben!
 
Zuletzt bearbeitet:

Quaxli

Top Contributor
Ich hab' mal dran rumgefrickelt. Dabei habe ich das Ganze soweit modifiziert, daß es als selbständiges Programm ausführbar ist. Dann kann der Hilfswillige hier im Forum das Ganze auch mal ausprobieren (Merken für die Zukunft :D) - dann kriegt man auch schneller geholfen.

Hier erst mal der modifizierte Code, weiter Anmerkungen dann unten:

Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Rectangle2D;
import javax.swing.*;

public class MainPanel extends JPanel {

	KeyboardListener	kbl;
	Player						p;
	JFrame						frame;

	public static void main(String[] args) {
		new MainPanel();
	}

	public MainPanel() {
		p = new Player(50, 50);
	
		setPreferredSize(new Dimension(400, 400));

		frame = new JFrame("test");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(this);
		frame.setLocation(100, 100);
		frame.pack();
		kbl = new KeyboardListener(p, frame);
		frame.addKeyListener(kbl);
		frame.setVisible(true);
	}

	public void paint(Graphics g) {
		p.paintPlayer(g);
	}

}

class Player extends Rectangle2D.Double {

	private int	speed;

	public int getSpeed() {
		return speed;
	}

	public void setSpeed(int speed) {
		this.speed = speed;
	}

	public Player(int posx, int posy) {
		super(posx + 64, posy + 64, 32, 32);
	}

	public void paintPlayer(Graphics g) {
		g.setColor(Color.RED);
		g.fillRect((int) x, (int) y, (int) width, (int) height);
	}
}

class KeyboardListener implements KeyListener {

	Player		p;
	JFrame parent;

	public KeyboardListener(Player p, JFrame mp) {
		this.p = p;
		parent = mp;
		p.setSpeed(32);
	}

	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
			p.x = (p.getX() + p.getSpeed());
			parent.repaint();
		}
	}

	public void keyReleased(KeyEvent arg0) {

	}

	public void keyTyped(KeyEvent arg0) {

	}

}


So mit obigem Code hast Du eine ausführbares Beispiel zur weiteren Diskussion. Ich habe einige eigenwillige Konstrukte von Dir mal abgeändert. Warum sollte z. B. die Player-Klasse ein Rectangle2D im Bauch haben statt einfach davon zu erben? Und diese seltsame Zuordnung des Mainpanels habe ich ebenfalls mal rausgeworfen.
Wie gesagt es läuft jetzt. ABER: Du wirst mit diesem Ansatz auf keinen grünen Zweig kommen. Ein repaint-Aufruf aus dem KeyListener heraus ist bei einem Spiel eher suboptimal. Bevor ich jetzt alle auseinander pflücke: Klicke mal auf den Link in meiner Signatur, da findest Du ein Beispiel, wie man so etwas aufziehen kann.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Spiel Figur ansprechen und bewegen Spiele- und Multimedia-Programmierung 3
O Fehler bei Programmierung lässt Figur nicht bewegen Spiele- und Multimedia-Programmierung 5
D Problem beim bewegen einer Figur Spiele- und Multimedia-Programmierung 2
L Figur soll sich selbständig Bewegen Spiele- und Multimedia-Programmierung 12
A Figur zentrieren und Spielwelt erstellen Spiele- und Multimedia-Programmierung 1
F 2D Shooter (von oben) Kugelberechnung und drehen der Figur Spiele- und Multimedia-Programmierung 17
P Figur Rotation Spiele- und Multimedia-Programmierung 14
T [java3d] Figur drehen Spiele- und Multimedia-Programmierung 16
R Figur springen lassen Spiele- und Multimedia-Programmierung 10
Z Schach Figuren bewegen Spiele- und Multimedia-Programmierung 4
B Spieler auf besonderer Bahn bewegen Spiele- und Multimedia-Programmierung 1
M Minecraft Spieler move/run (bewegen) Spiele- und Multimedia-Programmierung 0
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
G Auf einem Stick bewegen Spiele- und Multimedia-Programmierung 5
astro151 JButtons mit Mausklicks bewegen Spiele- und Multimedia-Programmierung 2
M bewegen eines Objektes Spiele- und Multimedia-Programmierung 2
L JavaFX Objekte bewegen Spiele- und Multimedia-Programmierung 3
M Kamera "am Rande einer Kugel bewegen" Spiele- und Multimedia-Programmierung 4
javampir Lange Hintergrundgrafik einfügen und bewegen Spiele- und Multimedia-Programmierung 3
R Canvas Circle bewegen? Spiele- und Multimedia-Programmierung 14
K auf Mapraster frei bewegen Spiele- und Multimedia-Programmierung 7
T Android OpenGL Bewegen Spiele- und Multimedia-Programmierung 5
K Zum Ziel bewegen Spiele- und Multimedia-Programmierung 4
Helgon Große Welt bewegen? Spiele- und Multimedia-Programmierung 15
A Wie wird die Person im Game animiert, dass sie ihre Körperteile bewegen? Spiele- und Multimedia-Programmierung 3
G 2D Welt bewegen Spiele- und Multimedia-Programmierung 20
V Jogl: Objekt trotz Rotation immer in gleiche Richtung bewegen Spiele- und Multimedia-Programmierung 5
F RPG - Spielfigur soll sich nicht frei bewegen können. Anregugen wären gerne gesehen^^ Spiele- und Multimedia-Programmierung 13
N Objekt entgegengesetzt bewegen Spiele- und Multimedia-Programmierung 8
D Sprite zur Maus bewegen Spiele- und Multimedia-Programmierung 9
S Mehrere Steine gleichzeitig setzen und bewegen Spiele- und Multimedia-Programmierung 4
V Java3D: automatisches Bewegen der Kamera Spiele- und Multimedia-Programmierung 19
2 Kugel bewegen? Spiele- und Multimedia-Programmierung 17
G Zeichnung mit der Maus bewegen Spiele- und Multimedia-Programmierung 3
R Teilgraphen bewegen Spiele- und Multimedia-Programmierung 5
H mit Java2D Markierung über JTable zeichnen und diese bewegen Spiele- und Multimedia-Programmierung 2
A Bilder bewegen Spiele- und Multimedia-Programmierung 2
Z Obejkt drehen & vorwärts bewegen Spiele- und Multimedia-Programmierung 9
D nicht 4-eckiges bild auf Hintergrund bewegen Spiele- und Multimedia-Programmierung 2
G Bewegen von Objekten Spiele- und Multimedia-Programmierung 4
B Hilfe gesucht!! (bewegen von grafischen Objekten) Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben