Greenfoot/Java: Wie verhindere ich, dass sich die beiden Charaktere gegenseitig überlappen und wie füge ich eine Lebensanzeige hinzu?
Also ich arbeite in der Schule im Moment mit Greenfoot und programmiere eine Art Street Fighter. Ich habe bei den folgenden beiden Dingen Probleme:
Also erstens kriege ich es nicht hin, dass die beiden Charaktere sich gegenseitig nicht überlappen. Sie rennen also durcheinander durch.
Das zweite Problem ist Folgendes: Ich möchte eine Lifebar, also eine Lebensanzeige hinzufügen.
Ich bin noch nicht dabei, es zu animieren, sondern einfach dabei, dass das Programm stoppt, wenn der Spieler keine Leben mehr hat. Es funktioniert aber einfach nicht. Es stoppt einfach immer viel zu früh, sobald ich Kontakt zum anderen Spieler habe, aber noch nicht schlage.
Ich kann leider nicht den gesamten Code hier reinkopieren, da er die Maximallänge überschreitet. Wer mir so nicht weiterhelfen kann, sich aber nicht mit dem Thema auskennt, der kann mich privat anschreiben. Dann kann ich die ganze Datei rüberschicken.
Hier also nur der wahrscheinlich relevante Teil des Codes:
In fighter1:
public static boolean hit = false;
public void attack1() {
if (Greenfoot.isKeyDown("h") && !Greenfoot.isKeyDown("k") && !Greenfoot.isKeyDown("b")) {
setImage("FH.png");
hit = true;
}
else {
hit = false;
}
if (!Greenfoot.isKeyDown("h") && !Greenfoot.isKeyDown("k") && !Greenfoot.isKeyDown("b")) {
setImage("FN.png");
}
}
Fighter 2:
public void lifebar() {
if (Fighter1.hit = true && isTouching(Fighter1.class)) {
lifebar = lifebar - 50;
}
if (lifebar <= 0) {
Greenfoot.stop();
}
}
1 Antwort
Bei "Fighter1.hit=true" fehlt ein Gleichheitszeichen. Außerdem verwundert mich ein wenig, warum die Variable "hit" static ist und damit kein Attribut einer Instanz, aber das musst Du wohl wissen.
man muss also iwie das spamming, am besten in fighter 1 verhindern.
Du müsstest eine Variable etablieren, die verhindert, dass eben genau das passiert. Die sollte dann static sein und sobald der Spieler "h" drückt, bekommt die z.B. den Wert 60. Dann reduzierst Du den Wert dieser Variable mit jedem Frame in der Endlosschleife des Programms irgendwo und stellst sicher, dass Dein Lifebar-Code nicht ausgeführt wird, solange die Variable nicht den Wert 0 hat. Soweit wäre das Grundprinzip, ich kenn mich leider nicht mit Greenfoot aus.
es klappt jetzt vielen vielen dank!
ja das mit dem static hatte ich nur ganz kurz weil ich iwas glesen habe aber das stell ich wieder um
vielen dank ich werde gleich testen ob es klappt
an sich funktioniert es jetzt, vielen dank schonmal. ich habe aber das problem das ich sobald ich h gedrückt habe ja ganz oft sozusagen -50 mache weil der code ja sozusagen schnell durchlaufen wird. wie kann ich das austellen?