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

23.11.2009, 15:09

Performance Frage zur Move-Funktion

Hallöchen!
Ich komm mal direkt auf den Punkt.
Mir kommt es so vor als ignoriert mein Programm manche Eingaben.
Stimmt vielleicht etwas mit der Performance nicht?

Hier mal der 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
tbResult CGame::Move(float fTime)
{
    if(m_bWon == true || m_bPcWon == true) 
    {
        if(g_pbButtons[TB_KEY_ESCAPE] ||g_pbButtons[TB_KEY_RETURN] || g_pbButtons[TB_KEY_SPACE]) g_pTicTacToe->SetGameStat(GS_MAINMENU);
        tbDelay(100);
        return TB_OK;
    }
    //Pause Taste

    if(g_pbButtons[TB_KEY_P]) m_bBreak = !m_bBreak; tbDelay(100);
    if(m_bBreak == true)  return TB_OK;
    //Bewegungstasten

    if(g_pbButtons[TB_KEY_UP]) m_iCursor -= 3; tbDelay(20);
    if(g_pbButtons[TB_KEY_DOWN]) m_iCursor += 3; tbDelay(20);
    if(g_pbButtons[TB_KEY_LEFT]) m_iCursor--; tbDelay(20);
    if(g_pbButtons[TB_KEY_RIGHT]) m_iCursor++; tbDelay(20);
    //Den Cursor in die Schranken weisen

    if(m_iCursor > 8) m_iCursor = 8;
    if(m_iCursor < 0) m_iCursor = 0;

    //Auswahl

    if(m_bIsPlayerTurn == true)
    {
    if(g_pbButtons[TB_KEY_RETURN] || g_pbButtons[TB_KEY_SPACE])
    { 
        if(m_iBlockStatus[m_iCursor] == 0)
        {
        m_iBlockStatus[m_iCursor] = 1;
        m_bIsPlayerTurn = false;
        }
    }
    }
    else
    {
        PcTurn();
        m_bIsPlayerTurn = true;
    }
    if(g_pbButtons[TB_KEY_ESCAPE]) g_pTicTacToe->SetGameStat(GS_MAINMENU);
    return TB_OK;
}

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

23.11.2009, 15:20

Also ich weis jetzt net ganz genau was tbDelay() tut aber wenn es das is was ich denke dann find ich diese Aufrufe sehr seltsam...

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

3

23.11.2009, 15:48

Es ist zwar von der Sprache her nicht nötig, aber der Übersicht halber sollte man zu jedem if auch ein Klammerpaar setzen.

4

23.11.2009, 16:04

@K-Bal: Danke für den Tipp ;)
@dot: tbDelay() ruft die Sleep()-Methode auf. In dem Buch bin ich
gerade erst mit dem ersten Spiel fertig und in dem ersten Spiel
wurde das auch so gemacht, in der Hoffnung, dass der Spieler die Taste
in diesen Zeitraum wieder los lässt. Aber, wie ich heute gesehen habe,
wird das 2. Spiel da Abhilfe schaffen.

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

5

23.11.2009, 16:29

Willst du wirklich jedes mal in der Move-Funktion ~180 ms warten? Damit erzielst du immerhin eine maximale Framerate von 5.556 fps...

Meinst du nicht auch das hier klammern sinnvoll wären?

C-/C++-Quelltext

1
if(g_pbButtons[TB_KEY_P]){/*add*/ m_bBreak = !m_bBreak; tbDelay(100); } /*add*/
Signaturen werden überbewertet

6

23.11.2009, 16:43

Ui...jetzt bin ich ganz eurer Meinung.
Mit den Klammern geht's viel besser.
Danke für die sehr gute Erklärung ;)

mfg

Werbeanzeige