Bekanntes Heli Spiel -> Aber Probleme damit

Status
Nicht offen für weitere Antworten.

TKing

Mitglied
Hallo,

habe zwar nicht so viel Erfahrung, aber was mir neu ist, ist das mit dem mov:akteur oder so. kA wie das funktioniert und warum man das genau macht.

Ich kann nämlich kein Bild anzeigen lassen:
folgender Grund:
@Override
public void paintComponent(Graphics g)//Frames anzeigen(*)
{
super.paintComponents(g);

g.setColor(Color.red);
g.drawString("FPS: "+Long.toString(fps),0,10);

if(akteur!=null)
{

for(Drawable draw:akteur)
{
draw.drawObject(g);
}
}
}

Der akteur kalppt nicht. Immer rot unterschlängelt und die Meldung heißt:
Type missmatch:connot convert form element type Sprite to Drawable

Aber warum nicht?

Bis jetzt kann hab ich noch nicht viel davon gemacht und will das Heli spiel ummodellieren in ein eigenes Game. Also bis jetzt hab ich nur das Fenster anzeigen lassen und die Grafik eingebunden. Mehr noch nicht.
FPS (ca. 170fps)werden im Fenster angezeigt(wenn der oben angegebene Part auskommentiert ist) jedoch das Bild nicht.

Noch eine Frage zum Bild:
Wenn man nur ein BIld hat mit 30*30 px geht das dann so in der

BufferedImage[] bomber = this.loadImage("pic/bomber.gif",1);?

Also ich weiß wirklich nicht weiter:p

Hoffe jemand kann mir hier helfen^^
 

TKing

Mitglied
aber wie soll ich das jetzt machen?

Irgendwie ist vererbung ja standart nur ich hab zur Zeit nen Black out oder nen Brett vorm Kopf...

sprich die Sprite Klasse wird glaub gar nciht benutzt....

also meinst du jetzt extends Sprite?

oder import?

Angesporchen wird es doch eh nur durch den vector oder liege ich da flasch?

Problem ist auch, dass meine Sprite ja implements Drawable sein muss... aber das geht nciht...wird class Sprite unterschlängelt...irgendwas passt einfach nicht
implements Drawable geht nur wenn icfh Sprite abstract mache, aber dann meckert wieder GamePanel
 
Zuletzt bearbeitet:

andre111

Bekanntes Mitglied
Naja, das Sprite wird unterringelt wenn es nicht abstrakt ist, weil es dann die Methoden von Drawable (vermutlich draw(...)) implementieren muss.
 

TKing

Mitglied
Die Sprite will, dass ich diese methode erzeugen soll(sprich die aus der Drawable):
public void drawObject(Graphics g) {
// TODO Auto-generated method stub

}
Bringt auch kein Bild zum vorschein...

vllt noch etwas...warum werden meine FPS nicht erkennbar angezeigt? Sieht so aus als wenn die so shcnell wechseln würden, dass diese nicht mehr zu erkennen sind.
In der COnsole als ausgabe ganz normal im 60-70er Bereich
 

TKing

Mitglied
Jede Methode tut was...alle durchgetestet und es sieht auch alles ganz relevant und logisch aus..aber irgendwas dürfte trotzdem falsch sein
 

ARadauer

Top Contributor
von welchem Heli Spiel redest du? Dem aus Quaxlis Tutorial?
Wenn ja musst du dir das halt nochmal ansehen. Du hast irgendwo einen Fehler ;-)
 

TKing

Mitglied
ja das mein ich(Quaxli)...das Problem ist aber irgendwie so, dass ich es nciht finde...und nochmal anfangen...hab ich eigentlich keine lust...aber es muss doch irgendwelche hinweise geben, wenn das Bild nicht angezeigt wird... Heli oder selbst ein 30*30 gif...
 
Zuletzt bearbeitet:
G

Gastredner

Gast
Die Sprite will, dass ich diese methode erzeugen soll(sprich die aus der Drawable):
public void drawObject(Graphics g) {
// TODO Auto-generated method stub

}
Bringt auch kein Bild zum vorschein...
Wie sieht denn die Implementierung der Methode aus, vielleicht hast du da einen Fehler gemacht.
 

dayaftereh

Top Contributor
Vieleicht Postest du mal den Code? Dann können wir die weiter Helfen, ich weiß das im Tutorial von Quaxlis ein paar Code Sprünge sind, die eine Anfänger nicht gleich sieht oder versteht.(ich gebe den Azubis gerne dieses Tutorial!)
 

TKing

Mitglied
GamePanel(sind überall Kommentare für mcih slebst zwischen)

Java:
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.Vector;
import javax.imageio.ImageIO;
import javax.swing.*;



public class GamePanel extends JPanel implements Runnable
//Runnable = Um das Spiel in einem eigenen Thread laufen zu lassen
{
	private static final long serialVersionUID = 1L;
	boolean spiel_lauf = true; //für einen Schleifenabbruch der Spieleschleife(run())
	
	//Zeitmessung(flüssigen Spielelauf)
	long zeiterrechnung = 0;
	long letztezeit = 0;
	long fps = 0;
	
	Sprite man;
	Vector<Sprite> akteur;
	
	
	public static void main(String[] args) 
	{
		new GamePanel(800,600);//Größe von 800*600 festgelegt
	
	}
	
	public GamePanel(int width, int height)
	{
		//Fenster Eigenschaften:
		
		this.setPreferredSize(new Dimension(width,height));
		JFrame fenster = new JFrame("BomberMan");
		fenster.setLocation(100,100);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fenster.add(this);
		fenster.pack();//Hiermit wird das Fenster an die gewünschte Größe angepasst
		
		fenster.setVisible(true);
		UniqueLoad();
		fenster.setVisible(true);
	}
	
	public void UniqueLoad()//Einmaliges Laden(Bilder und Grafiken vorladen(Performance schub))
	{
		letztezeit = System.nanoTime();
//		System.out.println(letztezeit);
		akteur = new Vector<Sprite>();
		BufferedImage[] bomber = this.loadImage("pic/bomber.gif",1);
		System.out.println(akteur);
		man = new Sprite(bomber,20,20,100,this);//S.21
		akteur.add(man);
		System.out.println(akteur);
		
		Thread t = new Thread(this);//Spiel in ein Thread gepackt
		t.start();
	}
	public void run()//alle notwendigen Prüfungen werden in einer Schleife vorgenommen
	{
		while(spiel_lauf)
		{
			System.out.println("Spiellauf");
			schleifenBerechnung();
			checkEingabe();
			doLogic();
			
			moveObjectsOn();
			
			repaint();
			try
			{
				Thread.sleep(10);
			}
			catch(InterruptedException e)
			{
				JOptionPane.showMessageDialog(null, e);
			}
		}
	}
	private void schleifenBerechnung()
	{
		
		zeiterrechnung = System.nanoTime()-letztezeit;//Errechung des Schleifendurchlaufs(while(spiel_lauf))
//		System.out.println("zeiterrechnung"+zeiterrechnung);
		letztezeit = System.nanoTime();//aktuelle Systemzeit
//		System.out.println("letztezeit: "+letztezeit);
		fps = ((long) 1e9)/zeiterrechnung;//Frameratenberrechnung(*)
		
//			System.out.println("FPS: "+fps);
		
		
		

	}

	@Override
	public void paintComponent(Graphics g)//Frames anzeigen(*)
	{
		super.paintComponents(g);
		
		g.setColor(Color.red);
		g.drawString("FPS: "+Long.toString(fps),0,10);
//	System.out.println("paint Component");
		if(akteur!=null)
		{
//			System.out.println("paint Componentif");
			for(Drawable draw:akteur)
			{
				draw.drawObject(g);
//				System.out.println("paint Componentifdraw");
			}
		}
	}
	// Laden der Bilder in ein Array-> Für die Animation sowie die Berechnungen
	private BufferedImage[] loadImage(String path, int image)
	{
		BufferedImage[] anim = new BufferedImage[image];
		BufferedImage source = null;
		
		URL imageurl = getClass().getClassLoader().getResource(path);//Ermittlung der URL(Speicherort)
		try
		{
			source = ImageIO.read(imageurl);
		}
		catch(IOException ioe){}
	
		for(int x = 0;x<image;x++)
		{
			anim[x] = source.getSubimage(x*source.getWidth()/image, 0, source.getWidth()/image, source.getHeight());
		}
		
		return anim;
	}
	private void doLogic()
	{
		for(Moveable mov:akteur)
		{
			mov.doLogic(zeiterrechnung);
//			System.out.println("doLogic"+zeiterrechnung);
		}
	}
	private void moveObjectsOn()
	{
//		System.out.println("MoveObjectsOn");
		for(Moveable mov:akteur)
		{
			mov.move(zeiterrechnung);
//			System.out.println("MoveObjectsOnInderSchleife");
		}
	}
	private void checkEingabe()
	{
		
	}
	
	

}

Sprite:
Java:
import java.awt.Graphics;
import java.awt.geom.Rectangle2D;
//import java.awt.geom.Rectangle2D.Double;
import java.awt.image.BufferedImage;


public class Sprite extends Rectangle2D.Double implements Moveable,Drawable
{

	private static final long serialVersionUID = 1L;
	long delay;//für Millisekunden
	long animation = 0;
	
	protected double dx;//Horizontale Veränderung +getters und setters
	protected double dy;//vertikale Veränderung +getters und setters
	
	GamePanel referenz;//Referenz auf das GamePanel
	
	BufferedImage[] image;//Bilderarray
	 int currentimage = 0;//Bildzähler (0 - n Bilder)
	 


	public Sprite(BufferedImage[] i,double x,double y,long delay, GamePanel gp)//void?!?!?
	 {
		 image = i;
		 this.x = x;
		 this.y = y;
		 this.delay = delay;
		 this.width = image[0].getWidth();//Benutzung gleich Großer Bilder
		 this.height = image[0].getHeight();//Benutzung gleich Großer Bilder
		 referenz = gp;
		 
	 }
	 
	
    public void drawObjects(Graphics g)//Bildzeichnung vom GamePanel übergebene Grafik
    {
    	g.drawImage(image[currentimage],(int)x,(int)y,null);//Problem gehabt wegen (int)
    ;
    }
	public void doLogic(long zeiterrechnung) 
	{
		animation += (zeiterrechnung/1000000);//dividiert durch 1 Mil. wegen Nanosekunden
		System.out.println(animation+"animation");
		if(animation > delay)
		{
			animation = 0;
			animationsBerechnung();//Hiermit ermitteln wir das nächste Bild
		}
	}

	public void move(long zeiterrechnung) //Wenn zeiterrechnung != null dann bewegen
	{
		if(dx!=0)
		{
			x += dx*(zeiterrechnung/1e9);
		}
		if(dy!=0)
		{
			y += dy*(zeiterrechnung/1e9);
		}
		
	}
	private void animationsBerechnung()
	{
		currentimage++;
		if(currentimage >= image.length)//Fehlervermeidung der aktuellen Animation/Bild[Array]
		{
			currentimage = 0;
		}
			
	}

	public void setVerticalSpeed(double d)
	{
		dy = d;
	}
	public void setHorizontalSpeed(double d)
	{
		dx = d;
	}
	public double getVerticalSpeed()
	{
		return dy;
	}
	public double getHorizontalSpeed()
	{
		return dx;
	}


	public void drawObject(Graphics g) {
		
		
	}

}

Drawable
Java:
import java.awt.Graphics;

public interface Drawable 
{
	public void drawObject(Graphics g);
	
}

und Moveable:

Java:
public interface Moveable 
{
	public void doLogic(long zeiterrechnung);
	public void move(long zeiterrechnung);
}

Vielleicht findet jemand miene dummen Fehler:p...würdm ich aber freuen... einfach aufgeben ist nicht richtig:p
 
G

Gastredner

Gast
Dein Code aus [c]drawObjects(...)[/c] gehört in die Methode [c]drawObject(...)[/c].
Gab es überhaupt jemals eine [c]drawObjects(...)[/c] im Tutorial? Erinnere mich irgendwie nicht daran...
 

TKing

Mitglied
nur wenn ich die rausnehme kann ich nicht implements Drawable machen...also das war nur ne notlösung, die dazu dient, dass das progi einfach startet
wenn diese nciht existiert, dann ist halt die klasse Sprite und Implements Drawable unterschlängelt...warum auch immer...
 
G

Gastredner

Gast
Ah, war auch Unsinn: Ich hab mir das Tutorial grad nochmal angesehen - dein Fehler ist ein einfacher Schreibfehler!
Die Methode des Interfaces Drawable heißt drawObjects, nicht drawObject. Ändere die Deklaration im Interface und korrigiere die Aufrufe der fehlerhaft benannten Methode.
 

TKing

Mitglied
:lol: ... Danke:-* hast mir echt weitergeholfen... war ja gott sei dank echt nur ein dumer Fehler:) echt super Hilfe:)
 

TKing

Mitglied
Mein Problem ist jetzt ja eigentlich behoben nur was mich stört ist die fps anzeige die Wirklich komisch dargestellt wird. Sprich es sieht so aus als wenn die zahlen so shcnell wechseln, dass es nichtmal so shcnell angezeigt werden kann... auch ein Fehler oder Schicksal?

 

Zenic

Mitglied
Selber Fehler.
Java:
public void paintComponent(Graphics g)//Frames anzeigen(*)
    {
        super.paintComponents(g); //<-- das s ist zuviel
        ...
    }
Das s weg, dann sollte es Richtig angezeigt werden.
 

TKing

Mitglied
danke shconmal für die ganze Hilfe hier:) echt mal nen Hammer Forum^^ auch wenns für euch nur eine Kleinigkeit ist. Eine Frage gibt es noch...wie kriege ich immer die genaue Position meines wandernden objektes(zb. Heli) im spiel raus?
 

andre111

Bekanntes Mitglied
Damit:
Java:
Sprite actor = new Sprite(...);
double xPosition = actor.getX();
double yPosition = actor.getY();
 

radiac

Bekanntes Mitglied
noch ein Quaxli Tutorial User :).

Ich kenn das Tutorial jetzt mittlerweile innen und auswendig. Wenn du Fragen hast, kannst du mich auch fragen :).
 

TKing

Mitglied
Ich wollte das Tutorial ein wenig umändern und daraus BomberMan programmieren. geschafft habe ich bis jetzt, dass mein mänchen läuft(änlich wie der heli), jedoch wenn ich eine bombe setzte/lege weiß ich nicht wie die nach einer gewissen Zeit wieder verschwinden soll...:(
sprich explodieren soll...und man keine andere bombe über eine bereits gelegte legen kann:
Java:
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.Vector;
import javax.imageio.ImageIO;
import javax.swing.*;

import view.GamePanelView;

import mdInterface.Drawable;
import mdInterface.Moveable;



public class GamePanel extends JPanel implements Runnable,KeyListener
//Runnable = Um das Spiel in einem eigenen Thread laufen zu lassen
{
	private static final long serialVersionUID = 1L;
	boolean spiel_lauf = true; //für einen Schleifenabbruch der Spieleschleife(run())
	boolean gestartet = false;
	boolean once = false;
	
	//Zeitmessung(flüssigen Spielelauf)
	long zeiterrechnung = 0;
	long letztezeit = 0;
	long fps = 0;
	
	//die Steuerung:
	boolean up = false;
	boolean down = false;
	boolean right = false;
	boolean left = false;
	boolean bombe = false;
	int geschwindigkeit = 200;//für die Geschwindigkeit unseres bewegten Objects
	
	BomberMan man;//wegen abstract in Sprite
	Bombe bom;
	Vector<Sprite> akteur;
	
	public static void main(String[] args) 
	{
		new GamePanel(800,600);//Größe von 800*600 festgelegt
	}
	public GamePanel(int width, int height)
	{
		//Fenster Eigenschaften:
		
		this.setPreferredSize(new Dimension(width,height));
		this.setBackground(Color.gray);
		JFrame fenster = new JFrame("BomberMan");
		fenster.setLocation(100,100);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fenster.addKeyListener(this);
		this.add(new JLabel("1.Zum starten: Enter drücken"+"----->"+
							"2.Zum Thread beenden: ESC drücken"+"----->"+
							"3.Zum Spiel beenden: nochmal ESC drücken"));
		fenster.add(this);
		fenster.pack();//Hiermit wird das Fenster an die gewünschte Größe angepasst
		
		fenster.setVisible(true);
		UniqueLoad();
		fenster.setVisible(true);
	}
	
	//Bilderstrings
	String heli = "heli.gif";
	String bomberman = "bomber.gif";
	String bombeone = "bombe.gif";
	
	
	public void UniqueLoad()//Einmaliges Laden(Bilder und Grafiken vorladen(Performance schub))
	{
		letztezeit = System.nanoTime();
		akteur = new Vector<Sprite>();
		
		BufferedImage[] bomber = this.loadImage("pic/"+bomberman,1);
		man = new BomberMan(bomber,400,300,50,this);
		akteur.add(man);
		
		if(!once ==true)//verhindert,dass nach jedem Neustart ein neuer Thread aufgemacht wird
		{
			once=true;
			Thread t = new Thread(this);//Spiel in ein Thread gepackt
			t.start();//und gestartet
		}
	
	}
	public void run()//alle notwendigen Prüfungen werden in einer Schleife vorgenommen
	{
		while(spiel_lauf)
		{
			schleifenBerechnung();
			
			if(isGestartet())
			{
				checkEingabe();
				doLogic();
				moveObjectsOn();
			}
			repaint();
			try
			{
				Thread.sleep(1);
			}
			catch(InterruptedException e)
			{
				JOptionPane.showMessageDialog(null, e);
			}
		}
	}
	private void schleifenBerechnung()
	{
		
		zeiterrechnung = System.nanoTime()-letztezeit;//Errechung des Schleifendurchlaufs(while(spiel_lauf))
		letztezeit = System.nanoTime();//aktuelle Systemzeit
		fps = ((long) 1e9)/zeiterrechnung;//Frameratenberrechnung(*)
	}

	@Override
	public void paintComponent(Graphics g)//Frames anzeigen(*)
	{
		super.paintComponent(g);
		
		g.setColor(Color.red);
		g.drawString("FPS: "+Long.toString(fps),0,10);
		
		//nach Spielbeginn wird erst gezeichnet:
		if(!isGestartet())
		{
			return;
		}
		if(akteur!=null)
		{
			for(Drawable draw:akteur)
			{
				draw.drawObjects(g);
			}
		}
	}
	// Laden der Bilder in ein Array-> Für die Animation sowie die Berechnungen
	private BufferedImage[] loadImage(String path, int image)
	{
		BufferedImage[] anim = new BufferedImage[image];
		BufferedImage source = null;
		
		URL imageurl = getClass().getClassLoader().getResource(path);//Ermittlung der URL(Speicherort)
		try
		{
			source = ImageIO.read(imageurl);
		}
		catch(IOException ioe){}
	
		for(int x = 0;x<image;x++)
		{
			anim[x] = source.getSubimage(x*source.getWidth()/image, 0, source.getWidth()/image, source.getHeight());
		}
		
		return anim;
	}
	private void doLogic()
	{
		for(Moveable mov:akteur)
		{
			mov.doLogic(zeiterrechnung);
		}
	}
	private void moveObjectsOn()
	{
		for(Moveable mov:akteur)
		{
			mov.move(zeiterrechnung);
		}
	}
	private void checkEingabe()
	{
		if(up)
		{
			man.setVerticalSpeed(-geschwindigkeit);
		}
		if(down)
		{
			man.setVerticalSpeed(geschwindigkeit);
		}
		if(right)
		{
			man.setHorizontalSpeed(geschwindigkeit);
		}
		if(left)
		{
			man.setHorizontalSpeed(-geschwindigkeit);
		}
		//falls losgelassen wird dann soll er stoppen
		if(!left && !right)
		{
			man.setHorizontalSpeed(0);
		}
		if(!up && !down)
		{
			man.setVerticalSpeed(0);
		}
		//Man kann keine Bewegungen gleichzeitig drücken:
		if(down && left || down && right || up && left || up && right || right && left || up && down)
		{
			man.setVerticalSpeed(0);
			man.setHorizontalSpeed(0);
		}
	}
	
	//Automatisch ertsellt durch den KeyListener
	//Die Vorgehensweise stellt sicher, dass alles immer klappt(nihct in der Keylistener Klasse gemacht)
	
	public void keyPressed(KeyEvent ke) 
	{
		if(ke.getKeyCode()==KeyEvent.VK_UP)
		{
			up = true;
			
		}
		if(ke.getKeyCode()==KeyEvent.VK_DOWN)
		{
			down = true;
		}
		if(ke.getKeyCode()==KeyEvent.VK_LEFT)
		{
			left = true;
		}
		if(ke.getKeyCode()==KeyEvent.VK_RIGHT)
		{
			right = true;
		}
		if(ke.getKeyCode()==KeyEvent.VK_0)
		{
			bombe = true;
			
			createBombe();
			
		}
	}
	public void keyReleased(KeyEvent ke) 
	{
		if(ke.getKeyCode()==KeyEvent.VK_UP)
		{
			up = false;
		}
		if(ke.getKeyCode()==KeyEvent.VK_DOWN)
		{
			down = false;
		}
		if(ke.getKeyCode()==KeyEvent.VK_LEFT)
		{
			left = false;
		}
		if(ke.getKeyCode()==KeyEvent.VK_RIGHT)
		{
			right = false;
		}
		if(ke.getKeyCode()==KeyEvent.VK_0)
		{
			bombe = false;
		}
		if(ke.getKeyCode()==KeyEvent.VK_ENTER)
		{
			if(!isGestartet())
			{
				UniqueLoad();
				setGestartet(true);
			}
		}
		if(ke.getKeyCode()==KeyEvent.VK_ESCAPE)
		{
			if(isGestartet())
			{
				setGestartet(false);
//				System.exit(0);
			}
			else
			{
				setGestartet(false);
				System.exit(0);
				
			}
		}
	}
	
	public void keyTyped(KeyEvent ke) 
	{
	
	}
	public boolean isGestartet() 
	{
		return gestartet;
	}
	public void setGestartet(boolean gestartet) 
	{
		this.gestartet = gestartet;
	}
	boolean bomesetzten = false;
	
	public void createBombe()
	{
		BufferedImage[] bombearray = this.loadImage("pic/bombe.gif",4);		
		
		double xx = man.getX();
		double yy = man.getY()+30;
		
		Bombe bom= new Bombe(bombearray,xx,yy,50,this);
		akteur.add(bom);	
	}
}

in der createBombe() wird eine bombe erstellt und an der position des Mänchen gesetzt... wie kann ich die nächste bombe so erstellen, dass wenn in dem Bereich schon eine gelegt ist keine weitere gelegt werden kann?
 

Quaxli

Top Contributor
Laß Dir was einfallen und probiere, ob es funktioniert. So lernt man programmieren.
Das ist jetzt nicht böse gemeint: Die Grundlagen für Dein Problem stehen im Tutorial, der Rest ist kreatives Denken. Wenn Du Dir alles vorkauen läßt, kommst Du nur sehr langsam auf einen grünen Zweig.

Aber um die Frage zu beantworten:

Es gibt verschiedene Möglichkeiten:
- Du speicherst alle Bomben in einer eigenen Collection und prüfst, ob eine die gleichen bzw. annähernd gleichen Koordinaten hat.
- Du loopst über alle Objekte in der Collection, in der die Sprites sind und wenn eines davon eine Bombe ist, prüfst Du die Koordinaten
- Du könntest auch im Hintergrund ein Raster vorhalten, in das die Bomben gelegt werden können und prüfst gegen das.
- etc. etc.
 

TKing

Mitglied
danke schonmal... ja so ein raster ist echt ne gute idee...
gibt es irgendwelche bestimmten methoden oder kannste mir noch ein Tipp geben wie ich da anfangen soll?
 

Quaxli

Top Contributor
Da hast Du Dir gleich den anspruchsvollsten Vorschlag ausgeguckt, den die Lösung beinhaltet auch, daß sich die Bewegung des Spielers am Raster orientiert.
Und nein, da gibt es nix Fertiges. Ich mache so etwas meistens mit einem 2-dimensionalen Array aus Rechtecken, das ich in eine eigene Klasse packe und mir die benötigten Methoden dazu schreibe.
 

TKing

Mitglied
so hab das mit dem raster erstmal hinbekommen, dass der nur auf bestimmten punkten gehen kann.. danke nochmal ;)

bräuchte aber nochmal ganz kurz eure hilfe. habe jetzt das problem, dass ich nich mehr weiter weiß bei den bomben.. wollte, dass die 3 sekunden angezeigt werden und dann explodieren - dazu müssen die ja gelöscht werden.. aber wie genau geht das, dass der genau 3 sekunden wartet und dann das objekt gelöscht wird? was genau muss ich da abfragen? mit thread.sleep gehts schonma nich weil der dann natürlich nicht mehr weiterlaufen kann..

Das nächste problem, bei dem ihr mir vllt helfen könnt, ist, dass ich nicht weiß, wie ich bei bomberman abfragen kann, dass der nicht über gewisse felder laufen kann.. hab das alles mithilfe eines arrays gelöst - also das spielfeld ist ein array und wenn ich z.b. die taste links gedrückt halte, fragt der ständig ab, ob links neben der figur schon ein objekt (ein stein oder bombe) existiert.. das geht auch alles super bis dahin, aber wenn zwischen dem spieler und dem gegenstand genau 1 platz frei ist, kann der über das objekt laufen und ich weiß echt nich warum :( habe mir zwischendurch immer die positionen des arrays ausgeben lassen und habe dann festgestellt, dass, wenn ich z.b. bei der position 7 starte und nach links rübergehe, erst die 5 ausgegeben wird und dann 4 usw.

kann euch ja mal den code posten

danke schonmal im voraus

Java:
	public boolean checkObenmoeglich() 
	{
		boolean moeglich = true;

		int x = (int) ((man.getX() + man.getX() + 50) / 100);
		int y = (int) ((man.getY() + man.getY() + 50) / 100);

		if (steinarray[x][y - 1] != null)
			moeglich = false;

		return moeglich;
	}
	


	public boolean checkRechtsmoeglich() 
	{
		boolean moeglich = true;

		int x = (int) ((man.getX() + man.getX() + 50) / 100);
		int y = (int) ((man.getY() + man.getY() + 50) / 100);

		if (steinarray[x + 1][y] != null)
			moeglich = false;

		return moeglich;
	}

	public boolean checkUntenmoeglich() 
	{
		boolean moeglich = true;

		int x = (int) ((man.getX() + man.getX() + 50) / 100);
		int y = (int) ((man.getY() + man.getY() + 50) / 100);

		if (steinarray[x][y + 1] != null)
			moeglich = false;

		return moeglich;
	}


	public boolean checkLinksmoeglich() 
	{
		boolean moeglich = true;

		int x = (int) ((man.getX() + man.getX() + 50) / 100);
		int y = (int) ((man.getY() + man.getY() + 50) / 100);

		if (steinarray[x - 1][y] != null)
			moeglich = false;

		System.out.println(x);

		return moeglich;
	}

	
	
	//Automatisch ertsellt durch den KeyListener
	//Die Vorgehensweise stellt sicher, dass alles immer klappt(nihct in der Keylistener Klasse gemacht)
	
	public void keyPressed(KeyEvent ke) 
	{
		if(ke.getKeyCode()==KeyEvent.VK_UP)
		{
			up=true;
			if(!checkObenmoeglich())
				up=false;
		}
		if(ke.getKeyCode()==KeyEvent.VK_DOWN)
		{
			down = true;
			if(!checkUntenmoeglich())
				down=false;
		}
		if(ke.getKeyCode()==KeyEvent.VK_LEFT)
		{			
			if(!checkLinksmoeglich())
				left=false;
			else
				left=true;	
		}
		if(ke.getKeyCode()==KeyEvent.VK_RIGHT)
		{
			right = true;
//			System.out.println("xwert"+(int)(man.getX()+man.getX()+50)/100);
//			System.out.println("ywert"+(int)(man.getY()+man.getY()+50)/100);
//			
//			System.out.println(spielfeldArray[(int)(man.getX()+man.getX()+50)/100][(int)(man.getY()+man.getY()+50)/100]);
			
			if(!checkRechtsmoeglich())
				right=false;
		}
 

Quaxli

Top Contributor
Für die Bomben fallen mir 2 Möglichkeiten ein:

1. Du bastelst Dir eine Funktionalität "innerhalb der Bombe" welche die Zeit überprüft
2. Du steuerst das ganze über die Animation und verwendest entsprechend viele Bilder.

Der 1. Vorschlag ist vermutlich der praktikablere.
 

TKing

Mitglied
ich bin hier echt am verzweifeln....ich weiß nicht wie ich die explosionsgrafik einblenden soll, wenn die bombe explodieren soll...Timer funktioniert nicht, Thread weiß ich nicht wie man dort nur eine Methode starten soll...
es ...
Klasse Bombe:
Java:
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;


public class Bombe extends Sprite 
{
	private static final long serialVersionUID = 1L;
	
	Rectangle2D.Double target;
	boolean locked = false;
	boolean imageSchonDreiGewesen=false;
	BufferedImage[] i;
	int xbombe = referenz.xbombe;
	int ybombe = referenz.ybombe;
	
	
	public Bombe(BufferedImage[] i, double x, double y, long delay, GamePanel gp) 
	{
		super(i, x, y, delay, gp);
	}
	

	@Override
	public void doLogic(long zeiterrechnung) 
	{
		super.doLogic(zeiterrechnung);
		referenz.bombeSchonDa=true;
//		referenz.steinarray[0][0]=null;
//		referenz.akteur.removeElement(referenz.steinarray[0][0]);
		if(currentimage==3)
		{
			imageSchonDreiGewesen=true;			
		}
		if(imageSchonDreiGewesen==true&&currentimage==0)
		{
//			referenz.createExplosion();
			referenz.bombeSchonDa=false;
			remove=true;	
			
			referenz.bombenarray[(int)referenz.xbombe][(int)referenz.ybombe] = null;

Methode create Bombe:

Java:
public void createBombe()
	{
		BufferedImage[] bombebilderarray = this.loadImage("pic/bombe.gif",4);
		BufferedImage[] explosionbilderarray = this.loadImage("pic/explosionmitte.gif",1);	
		
		double x = man.getX();
		double y = man.getY();
				              
		xbombe = (int) ((man.getX() + man.getX() + 50) / 100);
		ybombe = (int) ((man.getY() + man.getY() + 50) / 100);
		
		bombenarray[xbombe][ybombe] = new Bombe(bombebilderarray,x,y,1000,this);
		bombenarray[xbombe+2][ybombe] = new Bombe(explosionbilderarray,x+100,y,1000,this);
//		slib.playSound("Name:Booom");
		akteur.add(bombenarray[xbombe][ybombe]);
		akteur.add(bombenarray[xbombe+2][ybombe]);
//		timer.schedule  ( new Task(), 4000);
	
//		steinarray[i][k] = new Stein(stein,i*50,k*50,100,this);
//		akteur.add(steinarray[i][k]);

		
	}

und hierbei weiß ich nicht wie ich die explosionsgrafiken nach dem verschwinden der bombe laden soll...
Wenn ich eine neue Methode dafür ertselle, dann kommt immer ein Fehler... mit demTimer funktionierts auch irgendwie nicht, sprich mit Timertask kann ich die ganzen Bilderarrays nicht einbinden.???:L
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Quaxli's Heli Spiel läuft nicht nach Plan Spiele- und Multimedia-Programmierung 2
Gossi Erweiterung von Quaxlis Heli-Spiel Spiele- und Multimedia-Programmierung 16
radiac Sprit ist leer bei Quaxli´s Heli Tutorial Spiele- und Multimedia-Programmierung 28
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
ItundMathe1994 TicTacToe Spiel programmieren Spiele- und Multimedia-Programmierung 2
JEP1 Hilfe bei Spiel Spiele- und Multimedia-Programmierung 1
P Pokemon Spiel Funktioniert nicht ? Spiele- und Multimedia-Programmierung 3
Leon.tr3x Mein erstes Programm/Spiel Spiele- und Multimedia-Programmierung 10
O Texas Hold'em Poker als Online-Spiel mit Freunden Spiele- und Multimedia-Programmierung 5
Drachenbauer Speicher-Tool für ein Spiel schreiben Spiele- und Multimedia-Programmierung 13
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
Excess Spiel abzugeben Spiele- und Multimedia-Programmierung 1
I Superhelden - Spiel Spiele- und Multimedia-Programmierung 14
E Hauptmenü und Spiel ???? Spiele- und Multimedia-Programmierung 2
L Sound in Java Spiel Spiele- und Multimedia-Programmierung 5
R Interaktives Spiel Spiele- und Multimedia-Programmierung 5
L Spiel im Editor testen Spiele- und Multimedia-Programmierung 4
Jackii dispatchUncaughtException in Quiz Spiel mit GUI Layout Spiele- und Multimedia-Programmierung 6
D Textbasiertes Spiel Spiele- und Multimedia-Programmierung 8
K Android Spiel Programmieren Spiele- und Multimedia-Programmierung 6
L BrickBreaker Spiel Spiele- und Multimedia-Programmierung 3
A Spiel Figur ansprechen und bewegen Spiele- und Multimedia-Programmierung 3
it_is_all Dialogbox im Spiel - Text in Blöcke aufteilen Spiele- und Multimedia-Programmierung 4
F Koordinieren und Essen von Snake - Spiel Spiele- und Multimedia-Programmierung 14
G Entity Verwaltung in einem 2D Spiel Spiele- und Multimedia-Programmierung 1
E Möchte Spiel Programmieren Spiele- und Multimedia-Programmierung 7
S Connect6 Spiel - Code in ei Spiele- und Multimedia-Programmierung 2
A Spiel nach Abfrage beenden oder neustarten Spiele- und Multimedia-Programmierung 1
G Welten Generierung 2D Spiel Spiele- und Multimedia-Programmierung 4
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
L Coordinate Space JavaFX 2d Spiel Spiele- und Multimedia-Programmierung 0
C Vier Gewinnt Spiel Programmiertipp Spiele- und Multimedia-Programmierung 11
N Jump and run Spiel - wo anfangen / weitermachen? Spiele- und Multimedia-Programmierung 11
K Spiel zum zuordnen von Dienstgraden und Dienstgradabzeichen Spiele- und Multimedia-Programmierung 5
M Textbasiertes Spiel programmieren Spiele- und Multimedia-Programmierung 4
T 2d-Spiel Licht Spiele- und Multimedia-Programmierung 5
S Jump 'n' Run-Spiel Kollisionserkennung Spiele- und Multimedia-Programmierung 3
T Spiel rendern Spiele- und Multimedia-Programmierung 2
Grevak Sounds im Spiel Spiele- und Multimedia-Programmierung 5
B Fehlerhafte Mob Bewegungen in Tower Defense Spiel Spiele- und Multimedia-Programmierung 2
F Spiel ähnlich wie SimCity/o.ä programmieren Spiele- und Multimedia-Programmierung 5
X Erklärung zu einem Tic Tac Toe Spiel Spiele- und Multimedia-Programmierung 1
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Kollisions abfrage bei 3D spiel? Spiele- und Multimedia-Programmierung 12
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
P [Spiel]Welche Bilder sind gleich Spiele- und Multimedia-Programmierung 2
E GUI zum Spiel hinzufügen Spiele- und Multimedia-Programmierung 19
S 2D Spiel - Physics Spiele- und Multimedia-Programmierung 16
S 2D Spiel "Der Sprung" Spiele- und Multimedia-Programmierung 7
A 2D Spiel ohne Tiles Spiele- und Multimedia-Programmierung 10
V welche vorgehensweise beforzieht ihr bei einfachem Quizz Spiel ? Spiele- und Multimedia-Programmierung 4
G Methode sleepen während das Spiel weiterläuft Spiele- und Multimedia-Programmierung 3
T Spiel Überprüfung Spiele- und Multimedia-Programmierung 3
P Spiel laggt nach unbestimmter Zeit tierisch. Spiele- und Multimedia-Programmierung 27
S Hilfe bei Spiel Spiele- und Multimedia-Programmierung 6
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
W Spiel ist langsam/laggt Spiele- und Multimedia-Programmierung 18
J Ascii Spiel Spiele- und Multimedia-Programmierung 1
Androbin Mein Spiel will sich nicht zeichnen lassen !!! Spiele- und Multimedia-Programmierung 7
O Vollständige Musik in Spiel einbauen (wav - Format) Spiele- und Multimedia-Programmierung 8
Y Quiz Spiel Spiele- und Multimedia-Programmierung 1
J Conways Spiel des Lebens nachprogrammiert Spiele- und Multimedia-Programmierung 1
B Spiel Programmieren, die Anfänge Spiele- und Multimedia-Programmierung 6
D [OpenGL] Spiel in der Art von Age of Empires Spiele- und Multimedia-Programmierung 4
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
S Spiel installeren lassen und organisieren Spiele- und Multimedia-Programmierung 3
J Lichtupdate in tile-basiertem Spiel Spiele- und Multimedia-Programmierung 4
P Erstes Spiel (Strategie) Spiele- und Multimedia-Programmierung 31
J Mein erstes Spiel [Spielevorstellung] Spiele- und Multimedia-Programmierung 2
Bananabert Spiel Renderer Images und Strings Spiele- und Multimedia-Programmierung 4
N Spiel Menü error ! Spiele- und Multimedia-Programmierung 5
S Anfangsmenü mit Spiel verknüpfen Spiele- und Multimedia-Programmierung 16
S Spiel ruckelt trotz 50 fps Spiele- und Multimedia-Programmierung 16
D Spiel-Bilddaten auswerten Spiele- und Multimedia-Programmierung 7
Creylon [LWJGL] Spiel Exportieren Spiele- und Multimedia-Programmierung 2
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
Devil0s Spiel laggt trotz 90 FPS (bei der Anzeige) Spiele- und Multimedia-Programmierung 9
N Webanwendung als eine Art Spiel Spiele- und Multimedia-Programmierung 8
L Korrekte Darstellung von Wasser in 2D Spiel Spiele- und Multimedia-Programmierung 4
F Ideen für spiel Spiele- und Multimedia-Programmierung 4
J wohin mit der Logik des Spiel Spiele- und Multimedia-Programmierung 2
R Experimente mit Quaxlis Spiel Spiele- und Multimedia-Programmierung 12
W Spiel-Grundlagen selbst austüfteln: Kollisionen? Spiele- und Multimedia-Programmierung 3
Kenan89 Java 2D Spiel Spiele- und Multimedia-Programmierung 39
M Automaten Spiel Spiele- und Multimedia-Programmierung 27
J Tic tac toe spiel Neustart Spiele- und Multimedia-Programmierung 5
S 2D Spiel im Vollbild langsamer als im Fenster Spiele- und Multimedia-Programmierung 11
A TicTacToe Spiel Spiele- und Multimedia-Programmierung 3
S Verbesserungvorschläge Spiel Z Spiele- und Multimedia-Programmierung 31
S Spiel abbrechen Spiele- und Multimedia-Programmierung 3
J Greenfoot "Little Crab" Spiel Erweiterungen Spiele- und Multimedia-Programmierung 6
P Spiel HUD erstellen Spiele- und Multimedia-Programmierung 6
E Spiel neustarten Spiele- und Multimedia-Programmierung 4
S Aufbau von Klassen für Spiel Spiele- und Multimedia-Programmierung 13
A Grundlagensuche für Spiel Spiele- und Multimedia-Programmierung 8
V Basisprinzipien Breakout-Spiel Spiele- und Multimedia-Programmierung 8

Ähnliche Java Themen

Neue Themen


Oben