Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Nicht-statische Methode in einer statischen aufrufen
nicht statische Methoden, also Instanzmethoden können nur ein einer Instanz aufgerufen - nicht verwunderlich ;-)
Irgendwo muss also ein Score Objekt existieren/erzeugt werden und man muss an der entsprechenden Stelle im Code Zugriff auf das Objekt haben.
Ja, leider lernen wir nicht so die Basis von Java, sondern sollen alles gleich anwenden.
Wusste bis grade z.B. nicht, dass nicht statische Methoden Instanzmethoden sind : /
Hab das jetzt zumindest compiliert bekommen, jedoch krieg ich ne NullPointerException wenn das ausgeführt werden soll
Public Gift ist der Konstruktor der Klasse Gift
Java:
public Score score;
public Gift()
{
this.score=score;
}
Dann später:
Java:
public void collision (){
....
score.scoreZaehlen();
...
}
Joa ist eig spannend. Aber leider lernt man die Grundlagen einfach nicht. Wir sind mittlerweile bei der 5. Übung und bis jetzt haben wir alles nur durch try&error gelernt. Da fehlen einfach die Grundlagen.
Es gibt bei
Java:
this.score= new Score();
zumindest keinen NullPointer aber dennoch passiert einfach nichts.
Hier mal meine scoreZaehlen Methode:
Java:
public int scoreZaehlen()
{
//if(Greenfoot.isKeyDown("t"))
//{
score = score + 1;
return score;
//}
}
Das // wird nicht ausgeführt. Die Methode funktioniert allerdings, wenn ich das // wegmach und im Spiel dann T drücke.. iwo muss es am Methodenaufruf hapern..
Ich bezweifel, dass die Methode ohne Kommentaren funktionieren wird. Da müsste dir ein Error fliegen, sofern sich Greenfoot an den original Syntax hält.
Müsste richtig arbeiten, falls collision funktioniert.
Füg einfach ein paar System.out.printlns oder einen entsprechenden pendant hinzu, um den Programmfluss im Auge zu behalten.
public int scoreZaehlen()
{
score = score + 1;
return score;
}
schreibe und diese Methode in der act()-Methode (die immer ausgeführt wird) abrufe, dann zählt er kontinuierlich hoch.
Mit der if-Bedingung halt nur wenn ich T Drücke.
Das einzige was ich mir vorstellen könnte wäre, dass ich die scoreZaehlen() Methode in der act() aufrufen muss, auch wenn ich die if-Bedingung nicht einfüge.
Dann bestünde aber das Problem, wie ich scoreZaehlen() nur Aufrufen lasse, wenn es aus der anderen Klasse gewünscht ist (und nicht immer).
Ja ich möchte, dass nur gezählt wird, wenn mein Held gegen das eine Instanz aus Gift.class läuft
Ich KANN folgendes machen:
Java:
public void act()
{
scoreZaehlen();
scoreAnzeigen();
}
public int scoreZaehlen()
{
if(Greenfoot.isKeyDown("t"))
{
score = score + 1;
return score;
}
}
Dann wird immer hochgezählt, wenn ich T drücke.
Wenn ich folgendes mache, dass addiert der IMMER.
Java:
public void act()
{
scoreZaehlen();
scoreAnzeigen();
}
public int scoreZaehlen()
{
score = score + 1;
return score;
}
Ich WILL sozusagen das:
Java:
public void act()
{
scoreAnzeigen();
}
public int scoreZaehlen()
{
score = score + 1;
return score;
}
Denn damit könnte ich theoretisch aus einer anderen Klasse heraus auf scoreZaehlen() zugreifen.
Das geht ja aber leider nicht
Deshalb dachte ich, dass das Problem daher rühren könnte, dass scoreZaehlen(); nicht mehr in der act()-Methode stehen würde. Das darf dort aber nicht stehen, da es wie gesagt IMMER aufgerufen würde.