Problem bei Switch Anweisung



  • Hallo zusammen,
    ich habe folgendes Problem.
    Ich möchte in einem GLUT-Menü zwischen fliegen und gehen durch einen 3dimensionalen Raum umschalten.
    Menü und so weiter funktioniert alles, methoden für fliegen und gehen auch, nur die switch anweisung nicht.
    wenn ich nun alles zusammenfügen will habe ich sowas:
    ...
    void menuCallback(int option) {
    switch (option) {
    case 1 : ;
    break;
    case 2 : ;
    break;
    }
    }

    void createGLUTMenus() {
    int menu;
    menu = glutCreateMenu(menuCallback);
    glutAddMenuEntry("Fly",1);
    glutAddMenuEntry("Walk",2);
    glutAttachMenu(GLUT_RIGHT_BUTTON);
    }

    ...
    wie sage ich nun meiner switch anweisung das sie in modus fliegen bzw gehen wechseln soll


  • Mod

    Wo genau ist dein Problem? Das sollte so gehen:

    void menuCallback(int option) {
    switch (option) 
     {
      case 1 :
       // In den Fliegen-Modus wechseln
       break;
      case 2 : 
       // In den Gehen-Modus wechseln
       break;
     }
    }
    


  • danke für die antwort.
    problem ist das er nicht wechselt. er bleibt stur beim gehen. so habe ich gehen und fliegen definiert

    void Fly ( int a_keys, int x, int y ) // Create Special Function (required for arrow keys)
    {
    switch ( a_keys ) {
    case GLUT_KEY_UP: // When Up Arrow Is Pressed...
    camera.move(0.1f);
    break;
    case GLUT_KEY_DOWN: // When Down Arrow Is Pressed...
    camera.move(-0.1f);
    break;
    case GLUT_KEY_LEFT: // When Left Arrow Is Pressed...
    camera.strafe(-0.1f);
    break;
    case GLUT_KEY_RIGHT: // When Right Arrow Is Pressed...
    camera.strafe(0.1f);
    break;
    default:
    break;
    }
    }

    void Walk ( int a_keys, int x, int y ) // Create Special Function (required for arrow keys)
    {
    switch ( a_keys ) {
    case GLUT_KEY_UP: // When Up Arrow Is Pressed...
    camera.moveOnFloor(0.1f);
    break;
    case GLUT_KEY_DOWN: // When Down Arrow Is Pressed...
    camera.moveOnFloor(-0.1f);
    break;
    case GLUT_KEY_LEFT: // When Left Arrow Is Pressed...
    camera.strafeOnFloor(-0.1f);
    break;
    case GLUT_KEY_RIGHT: // When Right Arrow Is Pressed...
    camera.strafeOnFloor(0.1f);
    break;
    default:
    break;
    }

    }


  • Mod

    Das ist ja schön für dich, aber wenn die switch Anweisung "nicht funktioniert", dann ist anzunehmen, dass das was du im switch machst, nicht funktioniert. Also: Was konkret machst du dort?



  • normalerweise habe ich in cases werte übergeben. nun will ich ja eine funktion übergeben. allerdings habe ich auch nach studieren von einigen tutorials nicht verstanden wie ich diese an die cases anbinde


  • Mod

    dickescaio schrieb:

    normalerweise habe ich in cases werte übergeben. nun will ich ja eine funktion übergeben. allerdings habe ich auch nach studieren von einigen tutorials nicht verstanden wie ich diese an die cases anbinde

    Du könntest Funktionszeiger benutzen:

    void (*bewegungsart)(int,int,int);
    
    // ...
    
    void menuCallback(int option) {
      switch (option) {
      case 1 : bewegungsart = Fly;
        break;
      case 2 : bewegungsart = Walk;
        break;
      }
    }
    

    Natürlich vorzugsweise nicht global, sondern als Rückgabewert, aber ich wollte das Beispiel übersichtlich halten.



  • wie müsste ich den bewegungsart dann definieren???



  • Als Funktionszeiger:

    typedef void (*BewergungsartFunc)(int,int,int);
    
    BewergungsartFunc bewegungsart = &Fly;
    
    bewegungsart();
    


  • jkljkl schrieb:

    Als Funktionszeiger:

    typedef void (*BewergungsartFunc)(int,int,int);
    
    BewergungsartFunc bewegungsart = &Fly;
    
    bewegungsart();
    

    Parameter fehlen, aber so vom Prinzip her.


Anmelden zum Antworten