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

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

41

31.10.2015, 19:06

Was soll das damit zutun haben? Kannst du natürlich, ja aber musst du nicht. Du fragst ja nur Werte ab vom Zeitobjekt.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

42

31.10.2015, 19:07

Mal ganz doof gefragt: Muss ich dT als Referenz übergeben?

Kein Ahnung, sag du es mir. Du must dein Code verstehen und wissen was er macht.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

43

31.10.2015, 19:52

Jetzt habe ich den Fehler, dass wenn man den Spieler bewegt, dass die Bewegung manchmal sehr langsam beschleunigt und manchmal extrem schnell. :pillepalle:

44

31.10.2015, 19:57

Woran lag es?
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

45

31.10.2015, 20:00

Woran lag es?

Ich habe ne Vermutung: Es muss an der übergebenen sf::Time liegen, weil bevor ich deinen Code implementiert hatte, ging es ohne den Fehler...

46

31.10.2015, 20:06

weil bevor ich deinen Code implementiert hatte, ging es ohne den Fehler...
Ich wüsste jetzt nicht wo ich Code beigetragen hätte.

Ich habe ne Vermutung:
Schade das du nur eine Vermutung hast und immer noch im Trüben rum fischst. Mein Hoffnung war das du selber auf deinen Fehler kommst und Verstehst was da passiert.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

47

31.10.2015, 20:12

Ich wüsste jetzt nicht wo ich Code beigetragen hätte.
Genau da:
Für mich ist das ein bisschen sehr hoch, oder sehe ich das falsch?

Nein siehst du Richtig.

Nun noch mal nachdenken was da alles genau passiert!

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
// Gamstate Update-Methode (oder von was auch immer der Player update aufgerufen wird)

//hpp Gamestate
classe GameState
{
     sf::Time dieseZeit;
     ...
};
// cpp GameState Update-Methode
{
     mPlayer.update(dieseZeit)

}

// player update
void update(sf::Time dt)
{
    blabla*dt;

    if (v.x > maxvel)
    {
        v.x = maxvel;
    }
    if (v.x < -maxvel)
    {
        v.x = -maxvel;
    }

    dt.Zero
}

Irgendwie muss ich doch was übersehen haben :dash:

48

31.10.2015, 20:16

Geht es jetzt wie gewünscht oder nicht?

Die paar Zeilen Code, sollten nur die Stellen in deinem Code darstellen die Relevant für den Fehler sind.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

49

31.10.2015, 20:23

Geht es jetzt wie gewünscht oder nicht?

Nein, leider nicht. Ich habe nochmal alles langsam und Schritt für Schritt mit dem Debugger analysiert, aber irgendwie finde ich nicht den Fehler :dash:
Wer mir helfen will, hier der relevante Code:

PlayState.cpp:

C-/C++-Quelltext

1
2
3
4
    // time ist in PlayState.cpp als sf::Time deklariert
    time = clock.getElapsedTime();

    mPlayer->Update(time);


Die fast komplette Update-Methode in Player.cpp:

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
41
42
43
44
45
46
47
48
49
50
51
52
#pragma region CheckKeyborad

    float accel = 0.1f;

    // Tastenabfrge
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
    {
        a.x = -accel;
    }
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
    {
        a.x = accel;
    }
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))
    {
        a.y = -accel;
    }
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))
    {
        a.y = accel;
    }

    // Beschleunigung  ist die Änderung der Geschwindigkeit
    v.x = v.x + (a.x * dT.asSeconds());
    v.y = v.y + (a.y * dT.asSeconds());

    // Bis jetzt würde das Schiff einfach weiter gleiten,
    // deshalb muss die Geschwindigkeit in jedem Frame reduziert werden.
    const float k = 0.95f;
    v.x *= k;
    v.y *= k;

    // Außerdem sollte man noch eine Maximalgeschwindigkeit angeben,
    // da die Geschwindigkeit sonst zu groß werden kann.
    const float maxvel = 100;
    if (v.x > maxvel)
    {
        v.x = maxvel;
    }
    if (v.x < -maxvel)
    {
        v.x = -maxvel;
    }

    // Sprite bewegen
    mSprite.move(v.x, v.y);

    dT.Zero;
    a.x = 0;    // Beschleunigung auf NULL setzen, falls nichts gedrückt wird.
    a.y = 0;    // Beschleunigung auf NULL setzen, falls nichts gedrückt wird.

#pragma endregion CheckKeyborad


Ich hänge gerade irgendwie :pillepalle:

50

31.10.2015, 20:33

Ich habe nochmal alles langsam und Schritt für Schritt mit dem Debugger analysiert, aber irgendwie finde ich nicht den Fehler


OK Probieren wir es mal Anders...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
 // time ist in PlayState.cpp als sf::Time deklariert
    time = clock.getElapsedTime();

    // time ist hier 0.5 sek groß
    mPlayer->Update(time);
    // wie groß ist time nach Update Version 1 und wie groß ist time nach Update Version 2
   // Update Version 1: time = ???
   // Update Version 2: time = ???



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
//
// hpp 
//

// Update Version 1
void Update(sf::Time& dt);
// update Version 2
void Update(sf::Time dt);

//
// cpp
//

// Update Version 1
void Update(sf::Time& dt)
{
    dt.Zero;
}

// Update Version 2
void Update(sf::Time dt)
{
    dt.Zero;
}


Kannst du mir Beantworten wie groß time beim update aufruf von Version 1 und beim aufruf von Version 2 ist?
Und kannst du es vielleicht Begründen.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Werbeanzeige