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

21

17.05.2017, 21:30

Du musst auf jeden Fall modernes C++ lernen. Die Benutzung von new und delete, NULL und C-Präfixen ist regelrecht obsolet.

Ach, ich denke, dass mein Wissen für so ein Spiel reicht.

Nein. Die genannten Dinge sind in C++ absolut wichtig. Zusammengefasst sind das u.A. folgende: RAII, Smartpointer und Movesemantik.

22

17.05.2017, 21:34

Gut, aber ich meine einfach, dass ich es mit meinem Wissen auch machen kann.

Danke für eure Antworten

23

17.05.2017, 21:41

Dein Wissen ist einfach veraltet. Es stammt aus Büchern, welche vor C++11 erschienen. Tu dir einen Gefallen und lerne modernes C++, wenn du nochmal mit C++ programmieren möchtest.

24

17.05.2017, 21:47

Ok, gut

(Ziemlich sturköpfig :) )

Aber ich programmiere ja trotzdem C++

25

17.05.2017, 21:49

Ja, sicher ist das C++, nur ist es mit C++11 sehr viel einfacher, sauber und fehlerfrei zu programmieren. Spart dir am Ende ne Menge an Debuggerei, siehe diesen Thread.

26

17.05.2017, 21:51

Ja, sicher ist das C++, nur ist es mit C++11 sehr viel einfacher, sauber und fehlerfrei zu programmieren. Spart dir am Ende ne Menge an Debuggerei, siehe diesen Thread.

Ok, danke nochmals!
:D

Ich tue mein bestes!

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

27

17.05.2017, 21:52

Er hat's verstanden. ;) Wenn er erstmal das Spiel machen will kann er sich dabei Stück für Stück immer noch damit beschäftigen. Learning by doing.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

28

17.05.2017, 21:53

Ich missioniere nunmal gerne ;)

29

18.05.2017, 14:38

Hallo, mal wieder! 8|

Ich habe es ausprobiert mit dem Konstruktor und Destruktor und das Programm funktioniert ja, ich habe auch CloseFont verwendet etc..
Doch es ändert sich leider nichts ?(

Irgendetwas bleibt bei mir unbemerkt, schätze ich...

30

18.05.2017, 14:45

Ich hoffe, ich habs richtig verstanden )) (Das mit dem modernen C++ lerne ich noch)):

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
// Text.cpp
//

#include "Text.hpp"

// Konstruktor
//
CText::CText (SDL_Renderer *renderer,
              const string &font_path,
              int font_size,
              const string &message_text,
              const SDL_Color &color)
{
    m_text_texture = loadFont(renderer, font_path, font_size, message_text, color);
    SDL_QueryTexture(m_text_texture, nullptr, nullptr, &m_text_rect.w, &m_text_rect.h);
}


// Destruktor
//
CText::~CText ()
{
    TTF_CloseFont (m_pFont);
    SDL_DestroyTexture(m_text_texture);
    m_text_texture = NULL;
    m_pFont = NULL;
}


void CText::display(int x, int y, SDL_Renderer *renderer)
{
    m_text_rect.x = x;
    m_text_rect.y = y;
    SDL_RenderCopy(renderer, m_text_texture, nullptr, &m_text_rect);
}


SDL_Texture *CText::loadFont(SDL_Renderer *renderer,
                             const string &font_path,
                             int font_size,
                             const string &message_text,
                             const SDL_Color &color)
{
    TTF_Font *m_pFont = TTF_OpenFont(font_path.c_str(), font_size);

    if (!m_pFont)
    {
        cout << "failed to load font!" << endl;
    }
    auto m_text_surface = TTF_RenderText_Solid (m_pFont, message_text.c_str(), color);
    if (!m_text_surface)
    {
        cout << "failed to load surface!" << endl;
    }
    if (!message_text.c_str())
    {
        cout << "failed to load message!" << endl;
    }
    auto text_texture = SDL_CreateTextureFromSurface(renderer, m_text_surface);
    if (!text_texture)
    {
        cout << "failed to load texture!" << endl;
    }
    SDL_FreeSurface (m_text_surface);
    return text_texture;
    SDL_DestroyTexture(text_texture);
}


Game.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Run
//
// Aufgabe: Der eigentliche "Herzschlag" des Spiels
//
void CGame::Run()
{
    
    char TextBuffer_Score[15];

    // 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 ();

        sprintf_s(TextBuffer_Score, "Score: %i", m_Score);
        m_pText = new CText(g_pFramework->GetRenderer(), "Schriftarten/comic.ttf", 50, TextBuffer_Score, { 0, 0, 0, 0 });

        // Gesammelte Bananas anzeigen
        

        // Erreichten Score anzeigen
        m_pText->display (1320, 15, g_pFramework->GetRenderer());
        
        if (m_pText != NULL)
        {
            delete m_pText;
            m_pText = NULL;
        }

        // 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 ();

    }

} // Run



Ach man, ich denke, ich habe etwas einfach nicht richtig verstanden )) :hmm:
Bitte holt mich aus diesem Problem raus, ich sitze schon viel zu lange daran :dash: :thumbsup:

Ah, und bitte sprecht nicht wieder vom modernen C++, ich möchte doch nur dieses Problem schnell lösen )). Keine Sorge, dass lerne ich danach ;) .

Danke für eure Hilfe!

Max

Werbeanzeige