Zum Inhalt springen

Objekt bewegen


Natascha

Empfohlene Beiträge

Hallo erstmal,

leider reicht mein Wissen bei folgendem Problem nicht aus.

Ich möchte einen Fisch von links oben nach rechts oben dann nach unten und danach nach unten links schwimmen lassen.

Ich komme soweit, dass er bis nach rechts unten schwimmt, und dann stehen bleibt.

Es sieht so bei mir aus:


import acm.graphics.*;      import acm.program.*;

import acm.util.*;     

===============================================    

public class Animation {

    // Objekte:

    GImage  hintenA, hintenB;

    GCanvas canvas;

    Fisch f1,f2;

    public Animation () {

        hintenA = new GImage("aquarium.jpg");

        canvas = Fenster.getCanvas();

        canvas.add(hintenA);

        f1 = new Fisch(0,0);

        f2 = new Fisch(450,250);

        //f1.drehL();

        //f1.pause(500);

        for (int loop=0;loop<4;loop++) {

            f1.setPause(0);


            for (int i=0;i<50;i++) {

                f1.move();          f2.move();

            }

            f1.drehL(); //Richtung nach unten ändern

            //f2.drehR();


        for (int loop1=0;loop<2;loop++) { 

            f1.move();


            f1.drehL();




}

        for (int loop2=0;loop<-50;loop++) { 

            f1.move();


            f1.drehL();


=====================================================

import acm.graphics.*;      import acm.program.*;

import acm.util.*;   

======================================================        

public class Fisch {         

    //  Hier Datentyp und Name fuer Zustandsvariablen und "Bestandteile"

    GImage  zBild;              // Aussehen des Fisches

    boolean zSchautR;           // true (wahr) oder false (falsch)

    int     z_ms;               // Pausendauer in ms


    // Konstruktor Maus() erzeugt Maeuse:

    public Fisch (double pX, double pY) {     // p wie Parameter = Input     

        zBild =     new GImage("fisch2.gif");

        zSchautR =  true;

        z_ms =      10;

        Fenster.setze(zBild, pX,pY);

    }


    public void drehL() {                   // Methode mit void = kein Output

        zBild.setImage("fisch2.gif");

        zSchautR = false;

        zBild.pause(z_ms);

    }


    public void drehR() {

        zBild.setImage("fisch2.gif");

        zSchautR = true;

        zBild.pause(z_ms);

    }


    public void setPause(int p_ms) {        // Wartezeit in ms

        z_ms = p_ms;

    }




    public void move() {                    // springt um 8 Pixel

        if (zSchautR)   zBild.move(18,0);  oder 0 gerade

        else            zBild.move(0,10);       

        zBild.pause(z_ms);


}

       public void move1() {                    

        if (zSchautR)   zBild.move(0,10); 

        else            zBild.move(20,1);       

        //zBild.pause(z_ms);


} 

}

Danke im Voraus

Bearbeitet von flashpixx
Code-Tags
Link zu diesem Kommentar
Auf anderen Seiten teilen

und was willst du von uns wissen?

was genau ist dein Problem?

weißt du nicht, wie du weiter vorgehen sollst?

oder bist du gerade zu faul und willst, dass wir es machen?

da ich gerade nich in meiner Wohnung bin, kan ich keinen Blick auf meine Glaskugel werfen...

benutze für Code bitte auch die Code-Tags - dafür sind sie da ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

mit den Code-Tags habe ich nicht gewußt, ich bin zum erstenmal in einem Forum, Entschuldigung.

Ich habe alles mögliche probiert, aber ich bekomme ihn nicht nach unten links.

Wie müste ich die Schleife ändern das er zurück schwimmt.

wie gesagt rechts und nach unten bekomme ich hin.

Ich hoffe ich habe es jetzt einigermassen verständlich formuliert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deine Fische bewegen sich immer nur in einer Dimension. Ausgehend von einem Koordinatensystem (dein Bildschirm bzw. deine Canvas ist nichts anderes) ergeben sich die Möglichkeiten: Bewegung horizontal (y - Achse ändert sich nicht, x - Wert wird größer bzw. kleiner, je nachdem in welche Richtung sich der Fisch bewegt); Bewegung vertikal funktioniert entsprechend.

In deiner Schleife rufst du die Bewegung auf und verschiebst die Position immer ein Stück weiter. Wenn du andere Richtungen haben willst, musst du den Schritt anpassen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du läuft im Moment z.B. von in der X-Koordinate von 0 bis n, d.h. bei jedem Schlaufedurchlauf wird die Variable um 1 größer.

Um das ganze "rückwärts" zu machen läufst Du von n bis 0 oder oder eben auch wieder von 0 bis n wobei Du aber dann aber die Position berechnen musst, nämlich n-x (wenn n = 5 und x = 0,1,2,3 ist, dann wäre das dann 5,4,3,2).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstmal danke:)

Heißt das, dass ich eine neue Schleife erzeugen muss?? ;) und diese dann rückwärts laufen lassen???

Bin völlig verwirrt :) Ich habe alle Koordinaten in der vorhandenen Schleife ausprobiert :) er schwimmt schrägt, von oben nach unten usw. nur nicht von rechts unten nach links unten :)

Ich bin sehr dankbar für die Antworten, aber ich kann sie nicht umsätzen :)

danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Y-Koordinate bewegt ein Objekt in de Y-Achse (oben-unten), die X-Koordinate eben in der X-Achse (links-rechts). Je nachdem wo Dein Nullpunkt liegt (0/0) liegt eben rechts-links oder links-rechts bzw unten-oben oder oben-unten, wenn der Wert der Koordinate größer wird. Wenn Du von (0/0) nach (1/1), (2/2) gehst, dann wird das eben eine Diagonale.

Ich gebe keine Lösung für das Problem, Du musst schon mal selbst darüber nachdenken wie man das umsetzt. Versuch doch zuerst einmal nur eine Bewegung korrekt und richtig hinzu bekommen, also entweder oben-unten oder links-rechts. Wie müssen sich die Koordinaten für eine gerade Bewegung ändern. Du wirst mit ausprobieren nicht weit kommen, Du musst dir überlegen, wie sich Deine Koordinaten von Schritt zu Schritt verändern müssen, um eben die gewünschte Bewegung hin zu bekommen. Man kann das auch auf einem Stück Papier auf malen und sich überlegen

Link zu diesem Kommentar
Auf anderen Seiten teilen

und das mit den koordinaten habe ich verstanden, sonst wäre ich nicht soweit gekommen.

Und wo ist das Problem, wenn Du das Prinzip der Koordinaten verstanden hast? Die Gesamtbewegung setzt sich letztendlich aus Teilbewegungen zusammen, wenn das Objekt ein Rechteck folgen soll, dann ist das die Bewegung: links-rechts, oben-unten, rechts-links, unten-oben

Dafür braucht man ein paar Schleifen und etwas Rechenarbeit bezüglich der Koordinaten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstmal danke:)

Heißt das, dass ich eine neue Schleife erzeugen muss?? ;) und diese dann rückwärts laufen lassen???

Bin völlig verwirrt :) Ich habe alle Koordinaten in der vorhandenen Schleife ausprobiert :) er schwimmt schrägt, von oben nach unten usw. nur nicht von rechts unten nach links unten :)

Ich bin sehr dankbar für die Antworten, aber ich kann sie nicht umsätzen :)

danke

Wie sehen denn jetzt deine move-Methoden aus?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...