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

Patrick

Alter Hase

  • »Patrick« ist der Autor dieses Themas

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

1

15.06.2003, 22:06

Kann mir das einer erklären???

-= Schimpfwörter durch Administrator entfernt =-

Hi,

also mein Puls ist auf 180 und ich raste bald aus wenn das so weitergeht!

Hier der code:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    double PartOfSecond = (double) Ellapsed / 1000 ;
    double Gravity      = 75;
    double PlayerSpeed  = 75;

    if(KEY_DOWN(VK_LEFT))
    {
        this->m_Player.setX (this->m_Player.getX()-(PlayerSpeed*PartOfSecond));
    }
    else if(KEY_DOWN(VK_RIGHT))
    {
        this->m_Player.setX (this->m_Player.getX()+(PlayerSpeed*PartOfSecond));
    }
    if(KEY_DOWN(VK_UP))
    {
        this->m_Player.setY (this->m_Player.getY()-(PlayerSpeed*PartOfSecond));
    }
    else if(KEY_DOWN(VK_DOWN))
    {
        this->m_Player.setY (this->m_Player.getY()+(PlayerSpeed*PartOfSecond));
    }


Wieso geht dieses Dings nach links und nach oben schneller geht als nach rechts und nach unten?? (ca. 1,7 doubles mehr)

Ich hatte das mal da drunter geschrieben:

Quellcode

1
this->m_Player.setY (this->m_Player.getY()+(PlayerSpeed*PartOfSecond));

um mal Gravitation zu testen. Und was passiert wenn ich UP drücke? DIESE RATTE GEHT HOCH!!! nein sie bleibt nicht stehen sie geht HOCH! Und den unterschied von 1,7 doubles den merkt man auch OHNE diese zeile! ES IST ZUM MÄUSEMELKEN!!!!

Wieso verdammt?? Das ist doch Logisch alles Korrekt?!??
Mir kommt's schon hoch!

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

15.06.2003, 22:24

Nicht so aufregen, ja?...
Mach mal die x, y und z-Elemente public, dann kannst Du es mal mit += und -= versuchen anstatt mit diesem dummen umständlichen setX(getX() + Speed)...
x += Speed wäre doch viel einfacher. Logisch gesehen müsste es zwar funktionieren, aber bei so seltsamen Problemen muss man jede Möglichkeit in Betracht ziehen!

Patrick

Alter Hase

  • »Patrick« ist der Autor dieses Themas

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

3

15.06.2003, 22:25

hatte ich auch schon ausprobiert, funzt net :crying:

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

15.06.2003, 22:27

Dann mach es mal so:

Quellcode

1
2
3
4
5
6
7
8
9
double dx = 0.0, dy = 0.0;

if(KEY_DOWN(VK_LEFT)) dx -= Speed * Time;
if(KEY_DOWN(VK_RIGHT)) dx += Speed * Time;
if(KEY_DOWN(VK_UP)) dy += Speed * Time;
if(KEY_DOWN(VK_DOWN)) dy -= Speed * Time;

m_Player.x += dx;
m_Player.y += dy;


Dann lass Dir in den kritischen Situationen den Wert von dx und dy ausgeben.

Patrick

Alter Hase

  • »Patrick« ist der Autor dieses Themas

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

5

15.06.2003, 22:35

@David:
Ich habs mir mal so ausgeben lassen welchen Wert VelX und VelY haben:

Quellcode

1
2
3
4
5
6
7
8
9
10
    if(KEY_DOWN(VK_LEFT))
    {
        velX -= (PlayerSpeed*PartOfSecond);
        Protokoll << "VelX Left: " << velX << "\n";
    }
    else if(KEY_DOWN(VK_RIGHT))
    {
        velX += (PlayerSpeed*PartOfSecond);
        Protokoll << "VelY Right: " << velX << "\n";
    }

und das kam dabei raus:

Quellcode

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
41
42
43
44
45
46
47
VelY Right: 2.325
VelY Right: 1.2
VelY Right: 1.2
VelY Right: 1.125
VelY Right: 1.2
VelY Right: 1.125
VelY Right: 1.2
VelY Right: 1.2
VelY Right: 1.125
VelY Right: 1.2
VelY Right: 1.2
VelY Right: 1.125
VelY Right: 1.2
VelY Right: 1.125
VelY Right: 1.2
VelY Right: 2.325
VelY Right: 1.2
VelY Right: 1.2
VelY Right: 1.125
VelY Right: 1.2
VelY Right: 1.125
VelY Right: 1.2
VelY Right: 1.2
VelY Right: 1.125
VelY Right: 1.2
VelY Right: 1.2
VelY Right: 1.125
VelY Right: 1.2
VelX Left: -1.125
VelX Left: -1.2
VelX Left: -1.2
VelX Left: -1.125
VelX Left: -1.2
VelX Left: -1.125
VelX Left: -1.2
VelX Left: -1.2
VelX Left: -1.125
VelX Left: -1.2
VelX Left: -1.2
VelX Left: -1.125
VelX Left: -1.2
VelX Left: -1.125
VelX Left: -1.2
VelX Left: -2.325
VelX Left: -1.2
VelX Left: -1.2
VelX Left: -1.125


also sieht eigentlich ganz okay aus. Aber wie kann der denn die Werte denn verändern bei x und y setzen??

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

15.06.2003, 22:37

Das einzige was mir dazu einfällt, wären Ungenauigkeitsfehler...
Und mit VelX und VelY klappt es auch nicht?

Patrick

Alter Hase

  • »Patrick« ist der Autor dieses Themas

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

7

15.06.2003, 22:40

leider nein! Ich versuchs mal mit anderen Dateitypen als double (ist zwar alles double aber mal gucken), mal gucken was DWORD und WORD sagen.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

15.06.2003, 22:43

Nee, die kannste für sowas nicht gebrauchen! Es wird ja immer nur um Bruchteile von Sekunden weiterbewegt.

9

16.06.2003, 00:55

Da hat DInput leider an sich, is bei mir auch so, einfache Lösung: TIMER

If Timer + 25 < GetTickCount() ........


Dann gehts besser, is nervig, oder Probiers mal über die WinAPI =)

cya

Patrick

Alter Hase

  • »Patrick« ist der Autor dieses Themas

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

10

16.06.2003, 11:44

@ghostie:
1. Benutz ich VK_ codes die sind WinAPI
2. DI kommt das selbe raus.
3. Ich benutze Timer (sonst würd ich ja keine berechnung machen sondern +2 rechnen)

Naja ich glaub das ist nun geklärt :D

@David:
mit DWORDs funzt es aber prima?!?!?! ???

Werbeanzeige