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

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

1

17.06.2003, 14:33

Bewegung einbringen

Hallo!

Mitterlweile bin ich soweit, dass ich eine Tischtennisplatte sehe und ich hab auch schon nen Würfel drumgebaut für die Umgebung. Soweit so gut.
Jetzt möchte ich eine Ego-Shooter-Steuerung mit einbauen. Also mit Maus drehen, mit Tastatur bewegen. Ich bin jetzt soweit:
Das Problem ist, dass wenn ich mcih umdrehen will, dass sich dann alles ganz schnell dreht und ich mich nicht mehr richtig bewegen kann.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if(g_DIState[TB_KEY_UP])
{
  m_CamPos.x += sinf(m_YRot) * fPassedSecs;
  m_CamPos.z += (cosf(m_YRot) + cosf(m_XRot)) * fPassedSecs;
  m_CamPos.y += sinf(m_XRot) * fPassedSecs;
}
if(g_DIState[TB_KEY_DOWN])
{
  m_CamPos.x -= sinf(m_YRot) * fPassedSecs;
  m_CamPos.z -= (cosf(m_YRot) + cosf(m_XRot)) * fPassedSecs;
  m_CamPos.y -= sinf(m_XRot) * fPassedSecs;
}

if(g_DIState[TB_MOUSE_X_NEG])
  m_YRot -= g_DIState[TB_MOUSE_X_NEG];
if(g_DIState[TB_MOUSE_X_POS])
  m_YRot += g_DIState[TB_MOUSE_X_POS];
if(g_DIState[TB_MOUSE_Y_NEG])
  m_XRot += g_DIState[TB_MOUSE_Y_NEG];
if(g_DIState[TB_MOUSE_Y_POS])
  m_XRot -= g_DIState[TB_MOUSE_Y_POS];
      
m_CamView = m_CamPos + tbVector3(sinf(m_YRot), sinf(m_XRot), cosf(m_XRot)+cosf(m_YRot));


Wie muss es denn dan richtig heißen?

Anonymous

unregistriert

2

17.06.2003, 22:37

Hey Maxi nimms mir nicht übel, aber findest du nicht auch dass du vielleicht mal selber versuchen solltest ein Problem zu lösen, als die ganze Zeit hier oder in anderen Foren zig Threads aufzumachen ? Ich bin selber nicht besonders gut, und frage auch ab und zu mal ne "dämliche" Frage, aber trotzdem ich finde du übertreibst es "etwas"... Macht doch auch mehr Spass sich mal wirklich dahinter zu klemmen und ein Problem zu lösen. Da mich nun wegen diesem Posting wohl eh ein paar Leute flamen werden, poste ich das lieber als Gast, aber lass es dir mal durch den Kopf gehen. Ich meine das ist np mal bei einem Verständnisproblem o.ä. zu fragen, aber ständig nur weil irgendwas nicht richtig funktioniert überall zig Threads aufzumachen ist sicherlich nicht der richtige Weg...

Verzuz

Frischling

Beiträge: 31

Wohnort: München

Beruf: Fachinformatiker AE Azubi

  • Private Nachricht senden

3

17.06.2003, 22:58

Dem schliess ich mich an ... aber zur Frage:
Schon mal überlegt, ob die Position dazuaddieren richtig is? Ich meine - keine Ahnung, aber klingt für mich falsch (ist die Position nicht mal höher und mal niedriger etc?) und wenns richtig ist: Teil halt die Position durch 10 oder so .. vllt hilft das - kA.
/*no comment*/

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

17.06.2003, 23:04

@Maxi:
Du übertreibst es wirklich ein bisschen... Wenn man mal schaut, dann sieht man, dass es oft nur wenige Minuten sind, wo Du wieder postest. Kurz nachdem ein Problem gelöst ist, taucht ein weiteres auf. Und wenn Du es nicht sofort lösen kannst (mehr als ein paar Minuten kannst Du ja garnicht probiert haben), dann postest Du wieder hier. Klar geht das, aber hast Du was davon? Ich denke nicht! Es ist doch ein tolles Gefühl, wenn man ein Problem selbst lösen kann. Und bei Dir waren es bisher ja immer nur richtig "dumme" Fehler, also irgendwo eine falsche Zahl eingesetzt oder so. Du solltest Dir auch mal meine Beispielprogramme genauer ansehen.
Aber ich will mal nett sein! ;)

1.) Wenn Du die Rotationswerte erhöhst, dann solltest Du die Erhöhungswerte auch noch mit der vergangenen Zeit multiplizieren.

2.) Wenn Du schon die Formeln aus meinem Buch für die Blickrichtung der Kamera benutzt, dann schreibe sie auch richtig ab! Schau sie Dir nochmal genau an, und Du wirst einen Unterschied feststellen! Ich meine das hier:

if(g_DIState[TB_KEY_UP])
{
m_CamPos.x += sinf(m_YRot) * fPassedSecs;
m_CamPos.z += (cosf(m_YRot) + cosf(m_XRot)) * fPassedSecs;
m_CamPos.y += sinf(m_XRot) * fPassedSecs;
}
if(g_DIState[TB_KEY_DOWN])
{
m_CamPos.x -= sinf(m_YRot) * fPassedSecs;
m_CamPos.z -= (cosf(m_YRot) + cosf(m_XRot)) * fPassedSecs;
m_CamPos.y -= sinf(m_XRot) * fPassedSecs;
}

m_CamView = m_CamPos + tbVector3(sinf(m_YRot), sinf(m_XRot), cosf(m_XRot)+cosf(m_YRot));


Da wo's rot ist, ist was falsch.

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

5

18.06.2003, 09:02

Hm, OK, ich bin dann immer so ungeduldig und kann dann nciht so lange probieren, besonders, wenn ich weiß, dass es ja Leute gibt, die en Prblem nur beim Hingucken lösen können. DAher habe ich so oft gepostet. ABer ich hoffe, das wird sich jetzt ändern..., ihr habt mir einen Denkanstoß gegeben und auch, wenn ich nciht weiß, wo das in deinem Buch steht, hoffe ich, dass es so richtig ist, (ich habs mit selbst überlegt/rausgefudnen/ausprobiert)...:

m_CamPos.z += (cosf(m_YRot) + sinf(m_XRot)) * fPassedSecs * 3.0f;

m_CamPos.z -= (cosf(m_YRot) + sinf(m_XRot)) * fPassedSecs * 3.0f;

m_CamView = m_CamPos + tbVector3(sinf(m_YRot), sinf(m_XRot), sinf(m_XRot)+cosf(m_YRot));

Ich werde in Zukunft nur ncoh bei sehr schwierigen Problemen posten, denk ich mal, ich muss mich eben selbst zwingen...
Ich werd mir jedes Problem genau berdenken udn wenns echt nicht mehr weiter geht, dann kome ich und frage.

Aber dann noch eine kleine Frage @David:
Auf wlcher Seite/in welchem Beispielprogramm st das zu finden?
Ich hab nämlich erst bin DirectSound gelesen.

Gruß, Maxi

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

18.06.2003, 11:08

Zitat von »"Maxi"«

Aber dann noch eine kleine Frage @David:
Auf wlcher Seite/in welchem Beispielprogramm st das zu finden?
Ich hab nämlich erst bin DirectSound gelesen.

Dann hast Du es wohl überlesen!
Im dritten Kapitel wird es ausführlich erklärt, und zwar im Zusammenhang mit dem Beispielprogramm "Modelle". Siehe Seite 322! Da gibt es sogar einen ausführlichen mathematischen Beweis dafür, dass er berechnete Richtungsvektor immer die Länge 1 hat!

Werbeanzeige