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

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

1

09.09.2011, 18:04

Kamera mit Maus bewegen falsche Rechnung?

Hallo ich arbeite ja an einem First Person Projekt und wollte die Kamera mit der Maus bewegen.
Dazu habe ich mir erstmal überlegt wie ich mache das ich weiß wie weit ich die Kamera bewegen muss:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
while(true)
{
// Auslesen der Position der Maus
GetCursorPos( &ptMousePosition );

// Ausgeben der Maus Position
cout<< "Maus Position:\nX:" << ptMousePosition.x << "\nY:"<< ptMousePosition.y << endl;

ptMousePositionOld = ptMousePosition; // Variablen austauschen
GetCursorPos( &ptMousePosition ); // Position auslesen

// Differenz ausrechen zur Vorherigen position
ptMousePositionDiffrent.x = ptMousePosition.x - ptMousePositionOld.x;
ptMousePositionDiffrent.y = ptMousePosition.y - ptMousePositionOld.y;

ptMousePositionOld = ptMousePosition;

data<< "Differenz zur vorherigen Position:\n" << "X: " << ptMousePositionDiffrent.x << "\nY: " << ptMousePositionDiffrent.y << endl;
Sleep(50);
system("CLS");
}

data ist eine datei / variable (?) mit ofstream also daten werden in ne txt reingeschrieben.
Mein Problem ist jetzt nur das die Differenz also zwischen Alter und Neuer Mausposition nie höher als 10 ist, obwohl ich die Maus über den ganzen Bildschirm bewege!
Was mache ich Falsch oder wie macht ihr das?

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

09.09.2011, 21:11

C-/C++-Quelltext

1
2
3
4
5
6
7
// Auslesen der Position der Maus
GetCursorPos( &ptMousePosition );

[...]

ptMousePositionOld = ptMousePosition; // Variablen austauschen
GetCursorPos( &ptMousePosition ); // Position auslesen


Bei Variable "austauschen" wird doch garnichts ausgetauscht.
Du ließt erst in "aktuell" ein, speicherst das dann in "alt" und ließt dann nochmal in "neu" ein. Unnötig und überschreibt nur das tatsächliche "alt". Frag mich dann nur wieso du überhaupt 10px unterschied haben sollst...

Lösung: ptMousePositionOld erst am Ende mit neuen Daten füllen.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

3

10.09.2011, 11:05

Stimmt danke das war es.
Mich hat etwas davon abgehalten das erst am Ende zu tun.
Der 1. Wert ist ja sonst 0
Aber Danke

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

4

10.09.2011, 14:50

So habe jetzt noch ne Frage:
Ich wollte jetzt die Maus auch wieder in die Mitte setzten mein Code:

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
34
35
36
37
38
39
40
while( true )
    {
        // Auslesen der Position der Maus
        GetCursorPos( &ptMousePosition );

        // Ausgeben der Maus Position
        cout<< "Maus Position:\nX:" << ptMousePosition.x << "\nY:" << ptMousePosition.y << endl;

        // Differenz ausrechen zur Vorherigen position ( bei dem 1. Durchgang 0 )
        ptMousePositionDiffrent.x = ptMousePosition.x - ptMousePositionOld.x;
        ptMousePositionDiffrent.y = ptMousePosition.y - ptMousePositionOld.y;

        ptMousePositionOld = ptMousePosition;

        cout<< "Differenz zur vorherigen Position:\n" << "X: " << ptMousePositionDiffrent.x << "\nY: " << ptMousePositionDiffrent.y << endl;

        // Maus in die Mitte setzten
        // Variable zum Specihern der Auflösung
        float cxScreen,cyScreen;
        // Auflösung sualesen
        cxScreen = GetSystemMetrics(SM_CXSCREEN);
        cyScreen = GetSystemMetrics(SM_CYSCREEN); 

        // Mitte ausrechnen
        ptCenter.x = cxScreen / 2.0 ;
        ptCenter.y = cyScreen / 2.0 ;

        // Cursor Position auf Mitte setzten
        SetCursorPos( ptCenter.x , ptCenter.y );

        // Beenden falls Taste gedrückt wird
        int get;
        get = kbhit();
        if ( get != 0 )
        {
          exit(0);
        }

        system("CLS");
    }

Wenn ich nun nur die Maus nach rechts bewege dürfte eigentlich ja nur positive werte für X kommen aber immer wenn sie auf die Mitte gesetzt wird kommt auf einmal ein negativer Wert zwischen 0 und -20!
Warum?

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

5

10.09.2011, 15:24

Und noch eine Frage ich habe jetzt meinen Code in das Beispiel Vertex und IndexBuffer von Davids Buch geschrieben.
1. Irgendwie pfeift mein PC bei jedem beispiel
2. wenn ich die Maus schnell bewege, bewegt sich auch die Kamera. Wenn ich die Maus langsam bewege, bewegt sich nichts ( habe noch ptMousePositionDiffrent.x = ptMousePositionDiffrent.x * 0.5 gemacht )
Der Code der in Move steht: ( ausschnitt )

C-/C++-Quelltext

1
2
3
4
5
6
7
GetCursorPos( &ptMousePosition );
    ptMousePositionDiffrent.x = ptMousePosition.x - ptMousePositionOld.x;
    ptMousePositionDiffrent.y = ptMousePosition.y - ptMousePositionOld.y;
    ptMousePositionOld = ptMousePosition;

    ptMousePositionDiffrent.x = ptMousePositionDiffrent.x * 0.5;
    g_fCameraAngle += ptMousePositionDiffrent.x;

Irgendwie bekomme ich das nicht hin -.-
Danke

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

6

10.09.2011, 15:30

Sry habe mein Fehler gefunden Code:

C-/C++-Quelltext

1
2
3
4
5
6
GetCursorPos( &ptMousePosition );
    ptMousePositionDiffrent.x = ptMousePosition.x - ptMousePositionOld.x;
    ptMousePositionDiffrent.y = ptMousePosition.y - ptMousePositionOld.y;
    ptMousePositionOld = ptMousePosition;

    g_fCameraAngle +=  ptMousePositionDiffrent.x  * fNumSecsPassed;

Jetzt ist allerdings noch ein Problem:
Es ruckelt ein Bisschen!
Aber wenn ich es im Vollbild laufen lasse ist da Pfeiden weg und es ruckelt nicht aber die Kamera dreht sich schneller!
Danke

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

7

10.09.2011, 19:54

Erstmal: man kann Beiträge auch bearbeiten (und sollte man auch tun).

Zitat

Wenn ich nun nur die Maus nach rechts bewege dürfte eigentlich ja nur positive werte für X kommen aber immer wenn sie auf die Mitte gesetzt wird kommt auf einmal ein negativer Wert zwischen 0 und -20!
Warum?


Das sollte nicht passieren wenn du die Maus pausenlos bewegst (oder sie nicht zurücksetzt):

Durchlauf 1:

old = 0
new = 10 // z.B.
dif = new-old = 10

Durchlauf 2:

old = 10
new = 0 // weil ja zurückgesetzt (passiert nach jeder Bewegung)
dif = new-old = -10

Zitat

Es ruckelt ein Bisschen!


Liegt wahrscheinlich an Problem 1.

MfG

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

8

12.09.2011, 17:15

Ah Klar stimmt!
Verschwendete Zeit-.-
Trotzdem Danke ;)
Habe jetzt bisschen umgebaut und läuft jetzt flüssig auch im Spiel ;)
MFG

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

9

12.09.2011, 17:41

Gerne :)

Werbeanzeige