Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Bu1

Frischling

  • »Bu1« ist der Autor dieses Themas

Beiträge: 66

Beruf: Schüler

  • Private Nachricht senden

1

13.03.2011, 20:03

Aufgabe 4 Kapitel 4.9

Hi Leute,

Ich bin gerade bei der 4. Aufgabe im Kapitel 4.9. Bei mir wird die Maus, nur dann bewegt wenn die Maus über dem Fenster ist :cursing: . Hat jemand ne Idee wie man es schaft das die Mause auch bewegt wird wenn sie nicht drüber ist?

Ich initialisiere den Joystick so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
if(FAILED(g_pDInput->EnumDevices(DI8DEVCLASS_GAMECTRL, EnumJoysticksCallback,
                                     NULL, DIEDFL_ATTACHEDONLY)))
    {
        MessageBox(NULL, "Es wurde kein Joystick gefunden!",
                "Fehler", MB_OK | MB_ICONEXCLAMATION);
        return TB_ERROR;
    }

    // Jetzt wird die IDirectInputDevice8-Schnittstelle für den
    // Joystick erstellt.   
    if(FAILED(g_pDInput->CreateDevice(JoystickGUID, &g_pJoystick, NULL))) return TB_ERROR;

    // Als nächstes wird das Datenformat gesetzt.
    if(FAILED(g_pJoystick->SetDataFormat(&c_dfDIJoystick2))) return TB_ERROR;

    // Ebene der Kooperation festlegen. Es wird ein nicht exklusiver
    // Zugriff im Vordergrundbetrieb eingestellt.
    if(FAILED(g_pJoystick->SetCooperativeLevel(hWnd, DISCL_EXCLUSIVE |
                                                    DISCL_BACKGROUND))) return TB_ERROR;

    if(FAILED(g_pJoystick->Acquire()))
    {
        return TB_ERROR;
    }

    // Den Joystick kalibrieren
    return CalibrateJoystick();


die EnumJoysticksCallback und CalibrateJoystick-Funktion entspricht bei mir den Funktionen aus dem Beispielen davor.

die Joystickdaten frage ich so ab:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
DIJOYSTATE2 JoystickState;      // Status des Joysticks
    HRESULT     r;
    POINT mousePosA;
    int x;
    int y;


    
    // Daten abfragen
    r = g_pJoystick->Poll();
    if(r == DIERR_INPUTLOST)
    {
        // Zugriff verloren - erneut versuchen
        g_pJoystick->Acquire();
    }

    if(FAILED(r))
    {
        // Abfrage hat nicht funktioniert!
        // Wahrscheinlich ist das Fenster gerade nicht aktiv.
        MessageBox(NULL, "Fehler beim Abfragen der Joystickdaten", "Fehler", MB_OK | MB_ICONEXCLAMATION);
        return TB_ERROR;
    }

    // Zustand abfragen
    g_pJoystick->GetDeviceState(sizeof(DIJOYSTATE2), &JoystickState);

    // Alte Mouse-Position abfragen
    GetCursorPos(&mousePosA);

    // Neue Mouse-Position berechnen
    x = mousePosA.x + JoystickState.lX / 15;
    y = mousePosA.y + JoystickState.lY / 15;

Zitat

Sämtliche Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt :!:
Sie können nach belieben kopiert und weiterverwändet werden. :P

mac1268

Frischling

Beiträge: 56

Wohnort: Wien

Beruf: /

  • Private Nachricht senden

2

19.03.2011, 09:49

Ich sage gleich vorweg das ich noch lange nicht bei dem Kapitel bin aber ich glaube ich habe vll. eine Lösung oder besser gesagt eine Erklärung:

Wenn sich der Kursor auserhalb des Fensters befindet ist er ja "in Windows" und in Windows kannst du die Maus ja auch nicht mit dem Joystick steuern oder? Sprich du gehst aus deinem geschriebenen Code ins Betriebsystem (muss nicht Windows sein).

Ist nur eine Idee einens Jungens der sich noch mit der 3DGrafik rumschlägt. (=

Gutes Gelingen noch!

3

20.03.2011, 20:15

/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »E333« (02.09.2021, 04:10)


Bu1

Frischling

  • »Bu1« ist der Autor dieses Themas

Beiträge: 66

Beruf: Schüler

  • Private Nachricht senden

4

23.03.2011, 15:27

Oh hab ich vergessen hinzuschreiben.
Ich machs mit :

C-/C++-Quelltext

1
SetCursorPos(x, y);

Zitat

Sämtliche Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt :!:
Sie können nach belieben kopiert und weiterverwändet werden. :P

Werbeanzeige