Ein Graphics Obejct mehrmals mit denselben Eigenschaften zeichnen lassen?!?!?

SoLow

Neues Mitglied
Hallo, bin neu in der Community, hab schon länger mit diversen Programmiersprachen gearbeitet, muss aber zugeben dass ich mich nie wirklich reingehängt habe. Werde jetzt auch im September beginnen Informatik zu studieren, und dachte mir dass so ein Formu ganz nützlich sein könnten.
So, direkt zum Thema. Das Projekt an dem ich gerade arbeite soll ein kleines 2D Jump'n'Run Spiel werden.
Die Darstellung der Graphicen usw will ich ziemlich simpel halten ( vorerst sinds nur die Rectangles, später werden sich die dann auch noch um die eigene Achse drehen wenn man springt z.B.:)
Hier einmal der Quellcode zum nachvollziehen:

Class Skill
Java:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;



public class Skill extends gameLoop {
	
	
	public void init(){
		setSize(854, 450);
		Thread th = new Thread(this);
		th.start();
		offscreen = createImage(854, 450);
		player = offscreen.getGraphics();
		block = offscreen.getGraphics();
		floor = offscreen.getGraphics();
		addKeyListener(this);
	}
	
	public void paint(Graphics g){
		player.clearRect(0, 0, 854, 450);
		player.fillRect(x, y, 20, 20);
		block.fillRect (x2, y2, 20, 20);
		block.setColor(Color.GREEN);
		floor.fillRect(0, 368, 854, 10);
		g.drawImage(offscreen, 0, 0, this);

		
	}
	public void update(Graphics g){
		paint(g);
	}
}

Class gameLoop, zuständig für den Loop und die KeyInputs
Java:
import java.awt.event.KeyEvent;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.*;
import java.util.Random;

public class gameLoop extends Applet implements Runnable, KeyListener {

public int x, y, x2, y2;
public Image offscreen;
public Graphics player, floor, block;
public boolean up, down, left, right;
//public BufferedImage background, foreground, player;
//public BufferedImage[] walk = new BufferedImage[19];
public double counter = 5;
public Random rand = new Random();


 


//public void loadImages() {
	
//}
public void run() {

	x = 100;
	y = 100;
		
	x2 = 300;
	y2 = 300;
	
	
	while(true){
		int random = rand.nextInt(30);
		System.out.println(random);
		if (random >= 29) {
			x2 = 400;
			y2 = 400;
			
			
			
			
			
		}
		y2 += 4;
		if (y2 >348) {
			y2 = 348;
		}
		if (y2 == 348){
			x2-=2;
		}
		
		if (y <= 348 && up != true ){
			y+=10;
		}
		
		if (up == true) 
		{	
			counter += 0.1;
			y = (int)( y + (Math.sin(counter) + Math.cos(counter))* 10);
			
			if(counter >= 7)
			{
				counter = 5; 
			}
		}
		 if ( right == true) {
			 x+=2;
		 }
		 
		 if ( left == true) {
			 x-=2;
		 }
		 
		 if ( down == true) {
			 y +=2;
		 }
		 
		 if ( y>= 348) {
			 y = 348;
			 counter = 4;
		 }
		 repaint();
		 try {
			 Thread.sleep(20);
		 } catch (InterruptedException e) {
			 e.printStackTrace();
		 }
	}
}


public void keyPressed(KeyEvent e) {
	int c = e.getKeyCode();
	if (c == KeyEvent.VK_W)
	{
		if (y==348) {
		up = true;
		}
	}
	if (c == KeyEvent.VK_A)
	{
		 left = true;
	}
	if (c == KeyEvent.VK_D)
	{
		 right = true;
	}
	if (c == KeyEvent.VK_S)
	{
		 down = true;
	}
}

public void keyReleased(KeyEvent e) {
	int c = e.getKeyCode();
	if (c == KeyEvent.VK_W)
	{
		up = false;
		if (counter >= 5)
		{up = false;}
	}
	if (c == KeyEvent.VK_A)
	{
		 left = false;
	}
	if (c == KeyEvent.VK_D)
	{
		 right = false;
	}
	if (c == KeyEvent.VK_D)
	{
		 down = false;
	}
	}
public void keyTyped(KeyEvent arg0) {
	// TODO Auto-generated method stub
	
	}

}

Meine Frage ist nun: wie bekomm ich es her, dass der grüne block nicht immer nur auf die x2 bzw y2 Position zurückgesetzt wird, sondern dass ein neues grünes Rechtech gezeichnet wird, OHNE dass das vorherige Rechteck verschwindet. Also im Prinzip dass ich nicht nur das eine Rechsteck zurücksetzte immer wenn random == 29 ist, sondern, dass ich ein neues Objekt erstelle und dieses dann ebenfalls gezeichnet wird.
Im Prinzip soll dass Spiel dann so funktionieren, dass sich die grünen Blöcke vom rechten Rand her sich nach links bewegen und der Spieler muss auf den Blöcken von links nach rechts Springen und wenn er den Boden berührt stirbt er.

Ich freue mich auf eure Antworten,
danke schonmal
lg See
 

Network

Top Contributor
Ich habe KEINE AHNUNG was in deinem Code passiert. Sehr schwach kommentiert.
Beschreib doch mal was passieren soll (SOLL) und was im Moment stattdessen passiert (IST).

Also ich verstehe im Moment nicht genau warum da ständig eine Zufallszahl generiert wird, die (wenn über 29) x2 und y2 zurückgesetzt wird.
Allgemein, was sind die Variablen x, y, x2, y2 (Spielerkoordinaten? Wenn ja warum so viele?)

Grüße
Net
 

benruzzer

Mitglied
Also,
ich hab das ganze jetzt mal so verstanden: Letztendlich sollen mehrere grüne Rechtecke gezeichnet werden?

Dann solltest du alle Rechtecke (vlt. eigene dafür Klasse entwerfen, die die Koordinaten enthält)in einer Liste (am besten ArrayList) oder ähnlichem speichern und dann in der paint-Methode mit einer Schleife den gesamten Inhalt der Liste zeichnen lassen.
 

SoLow

Neues Mitglied
Hallo, entschuldige das Versäumnis, habe meine Kommentare eig immer auf Papier...
Also die x und y Koordinaten beschreiben den Standpunkt des Spielers zu jedem Zeitpunkt.
Außerdem zeichne ich ja nicht nur den Spieler sondern auch einen grünen block ( vorerst nur 1 mal ), denn eigentlich will ich ja immer eine Zufallszahl ( also von 0 bis 29 --> 30 Zahlen) generieren und dann sobald diese Zahl erreicht wird will ich einen neuen grünen Block "spawnen", ohne dass der andere grüne Block verschwindet. Ich weiß dass das hier nicht klappt, da immer nur der eine grüne Block in seinen eigenen Koordinaten , nachdem er sich ein bisschen nach links bewegt, wider zurückgesetzt wird ( x2 und y2 wider auf 400). Schlussendlich soll mein Spieler ja auch mit allen grünen Blöcken Collision detection aufweisen. Ich will aber nicht das jeder grüne Block den ich dargestellt habe von Hand programmiert werden soll, sondern eben dass immer wenn random == 29 ist dass dann ein neuer BlOCK "Spawned" UND sich automatisch nach links bewegt. Im Prinzip kann es ja unendlich viele grüne Blocke geben, dass kommt dann daruaf an wie oft die random nummer auf 29 schlägt und wie lange der Spieler dann tatsächlich überlebt... also habe ich nun x und y Koords für meinen Spieler, und x2 und y2 sind für den grünen block.
Frage nun mal anders gestellt. Wie kann ich eine neue Instanz des grünen Blocks spawnen ( mit x2, y2 als Varbiablen, aber dass x2, y2 des ersten grünen Blocks NICHT = x2, y2 des 2ten grünen Blocks, sondern x2, y2 einer neuen Instanz ( obwohl die Variablen denselben Namen haben)...
Ich freu mich schon auf eure Antworten
lg
 

Network

Top Contributor
Haja klar geht das.
Entweder du nutzt die Macht von OOP und ersteplst eine neue Klasse "GreenBlock". Jedesmal wenn der Zufallswert 30 erreicht erstellst du ein neues Objekt vom Typ "GreenBlock".
Das neue Objekt "GreenBlock" speicherst du in einer Hashmap <GreenBlock> und jedesmal wenn deine Schleife durchläuft iterierst du einfach durch die Hashmap durch
Java:
for( GreenBlock gb: hashmapGBs ) {
       gb.move();
       gb.draw();
}

Und Blöcke die das Ende (oder wo auch immer) erreicht haben, die löscht du wieder aus der Liste.

Gruß
Net
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M HILFE JPanel - Graphics Java Basics - Anfänger-Themen 1
H Eingabe tätigen bevor Graphics g Fenster öffnet Java Basics - Anfänger-Themen 5
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
J Erste Schritte drawLine Methode der Graphics Klasse Java Basics - Anfänger-Themen 2
J GUI / Graphics Java Basics - Anfänger-Themen 2
H Graphics / repaint Java Basics - Anfänger-Themen 8
K Zwei Fragen zu Graphics/Graphics2D Java Basics - Anfänger-Themen 5
R Cast java.awt.Graphics Java Basics - Anfänger-Themen 7
Azazel (Anfängerhilfe) awt.Graphics Schwierigkeiten Java Basics - Anfänger-Themen 6
I Methoden public void paintComponent (Graphics g) Java Basics - Anfänger-Themen 4
B Erste Schritte Anzeige von Graphics Objekten einzeln aktualisieren Java Basics - Anfänger-Themen 1
S Farbige Lebensleiste mit Graphics? Java Basics - Anfänger-Themen 10
S G Graphics Java Basics - Anfänger-Themen 1
thet1983 g.Graphics löschen? Java Basics - Anfänger-Themen 1
M Probleme mit paint() aus java.awt.Graphics Java Basics - Anfänger-Themen 2
A EAN13 Font auf graphics g erzeugt Monospaces Java Basics - Anfänger-Themen 14
N Graphics to png Java Basics - Anfänger-Themen 10
N Methode draw(Graphics g) aufrufen Java Basics - Anfänger-Themen 6
Dogge Problem mit paint(Graphics g) im Applet Java Basics - Anfänger-Themen 13
J Problem mit paint(Graphics g) Java Basics - Anfänger-Themen 4
J Jtable änderung soll graphics aktualisieren Java Basics - Anfänger-Themen 4
J JAVA Graphics Java Basics - Anfänger-Themen 5
A Graphics Objekt verhält sich merkwürdig Java Basics - Anfänger-Themen 2
G DRUCKEN von z.B. eines JFrame über print(Graphics g) Java Basics - Anfänger-Themen 9
Maxim6394 Probleme mit Graphics Java Basics - Anfänger-Themen 7
W von Graphics in BufferedImage Java Basics - Anfänger-Themen 10
M OOP Graphics immer selbstbezihend Java Basics - Anfänger-Themen 12
K Problem mit Parameter von paint(Graphics g) Java Basics - Anfänger-Themen 3
T Transparente Bilder mit Graphics zeichnen Java Basics - Anfänger-Themen 17
H Probleme mit Graphics G Java Basics - Anfänger-Themen 2
M Schiebepuzzle: MouseListener und Graphics? Java Basics - Anfänger-Themen 6
J Graphics g Java Basics - Anfänger-Themen 4
H Probleme mit Graphics Java Basics - Anfänger-Themen 5
B MouseListener & Graphics Java Basics - Anfänger-Themen 10
M Graphics zeichnen Java Basics - Anfänger-Themen 2
F Graphics PDFBox Java Basics - Anfänger-Themen 9
M kurze Frage zu Graphics Java Basics - Anfänger-Themen 5
Luk10 Buch für Swing/Awt/Graphics Java Basics - Anfänger-Themen 4
M Java Graphics etc. Java Basics - Anfänger-Themen 2
M Concurrency und Graphics Java Basics - Anfänger-Themen 9
F Was ist Graphics g wirklich? Java Basics - Anfänger-Themen 5
J Klasse Graphics Nullpointerexception Java Basics - Anfänger-Themen 8
P Frage zu Graphics Java Basics - Anfänger-Themen 2
O graphics methode zeigt mein bild nicht an Java Basics - Anfänger-Themen 7
F Zweite Graphics-Methode wird nicht ausgeführt Java Basics - Anfänger-Themen 4
T rotes herz public void paint(Graphics g) Java Basics - Anfänger-Themen 2
G paintComponent(Graphics g) Java Basics - Anfänger-Themen 2
eQui Oberfläche mit Graphics zeichnen Java Basics - Anfänger-Themen 11
S Dicke bei Graphics Ovject einstellen Java Basics - Anfänger-Themen 2
V KSKB zum Verständnis von Graphics und paintComponent Java Basics - Anfänger-Themen 6
G mit Graphics erzeugte Strings verschwinden sofort wieder Java Basics - Anfänger-Themen 7
T Graphics von java.awt.Frame soll sich inhalt merken Java Basics - Anfänger-Themen 3
G Graphics-Object skalieren Java Basics - Anfänger-Themen 9
G Constructor & Graphics g Java Basics - Anfänger-Themen 5
F Frage zum Graphics Objekt Java Basics - Anfänger-Themen 3
D Instanz von Graphics in run() Java Basics - Anfänger-Themen 8
B Mouseevents und Graphics Java Basics - Anfänger-Themen 11
D Abstrakte Klasse Graphics Java Basics - Anfänger-Themen 3
W Verständisfrage zu Graphics Objekt Java Basics - Anfänger-Themen 3
P umwandeln von graphics nach image Java Basics - Anfänger-Themen 4
A Graphics g, AdjustmentEvent e Java Basics - Anfänger-Themen 5
Dilandau paint(Graphics g) { unbekannt in try{} / catch{} }? Java Basics - Anfänger-Themen 5
S Graphics Java Basics - Anfänger-Themen 11
Abraham42 Prozentsatz einer Zahl mehrmals Java Basics - Anfänger-Themen 2
M Objekte mit einer Schleife mehrmals erzeugen Java Basics - Anfänger-Themen 17
S Java Counter: nur 1 mal hochzählen auch wenn Abfrage mehrmals zutrifft. Java Basics - Anfänger-Themen 1
dat_vin JFrame öffnet sich mehrmals Java Basics - Anfänger-Themen 6
T Globale Variable mehrmals verwenden Java Basics - Anfänger-Themen 7
G Thread mehrmals starten und schliessen Java Basics - Anfänger-Themen 6
T BufferReader soll datei mehrmals lesen Java Basics - Anfänger-Themen 13
M If-Anweisung (Objekt nachdem es gegessen wurde, mehrmals auftauchen lassen) Java Basics - Anfänger-Themen 3
D Wave Datei mehrmals abspielen Java Basics - Anfänger-Themen 2
M gleiche Box in GUI mehrmals verwenden Java Basics - Anfänger-Themen 5
L Zeichen mehrmals Ausgeben Java Basics - Anfänger-Themen 8
StrikeTom String mehrmals splitten Java Basics - Anfänger-Themen 11
L JFrame darf nicht mehrmals geöffnet werden , wie? Java Basics - Anfänger-Themen 4
S JLabel mehrmals benutzen Java Basics - Anfänger-Themen 4
G ein programm nicht mehrmals starten können Java Basics - Anfänger-Themen 6
B Array mehrmals als Objekt erzeugen Java Basics - Anfänger-Themen 17
G Warum das Prog mehrmals das gleiche macht wegen ItemListener Java Basics - Anfänger-Themen 4
B nach Zeichen suchen dass im string mehrmals vorkommt Java Basics - Anfänger-Themen 3
S System.in.read() mehrmals nacheinander aufrufen Java Basics - Anfänger-Themen 3
B Label wird ungewollt mehrmals erstellt Java Basics - Anfänger-Themen 16
B Map die keys mehrmals aufnimmt Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben