# Problem : Button-Klick bewirkt nichts



## baroque (31. Mai 2009)

Hi all, ich bin's schon wieder mit meinem RPG 

ich habe ein neues Problem gefunden : Es gibt einen Button fire, mit dem der Charakter anfangen soll einen Feuerball aufzuladen, und einen Button launch mit dem der Charakter den Feuerball schließlich wirft. Dieser soll stärker werden je länger der Charakter daran herumzaubert. Der Code dazu sieht (bis jetzt) etwa so aus :


```
Button ice = new Button ("Breeze");
	Button fire = new Button ("Fireball");
	Button launch = new Button ("Launch!");

[..]


	public void actionPerformed(ActionEvent e)
	{
		
		if (e.getSource() == addStr)
		{
			player.raiseStr();
		}

		else if (e.getSource() == addAgi)
		{
			player.raiseAgi();
		}

		else if (e.getSource() == addInt)
		{
			player.raiseInt();
		}

		else if (e.getSource() == addCon)
		{
			player.raiseCon();
		}

		else if((e.getSource() == attack) && (player.getDELAY() <= 0))
		{
			monster1.loseStuff(player.getAttack(), 0, 0);
		}	
		else if((e.getSource() == heal) && (player.getDELAY() <= 0))
		{
			player.loseStuff(-player.getHeal(), player.getLEVEL(), 0);
		}

		else if((e.getSource() == ice) && (player.getMP() >= player.getLEVEL()/2))
		{
			monster1.loseStuff(skill.useBreeze(player.getINT()), 0, 0);
			player.loseStuff(0, player.getLEVEL()/2, 0);
			monster1.freeze(skill.slow(player.getINT()));

			if(player.getINT() - 25 > 2 * player.getLEVEL())
			{
				monster1.hardFreeze(skill.greatSlow(player.getINT()));
			}
			
		}

		if((e.getSource() == fire) && (player.getMP() >= player.getLEVEL()) && (fireCharge = false))
		{
			player.loseStuff(0, player.getLEVEL(), 0);
			fireCharge = true;
		}

		if((e.getSource() == launch) && (fireCharge = true))
		{

		}

	
	}

[...]

	public void loseStuff(int h, int m, int s)
	{
		HP -= h;
		MP -= m;
		STAM -= s;
	}
```

Mein Problem : Der Fireball-Button macht genau gar nichts. Ich weiss dass ich da noch keine Methode eingebaut habe die den Feuerball wirft, aber zumindest über die loseStuff Methode sollte dem Spieler schon das Mana abgezogen werden - aber nichtmal das passiert. Der boolean fireCharge wird mit false initialisiert. Interessanterweise funktioniert der Spruch "Breeze" (habe ich zum Vergleich mal mit kopiert) völlig einwandfrei, und das obwohl die beiden so wie ich das sehe syntaktisch sehr ähnlich sind.. hat jemand dazu 'ne Idee? :bahnhof:


----------



## Marco13 (31. Mai 2009)

Wenn 

```
if (bedingung)
{
   machwas();
}
```
nicht funktioniert, empfiehlt sich entweder ein debugger-Durchlauf, oder eine Ausgabe

```
System.out.println("Hier sollte "+bedingung+" true sein");
if (bedingung)
{
   machwas();
}
```

Und dann "rückwärts laufen", wo der Fehler herkommt. Er könnte z.B. daher kommen, dass man irgendwo in einer if-Abfrage eine ZUWEISUNG macht, und sich dann wurder, warum die Variable danach "true" ist...

```
if((e.getSource() == launch) && (fireCharge = true))
```


----------



## baroque (31. Mai 2009)

Verdammt, die einfachsten Dinge übersieht man auch am leichtesten..rückwärts durchlaufen bin ich das bestimmt schon 25 Mal, aber auf sowas wär ich heute nicht mehr gekommen. Danke fürs aufzeigen!


----------



## eliot (3. Jun 2009)

boolean fireCharge;

if(fireCharge==false) ==> if(!fireCharge)

Boolean == Boolean vergleichen sieht irgendwie merkwürdig aus.
Ein einfaches if(bool) oder if(!bool) reicht.

regards
eliot


----------



## SlaterB (3. Jun 2009)

> && (fireCharge = true)
ist sogar falsch und nicht nur merkwürdig

&& (fireCharge == true)
ginge halbwegs, aber nicht gut

bei
&& (fireCharge = true)
wird dagegen der Variablen ein neuer Wert zugewiesen


----------

