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

41

18.05.2017, 17:49

Danke für die Antworten, aber ich denke, ich werde einfach komplett CText umändern oder so )).

Und außerdem stimme ich dir zu, dass das chaotisch ist, aber keine Sorge, der restliche Code ist eigentlich ganz Ok :thumbsup:

Ich schau mir andere Tutorials an ))

42

19.05.2017, 16:46

Hallo schon wieder!

Ich habe die ganze Klasse CText entfernt und es auf sehr einfache und verkürzte Weise in Game::Run implementiert und es hat endlich geklappt! :thumbsup: :thumbup: 8o

Diese ganzen Videotutorials haben das einfach so komisch erklärt, aber ich habe nun versucht, alles selbständig zu schreiben.

Danke für alle eure Antworten!
(Smart pointer sind wirklich eine tolle Sache )) :thumbup: )

Max (Hannibal_TheHacker)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

43

19.05.2017, 16:48

Magst du uns deinen neuen Code zeigen? Bin sicher, dass wir dir da auch noch ein paar Tipps geben können.

44

19.05.2017, 18:01

Magst du uns deinen neuen Code zeigen? Bin sicher, dass wir dir da auch noch ein paar Tipps geben können.

:thumbsup:
Seid nicht böse zu mir, aber
1. Ich könnte wirklich den Code besser machen, also das mit dem Text ist ziemlich chaotisch )) (Ihr könnt natürlich weiter Tipps geben).
2. Ich habe Smart Pointer noch in keinster Art benutzt (dort hat man eigentlich überhaupt keine Pointer benötigt), aber ich habe mich schon ein wenig damit beschäftigt.
3. Ich habe den C-Array noch nicht geändert, werde ich aber wahrscheinlich noch tun.

Außerdem habe ich noch Bananas hinzugefügt.

So, hier Game::Run

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Run
//
// Aufgabe: Der eigentliche "Herzschlag" des Spiels
//
void CGame::Run()
{
    
    // Ein paar TTF Vorbereitungen
    //

    // Textbuffer für Umwandlung von sprintf_s
    char TextBuffer[38];
    
    // Score
    TTF_Font *Font_Score = TTF_OpenFont("Schriftarten/comic.ttf", 50);
    SDL_Rect Score_Rect;
    Score_Rect.h = NULL;
    Score_Rect.w = NULL;
    Score_Rect.x = 1630;
    Score_Rect.y = 20;

    // Bananas
    TTF_Font *Font_Bananas = TTF_OpenFont("Schriftarten/comic.ttf", 40);
    SDL_Rect Bananas_Rect;
    Bananas_Rect.h = NULL;
    Bananas_Rect.w = NULL;
    Bananas_Rect.x = 1300;
    Bananas_Rect.y = 20;


    // Die "Herzschlag"-Schleife
    while (m_bGameRun == true)
    {

        // Hauptmenü aufrufen, falls noch aktiv
        if (m_bMenu == true)
        {
            Menu ();
        } // Menu

        
        // Framework updaten und Buffer löschen
        g_pFramework->Update ();
        g_pFramework->Clear  ();

        // Events überprüfen
        ProcessEvents ();

        // Hintergrundbild rendern
        m_pSpriteGame->Render ();

        // Spieler updaten und rendern
        m_pPlayer->Update ();
        m_pPlayer->Render ();

        // Neue Bananas hinzufügen
        SpawnBananas ();

        // Kollisionen überprüfen
        CheckCollisions ();

        // Bananas rendern
        RenderBananas ();
        
        // Message und Texture
        SDL_Surface *message = NULL;
        SDL_Texture *Texture = NULL;


        // Erreichten Score anzeigen
        sprintf_s(TextBuffer, "Score: %i", m_Score);
        message = TTF_RenderText_Blended(Font_Score, TextBuffer, { 0, 0, 0, 0 });
        Texture = SDL_CreateTextureFromSurface(g_pFramework->GetRenderer(), message);
        SDL_QueryTexture(Texture, nullptr, nullptr, &Score_Rect.w, &Score_Rect.h);
        SDL_RenderCopy(g_pFramework->GetRenderer(), Texture, NULL, &Score_Rect);

        // Texture und Surface löschen
        SDL_DestroyTexture(Texture);
        SDL_FreeSurface(message);

        // Erreichte Bananas anzeigen
        sprintf_s(TextBuffer, "Bananas: %i", m_Bananas);
        message = TTF_RenderText_Blended(Font_Bananas, TextBuffer, { 0, 0, 0, 0 });
        Texture = SDL_CreateTextureFromSurface(g_pFramework->GetRenderer(), message);
        SDL_QueryTexture(Texture, nullptr, nullptr, &Bananas_Rect.w, &Bananas_Rect.h);
        SDL_RenderCopy(g_pFramework->GetRenderer(), Texture, NULL, &Bananas_Rect);

        // Texture und Surface löschen
        SDL_DestroyTexture (Texture);
        SDL_FreeSurface (message);
        

        // Falls 'H' gedrückt wird, zum Hauptmenü
        // zurückkehren und Spielerstand zurücksetzen
        if (g_pFramework->KeyDown(SDL_SCANCODE_H))
            m_bMenu = true;


        // Spiel darstellen
        g_pFramework->Render ();

    }

    // Fonts schließen
    TTF_CloseFont(Font_Score);
    TTF_CloseFont(Font_Bananas);


} // Run

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Hannibal_TheHacker« (19.05.2017, 18:19)


45

19.05.2017, 18:04

Man könnte dies eigentlich ganz gut in eine Funktion schreiben und diese dann immer ordentlich aufrufen, doch viel mehr Text wird es im Spiel nicht geben )).

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

46

19.05.2017, 18:07

Die Kommentare sind irgendwie ziemlich überflüssig, meinst du nicht? ;) Ich meine sowas wie "// Bananas rendern" direkt über der Zeile "RenderBananas();". Da steht doch in beiden Zeilen dasselbe, aber nur die zweite tut was.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

47

19.05.2017, 18:08

Die Kommentare sind irgendwie ziemlich überflüssig, meinst du nicht? ;) Ich meine sowas wie "// Bananas rendern" direkt über der Zeile "RenderBananas();". Da steht doch in beiden Zeilen dasselbe, aber nur die zweite tut was.

:D :D
Irgendwie haste Recht )), aber das ist nur zur Übung, weil das mein erstes Spiel ist und zum ersten mal tolle Resultate sehen kann ^^

48

19.05.2017, 18:10

Außerdem hat mich Heiko Kalistas Buch daran gewöhnt, überall Kommentare zu schreiben )).

Ich versuchs dat net mehr zu machen, ich versuchs... :D

(Ne, Spaß, irgendwie hilft es mir, mich im Code zu orientieren, wenn ich fast überall Kommentare schreibe.)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

49

19.05.2017, 18:28

Is nich schön. Versuch dich lieber an's Code Lesen an sich zu gewöhnen. Kommentare vergisst man zusätzlich nämlich gern mal zu aktualisieren, wenn man was ändert, Code hingegen ist immer genau das, was am Ende auch wirklich ausgeführt wird. Die Kommentare in Heikos Buch stellen Erklärungen für den Neuneinsteiger dar, aber viele deiner Kommentare da erfüllen effektiv gar keinen Zweck.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

50

19.05.2017, 18:41

Is nich schön. Versuch dich lieber an's Code Lesen an sich zu gewöhnen. Kommentare vergisst man zusätzlich nämlich gern mal zu aktualisieren, wenn man was ändert, Code hingegen ist immer genau das, was am Ende auch wirklich ausgeführt wird. Die Kommentare in Heikos Buch stellen Erklärungen für den Neuneinsteiger dar, aber viele deiner Kommentare da erfüllen effektiv gar keinen Zweck.

Ja, ja ist klar, danke )).

Ich werde diesen Zweck erfüllen! :thumbsup: :D

Danke nochmals, ich probiere, mit den Kommentaren nicht mehr so zu übertreiben.

Werbeanzeige