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

1

05.02.2004, 20:08

Kamera mit Hilfe der Maus steuern

Weiß einer vielleicht wie ich die Kamera mit hilfe der Maus steuern kann.
Die TriBase-Engine unterstüzt sowas nicht oder, bzw. hat für sowas keine Funktionen implementiert oder?
In a world without fences and walls - who needs windows and gates ?

http://www.Paid4Mailer.de/?refid=8422

CuTeX0r

Treue Seele

Beiträge: 174

Wohnort: Deutschland

  • Private Nachricht senden

2

06.02.2004, 15:05

wo ist das problem?? einfach mauskoords in jedem frame holen und je nachdem, wie weit / wohin sie relativ gesehn zum letzten frame bewegt wurde die camera position / richtung ändern. das geht, ich habs in galactica eingebaut ^^ :huhu:

3

06.02.2004, 16:58

Hmm, ja stimmt.
Warum bin ich da bloß nicht selber drauf gekommen.... hab wohl schon ge :sleep:

Edit:
So hab das jetzt ebenfalls eingebaut, nur will er bei mir die 3 Achsen nicht abfragen. Ich lass mir den aktuellen Status mit

Quellcode

1
tbWriteToLog("%f,%f,%f",MouseState.lX,MouseState.lY, MouseState.lZ);

in die Log-Datei schreiben. Zu sehen ist später:

Zitat


...
0.000000,0.000000,1.#QNAN0
...


Das Abfragen der Tasten funktioniert ohne Probleme:

Quellcode

1
2
3
4
if(MouseState.rgbButtons[0] & 0x80)
{
    MessageBox(NULL,"MButton[0]","Test",NULL);
}
In a world without fences and walls - who needs windows and gates ?

http://www.Paid4Mailer.de/?refid=8422

serial chiller

Frischling

Beiträge: 61

Wohnort: Rheinbach ;-(

Beruf: berufs chiller

  • Private Nachricht senden

4

07.08.2004, 23:38

Hallo erstmal^^
Ich möchte, vorerst nur in "Modelle", gerne eine Maussteuerung einbauen.
Scheinbar liefert die Maus keinerlei Informationen mit
der

Quellcode

1
2
3
4
if(MouseState.rgbButtons[0] & 0x80) 
{ 
   MessageBox(NULL,"MButton[0]","Test",NULL); 
}

und mit der Abfrage

Quellcode

1
tbWriteToLog("%f,%f,%f",MouseState.lX,MouseState.lY, MouseState.lZ);


UpdateMouseState sieht bei mir so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/ Abfragen des Mausstatus
int UpdateMouseState(HWND hDlg)
{    HRESULT        r;

    r = g_pMouse->Poll();
    if(r == DIERR_INPUTLOST)
    {
        // Zugriff verloren - erneut versuchen
        g_pMouse->Acquire();
    }
          g_fCameraRot += (0.01+(1* (float)(MouseState.lY)));
    g_fCameraUpDown +=(0.01+(1 *(float)(MouseState.lX)));
} 


    
    return TB_OK;
}

in der moveproc() siehts so aus

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
tbVector3 vCameraDir;

    // Den Zeitzähler aktualisieren
    g_fTime += fNumSecsPassed;

    // Tastatursteuerung...
    vCameraDir = tbVector3(sinf(g_fCameraRot) * cosf(g_fCameraUpDown),
                           sinf(g_fCameraUpDown),
                           cosf(g_fCameraRot) * cosf(g_fCameraUpDown));
    
    UpdateMouseState(tbDirect3D::GetWindow());
    if(GetAsyncKeyState(VK_LEFT))       g_fCameraRot -= 1.0f * fNumSecsPassed;
    if(GetAsyncKeyState(VK_RIGHT))      g_fCameraRot += 1.0f * fNumSecsPassed;
    if(GetAsyncKeyState(VK_UP))         g_fCameraUpDown -= 1.0f * fNumSecsPassed;
    if(GetAsyncKeyState(VK_DOWN))       g_fCameraUpDown += 1.0f * fNumSecsPassed;
    if(GetAsyncKeyState(VK_ADD))        g_vCameraPos += vCameraDir * 15.0f * fNumSecsPassed;
    if(GetAsyncKeyState(VK_SUBTRACT))   g_vCameraPos -= vCameraDir * 15.0f * fNumSecsPassed;
    return TB_OK;

in WinMain habe ich folgende Aufrufe:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if(FAILED(DirectInput8Create(hInstance,             // Instanz
                                 0x0800,                // Version
                                 IID_IDirectInput8,     // Schnittstellenversion
                                 (void**)(&g_pDInput),  // Doppelzeiger auf Objekt
                                 NULL)))                // nicht wichtig
    {
        MessageBox(NULL, "IDirectInput8-Objekt konnte nicht erstellt werden!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        return 1;
    }

    if(InitMouse(tbDirect3D::GetWindow()))
        {
            MessageBox(NULL, "Maus konnte nicht initialisiert werden!",
                       "Fehler", MB_OK | MB_ICONEXCLAMATION);

        }

    UpdateMouseState(tbDirect3D::GetWindow());

was hab ich da falsch gemacht?
danke

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

08.08.2004, 00:01

Zitat von »"TheDeath"«

Quellcode

1
tbWriteToLog("%f,%f,%f",MouseState.lX,MouseState.lY, MouseState.lZ);

"%f" steht für float, was die Variablen lX, lY und lZ aber nicht sind (wie man an ihren Namen erkennen kann). Daher die falsche Ausgabe.

Anonymous

unregistriert

6

08.08.2004, 00:06

%f durch %l zu ersetzten dürfte richtig sein? dann erscheinen in der Log Datei nur lauter "

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

serial chiller

Frischling

Beiträge: 61

Wohnort: Rheinbach ;-(

Beruf: berufs chiller

  • Private Nachricht senden

8

08.08.2004, 00:28

da spuckt er 0,0,0 aus

serial chiller

Frischling

Beiträge: 61

Wohnort: Rheinbach ;-(

Beruf: berufs chiller

  • Private Nachricht senden

9

09.08.2004, 13:59

weiss keiner rat? :(

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

10

09.08.2004, 15:02

<Hab nicht alles durchgelesen>

Du könntest auf %ld ausprobieren.

Hast Du mal debugged, um zu sehen ob das Problem die Ausgabe ist oder die Zahlen wirklich immer 0 sind?
"Games are algorithmic entertainment."

Werbeanzeige