Variable wird kein Wert zugewiesen:



  • Hallo. Ich bin gerade total baff, was mein Debugger mir hier anzeigt. Ich arbeite mit SDL und möchte mir den Tastencode einer Maustaste zwischenspeichern. Allerdings wird anscheinden gar nichts gespeichert. Is mir alles schleierhaft, deshlab poste ich hier mal code und hoffe ihr könnt mir sagen was hier schief läuft.

    Erstmal die SDL_Eventstruktur welche ich auslese:

    /* Mouse button event structure */
    typedef struct SDL_MouseButtonEvent {
    	Uint8 type;	/* SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */
    	Uint8 which;	/* The mouse device index */
    	Uint8 button;	/* The mouse button index */
    	Uint8 state;	/* SDL_PRESSED or SDL_RELEASED */
    	Uint16 x, y;	/* The X/Y coordinates of the mouse at press time */
    } SDL_MouseButtonEvent;
    

    Dann meine Klasse:

    class Kamera
    { 
    	private: 
    		Uint8 pressedBtn;
    		[...]
    	public:
    		//----Konstruktor/Destruktor----
    		Kamera();
    		~Kamera();
    
    		[...]
    
    		//----Ereigniss handler----
    		void onMouseDown(SDL_MouseButtonEvent* mbe);
    		void onMouseUp(SDL_MouseButtonEvent* mbe);
    		void onMouseMove(SDL_MouseMotionEvent* mme);
    };
    

    Hier der Inhalt von 'onMouseDown()':

    void Kamera::onMouseDown(SDL_MouseButtonEvent* mbe)
    {
    	pressedBtn = mbe->button;
    	switch (pressedBtn)
    	{
    		case SDL_BUTTON_LEFT:
    			oldX = mbe->x;
    			oldY = mbe->y;
    			break;
    		case SDL_BUTTON_MIDDLE:
    			oldY = mbe->y;
    			break;
    	};
    };
    

    Und so rufe ich onMouseDown() auf:

    while ( SDL_PollEvent( &event ) )
    		{
    		    switch( event.type )
    			{
    			case SDL_MOUSEBUTTONDOWN:
    				/* handle mousedown event */
    				kamera->onMouseDown( &(event.button) );
    				break;
                  [...]
    

    Folgendes passiert nun in onMouseDown():

    mbe->button enthält folgenden Wert (Laut Debugger): 1 '\001'
    pressedBtn enthält nach(!) der Zuweisung den Inhalt: 0 '\0'

    Witzigerweise wird aber innerhalb des Switch in die richtige Case anweisung verzweigt! 😕

    Eigentlich will ich doch nur, dass nach meiner Zuweisung der inhalt auch in pressedBtn gespeichert wird.

    Wisst ihr warum das nicht geht, und was ich anders machen muss, damit es geht?



  • Habt ihr wirklich keine Idee?

    Ich komm auch net weiter. Die Debugger ausgaben allein sind mysteriös. Eigentlich sollten da ja Zahlen drinnen stehen. Ich hba keine Ahnung wie dieser \ da reinkommt... 🙄



  • Ich find schon dein ganzes Callback System sehr ominös. Daran würde ich nicht weiter programmieren wollen.



  • Dir zuliebe hab ich mir es jetzt mal genauer angesehen: SDL_Event ist eine Union, d.h. wenn der type da drin gesetzt ist, ist event.button logischerweise 0x00. Probier doch mal statt "event.button" "event.type" zu übergeben. Musst evtl. die Paramter deiner Funktionen anpassen.



  • Deine Parameter-Übergabe sieht merkwürdig aus:

    void Kamera::onMouseDown(SDL_MouseButtonEvent* mbe);//erwartet einen Pointer auf deinen Event-Struct
    
    while ( SDL_PollEvent( &event ) )
      ...
      kamera->onMouseDown( &(event.button) );//Was für einen Typ hat denn event? Du pointerst hier mitten in eine struct hinein
      ...
    


  • Dir zuliebe hab ich mir es jetzt mal genauer angesehen

    Ich weiß das zu schätzen. 🙂

    Ich hab die Pointer jetzt weg gelassen und übergeb das struct direkt.
    Jetzt wird zwar in pressedBtn etwas gespeichert (und das ist gut so 😉 ) allerdings sieht das immer noch komisch aus. Ne normale Integerzahl sollte irgendwie "zahliger" aussehen, nich mit so "\" Dingern...

    (Nebenbei: in Type steh auch nur sowas drinnen, wenn auch 5 '\005' .)

    Jetzt muss ich nur noch rausfinden, wieso die Kamera sich nicht bewegen lässt. Aber das ist eine andere Sache.



  • Anfänger06 schrieb:

    Ne normale Integerzahl sollte irgendwie "zahliger" aussehen, nich mit so "\" Dingern...

    Such dir mal den typedef von Uint8 😉 (dürfte ein 'unsigned char' sein)


Anmelden zum Antworten