Frage zu Joystick mit SDL



  • Hallo
    ich habe mir eine kleine Funktion geschrieben
    die meinen Spieler bewegen soll, das Funktioniert auch nur nicht so wie ich will.
    Sobald ich den Joystick nach oben drücke oder sonst wohin bewegt er sich aber nur solange bis
    der Joystick am ende seiner Bewegungsfreiheit angekommen ist.
    Der Spieler sollte sich so Bewegen wie bei einem Tastendruck, dies tut er aber nicht.
    Hier der Code

    void CPlayer::ProcessMoving ()
    {
    SDL_Event event;
    int    xVel = 0;
    int    yVel = 0;
            while (SDL_PollEvent(&event))
            {
    
                // Kontrolliert ob es Nachrichten gibt
                switch (event.type)
                {
                    // Exit wenn das Fenster geschlossen ist
                case SDL_QUIT:
                    done = true;
                    break;
    
                    // Kontrolliert ob es einen Tastendruck gab
                case SDL_KEYDOWN:
                    {
                        // EXIT wenn escape gedrückt wurde
                        if (event.key.keysym.sym == SDLK_ESCAPE)
                            done = true;
                        break;
                    }
                case SDL_JOYBUTTONDOWN:
                if ( event.jbutton.button == 7 )
                {
                    done = true;
                }
                case SDL_JOYAXISMOTION:
    //                ##################################################################################
    
                    if( event.jaxis.which == 0 )
                            {
                                //Hat die X Axe sich bewegt
                                    if( event.jaxis.axis == 0 )
                                        {
                                        //Ist die X Achse neutral
                                            if( ( event.jaxis.value > -8000 ) && ( event.jaxis.value < 8000 ) )
                                                {
                                                    xVel = 0;
                                                }
                                                else
                                                {
                                                   //Stellt den Mittelpunkt ein
                                                    if( event.jaxis.value < 0 )
                                                            {
                                                                xVel = -20;
                                                            }
                                                            else
                                                            {
                                                                xVel = 20;
                                                            }
                                                }
    
                                        }
    
                                    else if( event.jaxis.axis == 1 )
                                            {
                                                //IIst die Y Achse Neutral
                                                if( ( event.jaxis.value > -8000 ) && ( event.jaxis.value < 8000 ) )
                                                        {
                                                            yVel = 0;
                                                        }
                                                        //wenn nicht
                                                        else
                                                        {
                                                            //Stellt den Mittelpunkt ein
                                                            if( event.jaxis.value < 0 )
                                                                {
                                                                    yVel = -20;
                                                                }
                                                                else
                                                                {
                                                                    yVel = 20;
                                                                }
                                                }
    
                            }
    
    //             ##################################################################################
                } // ende switch
    
            } // ende der Nachrichtenverarbeitung
    
        }
          m_fXPosPlayer1   += xVel;
          m_fYPosPlayer1   += yVel;
    } // ProcessMoving
    

    Vieleicht hat ja jemand eine Idee ?

    Gruß MacGyver



  • Hat sich erledigt
    Habe den Fehler gefunden!


Anmelden zum Antworten