# Spiel Figur ansprechen und bewegen



## Alexander_Dubin (19. Nov 2017)

Hallo 
Ich programmiere grade eine kleine Mensch ärger dich nicht Anwendung mit Java und JOGL. Ich habe da jedoch ein Problem. Ich kann die Spielfiguren nicht ansprechen.
Also erstmal ist da noch nichts.
Ich habe eine Klasse Spielfiguren in der die Spielfiguren erzeugt werden.


```
public void zeichneFiguren( GL gl, GLU glu, float x, float z, GLAutoDrawable drawable) {


        GL2 gl2 = drawable.getGL().getGL2();
        gl2.glPushMatrix();

        gl2.glTranslated(x, 0, z);
        GLUquadric qobj = glu.gluNewQuadric();
        gl2.glColor3f(1f, 1f, 1f);
        glu.gluQuadricDrawStyle(qobj, GLU.GLU_FILL);
        glu.gluQuadricNormals(qobj, GLU.GLU_SMOOTH);
        glu.gluSphere(qobj, 0.25f, 30, 10);

        gl2.glRotated(90, 1, 0, 0);
        glu.gluQuadricDrawStyle(qobj, GLU.GLU_FILL);
        glu.gluQuadricNormals(qobj, GLU.GLU_FLAT);
        glu.gluCylinder(qobj, 0.0, 0.3, 1, 30, 10);

        gl2.glTranslated(0, 0, 1.0f);
        glu.gluQuadricDrawStyle(qobj, GLU.GLU_FILL);
        glu.gluQuadricNormals(qobj, GLU.GLU_SMOOTH);
        glu.gluCylinder(qobj, 0.3, 0.30, 0.1, 10, 5);


        gl2.glPopMatrix();
        InteractionHandler inter = new InteractionHandler();

        gl2.glTranslatef(25f, 0f, 0f);

    }
```

Dann wird dieser in der Mainmethode ausgefürt mit diesem Codeblock.


```
gl.glBegin(GL.GL_TRIANGLE_FAN);
        //gl.glColor3f(1f, 1f, 1f);

        fig.zeichneFiguren(gl, glu, 2, 0, drawable);

        gl.glPushMatrix();

        gl.glPopMatrix();
        gl.glEnd();

        gl.glFlush();
```

Die Frage ist was mache ich falsch und was muss ich tun um die einzelne Figur anszusprechen, zu verschieben um daraus dann eine Aniamtion zu machen.

Würde mich über hilfe riesig freuen. Danke schonmal im vorraus


----------



## JuKu (2. Dez 2017)

Ich glaube du hast ein etwas falsches Verständis von Grafikprogrammierung.
Grafikprogrammierung (OpenGL) bedeutet, dass du mit OpenGL *nur* das Zeichnen übernimmst.
Du übergibst der Grafikkarte die benötigten Daten (Vektoren und Farbe / Texturen usw.) und die Grafikkarte färbt die Pixel entsprechend ein.

Jetzt gibt es 2 Möglichkeiten, was du meinen könntest:
1. Du willst das Objekt an einer anderen Stelle zeichnen. Dann setze einfach andere Koordinaten.
Mit JOGL kenne ich mich nicht so aus, aber theoretisch gibt es ja eine Methode glTransformf() oder du nimmst glTranslatef(), falls die auch geht. Ich dachte aber, das letztere eher zur Skalierung gedacht ist.

2. Du willst das Objekt als VAO / VBO auf der Grafikkarte "speichern" und einfach verschieben.
Über die VBO ID kannst du ziemlich einfach die Positionen / Daten verändern.

EDIT:
Ich glaube du willst gar nicht die Figur verschieben, sondern lediglich die Texture Koordinaten, oder?
Quasi willst du nur einen Ausschnitt (Texture Region) aus einer Texture zeichnen, der den aktuellen Frame für die Animation enthält.

Ich habe das auch schon mal mit LWJGL gemacht (die OpenGL Befehle sind aber theoretisch die selben wie bei JOGL). Hier mal der Code:
https://github.com/JuKu/rpg-2dgame-...aphic/opengl/image/OpenGL2DTextureRegion.java


----------



## Alexander_Dubin (10. Dez 2017)

Hallo, danke für die Hilfe. das hat mir definitv weitergeholfen  danke sehr


----------



## JuKu (10. Dez 2017)

@Alexander_Dubin Kein Problem!
Das freut mich doch sehr!


----------

