Hallo, folgendes Jump & Rund Problem: ... meine spielfigur rennt gegen einen Gegner. dabei wird folgende Methode aufgerufen
Die Zeitabfrage ist dazu da, dann unsere Spielfigur "fred" nicht 100 mal nacheinander getroffen wird, während der Gegner nur an ihm vorbei läuft. Er ist also für 3 sec unverwundbar, wenn es ein und derselbe Gegner ist. Das ganze ist aber noch nicht so optimal, denn ich habe 2 Möglichkeiten diesen gegner zu treffen. Die eine ist: meine spielfigur steht und der gegner braucht 3 sec um aus dem blickfeld von "fred" raus zu sein. wenn "fred" allerdings gleichzeitig rennt braucht er nur 1 sec um rauszusein... kann mir jemand ne elegantere Lösung vorschlagen?
*EDIT* ist es vielleicht möglich vorher abzufragen, wie lange die letzte Kollision her ist? Also bevor die Methode aufgerufen wird? Das tut sie übrigens hier:
Gruß und Danke, Soleil
Code:
private static long t()
{return System.currentTimeMillis();}
private long letzteKollision;
public boolean kollidiertMitGegner(PositionierbaresElement derAndere)
{
if(t()-letzteKollision<3000)return false; // Kollision für 2400 msekunden aussetzen lassen
boolean kollision=getXPos()+20 >= derAndere.getXPos()
&& getXPos()-20 <= derAndere.getXPos()
&& getYPos()+20 >= derAndere.getYPos()
&& getYPos()-20 <= derAndere.getYPos();
if(kollision)letzteKollision=t();
return kollision;
}
Die Zeitabfrage ist dazu da, dann unsere Spielfigur "fred" nicht 100 mal nacheinander getroffen wird, während der Gegner nur an ihm vorbei läuft. Er ist also für 3 sec unverwundbar, wenn es ein und derselbe Gegner ist. Das ganze ist aber noch nicht so optimal, denn ich habe 2 Möglichkeiten diesen gegner zu treffen. Die eine ist: meine spielfigur steht und der gegner braucht 3 sec um aus dem blickfeld von "fred" raus zu sein. wenn "fred" allerdings gleichzeitig rennt braucht er nur 1 sec um rauszusein... kann mir jemand ne elegantere Lösung vorschlagen?
*EDIT* ist es vielleicht möglich vorher abzufragen, wie lange die letzte Kollision her ist? Also bevor die Methode aufgerufen wird? Das tut sie übrigens hier:
Code:
if( elemente.get(k) instanceof Gegner )
{
if(((Gegner)elemente.get(k)).istTot()== false)
((Gegner)elemente.get(k)).autoMove(this);
if(((Gegner)elemente.get(k)).kollidiertMitGegner(fred))
derZaehler.trifftGegner();
Gruß und Danke, Soleil