# 1)JButtons zeichnen 2)Kolisionsabfrage von zwei Objekten



## Bohno (23. Jan 2009)

Hi,
also schonmal danke im Vorraus 

1)also zu meiner ersten Fragem es ist schon länger her, dass ich mit Buttosn gearbetie habe, aber ich habe eine Klasse mit der ich verschiedene Images zeichnen in dieser Klasse möchte ich nun Buttons zeichnen. Mein problem ist, dass ich sie nicht versetzen kann (sind immer oben links) und das sie nicht auf klick reagieren.


```
public void buttons(Graphics g)
	{
		 b_nameOk.setBackground(Color.black);
		 b_nameOk.setSize(100,50);
		 b_nameOk.setLocation(450,600);
		 b_nameOk.addActionListener(this);
		 g.setColor(Color.cyan);
	 	 b_nameOk.paint(g);
	}
```

2)zu meiner zwieten Frage: ich habe ein Spielfeld auf dem sich Objekte bewegen. Diese bewegen sich ncith in einem raster sollen sie auch nicht  ich habe jetzt eine Kolisionsabfrage geschrieben, bei der Java manchmal zu spät merkt da das objekt da nicht hingehen kann. Habt ihr einen vorschlag:


```
public boolean kolosion(ArrayList<Point[]> p, int richtung)
	{
		if(z_erreicht==false)
		switch(richtung)
		{
		case 1:
			for(int i=0;i<p.size();i++)
				if(p.get(i)[2].x-(int)x_pos<0&&p.get(i)[3].x-(int)x_pos>0&&p.get(i)[0].y<(int)y_pos&&(int)y_pos<p.get(i)[2].y)
					if(p.get(i)[2].x<(int)x_pos&&(int)x_pos<p.get(i)[3].x)
						return false;
				else if(p.get(i)[2].x-(int)x_pos>0&&p.get(i)[2].x-(((int)x_pos)+image.getWidth(this))<0&&p.get(i)[0].y<(int)y_pos&&(int)y_pos<p.get(i)[2].y)
					if(p.get(i)[2].x<((int)x_pos+image.getWidth(this))&&((int)x_pos+image.getWidth(this))<p.get(i)[3].x)
						return false;
			break;
		case 2:
```

mit der ArrayListe werden die vier eckpuntke aller Objekte übergene, richtung ist der wert wo sich das objekt hinbewegen will.

ich bedanke mich schon mal :toll: 

MfG
Bohno


----------



## Fu3L (23. Jan 2009)

Zu 2): Gewöhn dir schleunigst an auf diesen Unfug mit dem Klammerweglassen zu verzichten (ich weiß gar nciht, warums die Möglichkeit von der Sprache aus überhaupt gibt):


```
if(p.get(i)[2].x-(int)x_pos<0&&p.get(i)[3].x-(int)x_pos>0&&p.get(i)[0].y<(int)y_pos&&(int)y_pos<p.get(i)[2].y)
               if(p.get(i)[2].x<(int)x_pos&&(int)x_pos<p.get(i)[3].x)
                  return false;
            else if(p.get(i)[2].x-(int)x_pos>0&&p.get(i)[2].x-(((int)x_pos)+image.getWidth(this))<0&&p.get(i)[0].y<(int)y_pos&&(int)y_pos<p.get(i)[2].y)
```

So wie du das "else if" eingerückt hast, wirds wahrscheinlich nicht ausgeführt. Woher soll der Compiler auch wissen, dass das "else if" nicht zum if darüber, sondern zum umgebenden if gehören soll?


----------



## Bohno (23. Jan 2009)

jap thx der fehler war , dass das "else if" manchmal zu dem einen "if"und dann wieder zum anderne "if" gezogen wurde
thx schonmal bleibt nur noch das ander  porb


----------



## Quaxli (23. Jan 2009)

Die Lösung für das andere Problem


----------



## Bohno (23. Jan 2009)

hey danke für deine schnelle antwort. Ich habe mir das eben angeguckt aber habe eine Frage kann ich da meien Buttons auch pixel genau zeichnen

ich denke, dass ich schwierigkeiten bekommen würde wenn ich das an einem raster ausrichter muss.

es wäre gut wenn ich die buttons nach pixel zeichnen könnten, denn dann könnte ich sie ja auch in einen negativen bereich zeichnen, da ich bei mir auf der map scrollen kann.

hoffe ihr habt mich verstanden


----------



## Fu3L (23. Jan 2009)

Du könntest natürlich das null-layout verwenden:


```
setLayout(null);

JButton btn = new JButton("Test");
btn.setBounds(50, 50, 100, 50);
add(btn);
```

Das wäre jezz ein Button, der in irgendeiner Klasse, in die man Buttons einbauen kann, an der Position 50, 50 sitzt und 100x50 px groß ist (allerdings weiß ich nicht, ob man die dann auch in den negativen Bereich packen kann)...

Bei ner Karte für ein Spiel oder ähnliches wären vllt auch andere Lösungen besser, aber genau sagen kann man das nicht, ohne mehr zu wissen. Kannst dir ja vllt mal Quaxlis Tutorial für 2D-Spiele durchlesen (hier im Board in der Tut-Sammlung).

Edit: Ich seh grad: Is ja auch in seiner Signatur verlinkt^^


----------



## Bohno (24. Jan 2009)

hey in dem tutorial habe ich leider nichts über Buttons gefunden.
also ich habe das mit dem layout(null) ausprobiert er zeichnet es aber ledier imemrnoch oben links hin.


```
public Display(int width,int heigth)
	{
		this.width=width;
		this.height=heigth;	
	    footer =Toolkit.getDefaultToolkit().getImage("image/feste_icons/footer.gif");
	    header =Toolkit.getDefaultToolkit().getImage("image/feste_icons/header.gif");
	    mini_karte =Toolkit.getDefaultToolkit().getImage("image/minikarte.jpg");
	    streck_faktor_x=2430/179;
	    streck_faktor_y=2385/178;
	    
            this.setLayout(null);
            btn.setBounds(200, 200, 100, 50);
	    this.add(btn);
	}
```

zeichen methode

```
public void buttons(Graphics g)
	{
		btn.paint(g);
	}
```

übersehe ich irgendwas

?


----------



## Fu3L (24. Jan 2009)

Ich versteh nich, warum du für die Buttons nochmal paint(g) aufrufst? Wenn du schreibst: irgendeinPanel.add(btn); dann wird der Button automatisch auf das Panel gezeichnet...

Und es stimmt: Das Tutorial beschäftigt sich mit Spielen, ohne Buttons, Labels und co zu benutzen, weil Labels und Buttons sind meist fehl am Platze in Games (kommt aber drauf an, was man machen will).


----------



## Quaxli (26. Jan 2009)

Bohno hat gesagt.:
			
		

> hey in dem tutorial habe ich leider nichts über Buttons gefunden...



Na, hoffentlich. Ich müßte mir schwere Gedanken machen, wenn da auf einmal was über Buttons drin stehen würde. 

Worauf Fu3l die hinweisen wollte: Offensichtlich willst Du eine Art Spiel realisieren und das mit JButtons realisieren?
Kurz gesagt: Man realisiert so etwas nicht mit Swing-Komponenten. Punkt.
Lies Dir mein Tutorial oder ein beliebiges anderes zum Thema Spieleprogrammierung durch. Du wirst dort nur sehr wenig Swing-Komponenten finden. Zum einen schleppst Du viel zu viel Overhead mit Dir rum, zum anderen wirst Du später noch mehr Probleme kriegen, wenn Du erweiterte Logik einbauen willst.

<offtopic>
  1000. Beitrag!!!!!! Ich bin 4-stellig 
</offtopic>


----------



## Bohno (26. Jan 2009)

Hey danke für eure antworten.

ich denke schon das buttons benutz werden um im spiel ein menu zu öffnen etc oder wie würdest du ads realiserein. guck auf was für ein objekt die maus ist. würde ach gehen, aber ich denke das ist umständlich als eien button dafür zu benutzen oder 

ich lasse mich gerne belehren

und danke nochmal


----------

