Forum
Tipps
News
Menu-Icon

Greenfoot

Hallo alle zusammen  :)

Ich hoffe jemand kann mir bei meinem Problem helfen??

Und zwar soll ich im Unterricht ein Programm mit Greenfoot programmieren .

Mein Problem liegt bei der Steuerung. Der "actor" soll per Tastatur gesteuert werden. Wenn man z.B. nach links drückt, soll der "actor" automatisch immer weiter nach links gehen. Man soll von da an nicht mehr die Möglichkeit haben die Richtung des "actors" zu ändern, bis diser das nächste Feld erreicht, ab da an soll man wieder die Möglichkeit haben die Richtung zu ändern.

Mein Ansatz war eigentlich, doch dies funktioniert nicht so richtig:
public class Crab
{
private boolean feldErReicht;
}
public Crab()
{
feldErReicht=true;
}
public void act()
{
if (Greenfoot.isKeyDown("left"))
       {
           feldErReicht=false;
           while(feldErReicht==false)
        {
            setLocation(getX()-1,getY());   
            feldErReicht();
        }
}
public void feldErReicht()
    {
        if(canSee(WAND.class))
        {
            feldErReicht=true;
        }
       
    }

Wenn man dann das Projekt startet, und nach links laufen will, läuft der "actor"
1. nicht automatisch,
2. stoppt das Programm, sobald er zur Hälfte das Feld, auf welchem er zu beginn steht verlässt.

Ich hab schon entwas länger draüber nachgedacht, wo der Fehler liegt, ein paar Ideen sind mir zwar eingefallen, aber dann hab ich sie gleich verworfen.

Hat vielleicht jemand eine Lösung für mein Problem.
Es kann auch ein ganz anderer Ansatz für die Steuerung des "ctors" sein.

Schon mal vielen Dank an alle, die sich die Mühe machen sich mit meinem Problem zu befassen =)

fary

ps.: bitte nicht auf Rechtschreibfehler achten ;D


Antworten zu Greenfoot:

ich kenn zwar "isKeyDown()" nicht, aber ich würd mal "while(isKeyDown())" statt if() probieren. 

 

Zitat
public class Crab
{
private boolean feldErReicht;
}
public Crab()
{
feldErReicht=true;
}
public void act()
{
if (Greenfoot.isKeyDown("left"))
       {
           feldErReicht=false;
           while(feldErReicht==false)
        {
            setLocation(getX()-1,getY());   
            feldErReicht();
        }
}
public void feldErReicht()
    {
        if(canSee(WAND.class))
        {
            feldErReicht=true;
        }
       
    }

Ich hab einen Fehler gefunden :D
Weiß aber nicht, ob dann ne Fehlermeldung kommen müsste.
Naja, du schließt die Klasse einfach nach der Variablen definition

was die Klammerung angeht ist da einiges seltsam, das hät ich jetzt erstmal auf nen cp/paste fehler geschoben, weil imho sollte das so nichtmal compilieren.
Abgesehen davon dass die klasse sofort geschloßen wird, wird if(Greenfoot.isKeyDown()) nie geschloßen. Da dürfte auch kein halbe schritt oder sonst was passieren, sondern sofort ein unexpected EOF geworfen werden oder noch mehr solche geschichten. 

/e: So hab mir mal die mühe gemacht mir das ding runterzuladen. Keine Haltepunkte möglich, wie nervig.

also
1. Das Ding compiliert wie erwartet so überhaupt nicht.
2. Crab ist ein Actor, Methoden wie getX() sind unbekannt wenn du nicht von Actor erbst.

public class Crab extends Actor
3. Die Klammerung ist Kraut und Rüben.
Nach Zeile 3 folgt keine Klammer,
Nach der } Klammer der While Schleife hingegen folgt eine Klammer.
4. WAND gibt es nicht?
5.Schritt nach links funktioniert einwandfrei. Hüpft zur Wand.
Zitat
public class Crab extends Actor
{
   private boolean feldErReicht;

    public Crab()
    {
        feldErReicht=true;
    }

    public void act()
    {
        if (Greenfoot.isKeyDown("left"))
        {
            feldErReicht=false;
            while(feldErReicht==false)
            {
                setLocation(getX()-1,getY());   
                feldErReicht();
            }
        }
    }
    public void feldErReicht()
    {
        if(getX() == 0)
        {
            feldErReicht = true;
        }
      /*  if(canSee(WAND.class))
        {
            feldErReicht=true;
        }   */
    }
}
« Letzte Änderung: 24.11.10, 11:35:42 von Klischeepunk »

« Windows XP: Notendurschnitt mittels 'schleifen' ermittelnC# Double Zahl auf 2 Nachkommastellen runden »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Internet-Zugriffsprogramm
Ein Internet-Zugriffsprogramm, auch Browser genannt, stellt Internetseiten für den Benutzer dar. Am bekanntesten ist der Microsoft Internet Explorer, gefolgt vom kos...

Programm
Siehe Software...

Systemsteuerung
Die Systemsteuerung ist ein Windowsprogramm, mit dem sich viele wichtige Einstellungen vornehmen lassen, man angeschlossene Geräte kontrollieren und Windows-Bestandt...