tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1820
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Morpheyz Morpheyz ist offline Mitglied
    Registriert seit
    Aug 2008
    Ort
    Solingen
    Beiträge
    14
    Hi,

    wir müssen nun in der Schule ein kleines Java-"Spiel" entwickeln und natürlich auch alles dazu erklären können. Unsere Gruppe entschied sich für eine Art Tower-Defesne mit nur einem Turm. =D
    Der Turm befindet sich in der Mitte des Fensters, dreht sich immer in Richtung des Mauszeigers und schießt auch in diese. Die Formel zum drehen haben wir schon und zum Bewegen der Schüsse auch soweit. Unser Problem ist nun, das ganze in Java umzusetzen. Die Formel ist dabei ja noch einfach. Allerdings wirds beim drehen des Objekts schon schwierig.
    Soweit ich festgestellt habe, ist die Formel zum bewegen sowieso noch nicht ganz ausgereift. Wobei ich allerdings nicht weiß, ob es an Java oder der Formel liegt.

    Zum Drehen benutzen wir in etwa diese:
    Code :
    1
    2
    3
    4
    5
    
    int a = jLabel1.getX() - mousePos.x;
    int b = jLabel1.getY() - mousePos.y;
     
    double ang = Math.atan2(a,b);
    double dir = ang/(Math.PI/180);      //Ich weiß nicht, ob das noch nötig ist. =O

    Debug messages helfen mir leider auch nicht wieter, da diese mir zum Teil völlig (für mich) unlogische Ergebnisse angeben.

    Zum Bewegen diese Formel:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    int speed = 10;
     
    int x_speed = Math.cos(ang) * speed;
    int y_speed = Math.sin(ang) * speed;
     
    int x_pos = jLabel1.getX();
    int y_pos = jLabel1.getY();
     
    jLabel1.setLocation(x_pos + x_speed , y_pos + y_speed);

    Ich denke das ist so richtig. Die original-formel hab ich nur in der Schule. >.<

    Wenn ich das Objekt nun bewege, kommen komische Winkel raus und das Objekt bewegt sich jedenfalls nicht dahin, wo es hin soll.

    Und noch eine Frage:
    Wie kann man eine Canvas in Java drehen?



    Danke schonmal im Vorraus
    Morpheyz
     

  2. #2
    Germanterminaotr Germanterminaotr ist offline Mitglied Silber
    Registriert seit
    Aug 2004
    Beiträge
    82
    Du musst nicht die Canvas an sich drehen, du musst nur das Bild in der Canvas drehen.
    Die Klasse Graphics2D hat auch ein paar methoden die euch sicher weiterbringen werden.(Drehen mit einem fixpunkt)

    Bei dem obrigen Code fällt mir auf dass:
    int x_speed = Math.cos(ang) * speed;
    int y_speed = Math.sin(ang) * speed;

    du vergessen hast den Winkel der warscheinlich in GRAD ist, in RAD umzurechnen. Dazu gibt es auch wiederrum eine statische Methode in der Klasse Math ( .todegree() | .toradian() )

    mfg
    germanterminator
     

  3. #3
    Morpheyz Morpheyz ist offline Mitglied
    Registriert seit
    Aug 2008
    Ort
    Solingen
    Beiträge
    14
    Hmm..
    So ganz verstanden hab ich das jetzt nicht. Ich kenn zwar den Unterschied zwischen rad und grad, aber ich wieß nich, was ich jetzt rechnen soll? o.O

    Hier ist mal der ganze Code der Bewegungsfunktion. Auskommentiertes, unwichtiges Zeug rausgenommen:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    public void move() {
                Point mousePos = MouseInfo.getPointerInfo().getLocation();
               
                int a = jLabel1.getX() - mousePos.x;
                int b = jLabel1.getY() - mousePos.y;
     
                double ang = Math.atan2(a,b);
     
                double x_Move = Math.cos(ang) * speed;
                double y_Move = Math.sin(ang) * speed;
     
                int i_x_Move = double2int(x_Move);
                int i_y_Move = double2int(y_Move);
     
                jLabel1.setLocation(jLabel1.getX()+i_x_Move,jLabel1.getY()+i_y_Move);
    }

    "final double speed" wird global mit dem Wert 10 deklariert.

    Tja das Problem besteht nun darin, dass sich das jLabel nicht in Richtung des Mauszeigers bewegt. o.O
     

  4. #4
    DeKugelschieber Tutorials.de Gastzugang
    Das mit der Richtung zwischen Maus und Turm (bei mir war es nur kein Turm) habe ich mit einem Vektor gelöst:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
     
    // Der Vektor ist (Maus X - Turm X, Maus Y - Turm Y)
     
    // Formel: 
    // 1/wurzel(x²+y²)*x 
    // und 
    // 1/wurzel(x²+y²)*y
     
    speedX = 1/Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))*(x1-x2);
    speedY = 1/Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))*(y1-y2);

    MfG Marvin
     

Ähnliche Themen

  1. Linien drehen und Winkel anzeigen
    Von Delvar im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 08.06.09, 21:11
  2. Angestoßenes Objekt in Winkel bewegen.
    Von Kai008 im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 4
    Letzter Beitrag: 02.03.09, 12:55
  3. Xpresso Winkel falsche Richtung; negative Werte
    Von devils advocate im Forum Cinema 4D
    Antworten: 2
    Letzter Beitrag: 08.01.09, 14:16
  4. Antworten: 2
    Letzter Beitrag: 21.07.04, 22:42
  5. Objekt richtung Maus drehen
    Von KR@SSonkel im Forum Flash Plattform
    Antworten: 9
    Letzter Beitrag: 05.04.04, 17:56