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

TigerClaw25

unregistriert

11

13.11.2013, 17:18

Ich glaube,, dass ich mit dem einen Buch alleine nicht weiter komme. Und ich sollte mir das Thema noch einmal genauer anschauen. Vllt kommt dann alles mit der Zeit.

Eine kurze Frage noch zur Spieleentwicklung selbst. In einem Tutorial auf youtube werden Parameter für ein Sprite über den Konstruktor initialisiert. Im Buch aber wird eine Singletonklasse verwendet. Was iSt sinnvoller? Falls das überhaupt eine Rolle spielt.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TigerClaw25« (13.11.2013, 18:48)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

12

13.11.2013, 19:50

Singleton ist bei sowas nie sinnvoll. Singletons werden in fast 100% der Fälle aus Faulheit gebraucht. Man verschleiert damit globale Variablen. Das macht das ganze nicht besser, also lass das lieber sein. Die Variante mit dem Konstruktor ist um einiges besser. Und ja, Zeiger wirken am Anfang vielleicht ein wenig verwirrend, aber ließ dir die Kapitel im Buch noch mal genauer durch und lass alles mal in Ruhe sacken.
„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.“

TigerClaw25

unregistriert

13

13.11.2013, 20:11

Ok danke, werde ich machen. Eventuell mache ich es wie im youtube SDL 2 Tutorial, wo ersteinmal das Grundgerüst in der Mainfunktion programmiert und und dann nach und nach alles in Klassenaufgeteilt und erweitert wird. Das ist etwas sinnvoller.

TigerClaw25

unregistriert

14

15.11.2013, 20:48

Hallo nochmal,

ich hätte eine allgemeine Frage zum Thema Spieleprogrammierung. Auf Youtube wird beispielsweise nur eine Main.h und main.cpp verwendet und Werte wie Displaygröße etc. über den Konstruktor als Parameter übergeben. Im Buch SDL Game Development verwendet man beispielsweise eine Klasse CGame, in der es unter anderem eine Init-Funktion dafür gibt. Welche Lösung ist nun am geeignesten?

Oder anders gefragt. Ist es anfangs ratsam sich eine gewisse Struktur anzueignen und auf Basis dieser das Spiel dann weiter zu entwickeln? Für mich wäre es anfangs einfacher, wenn ich ein fertiges Spiel habe, dass ich weiterentwickeln kann bzw. mir ein gewisses Grundgerüst auf Basis dieses Spiels schaffe, das ich für weitere Spiele verwenden kann?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

15

15.11.2013, 21:16

Konstruktoren. Ganz klar. Init Funktionen stammen noch aus C Uralt Zeiten. Konstruktoren haben ja den Sinn, dein Objekt in einen gültigen Status zu versetzen, also benutze sie. ;)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

TigerClaw25

unregistriert

16

15.11.2013, 21:23

Das dumme ist nur, dass beispielsweise das Buch SDL Game Development (für SDL 2.0) mit Init-Funktionen arbeitet, zumindest was die Initialisierung der SDL angeht. Das dürfte aber soweit in Ordnung gehen. Die Funktion soll ja für die Hauptschleife im Spiel ein bool-Wert zurück liefern.

Mit geht es sowieso eher darum, die Entwicklung nachzuverfolgen bzw. nachzulesen und dann um neue Funktionen zu erweitern. Übrigens hier das Spiel, das im Buch entwickelt wird: http://www.youtube.com/watch?v=-S1h-X1IZuM

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

16.11.2013, 09:25

Warum liefert die Hauptschleife einen bool-Wert zurück? Ich wüsste nicht, was "Hauptschleifen" berechnen oder zurückgeben sollten. Ich weiß auch nicht so genau was Konstruktoren oder Init-Funktionen jetzt mit dem ominösen bool des GameLoops zu tun haben. Kannst Du vielleicht etwas mehr Licht auf die Dinge werfen, die Du anschneidest ohne den Kontext zu benennen?
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]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (16.11.2013, 09:30)


TigerClaw25

unregistriert

18

16.11.2013, 10:10

Mit Funktion meinte ich die Init-Funktion, die einen bool-Wert zurückliefert, um zu prüfen, ob die Schleife weiter laufen soll oder eben nicht.

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
bool CGame::Init(const char *title, int xpos, int ypos, int height, int width, int flags)
{
    // initialize SDL
    if(SDL_Init(SDL_INIT_EVERYTHING) == 0)
    {
        std::cout << " SDL init success! ";
        // if succeeded create a window
        m_pWindow = SDL_CreateWindow(title, xpos, ypos,height, width,flags);

        // if the window creation succeeded create our renderer
        if (m_pWindow != 0)
        {
            std::cout << "window creation success\n";
            m_pRenderer = SDL_CreateRenderer(m_pWindow, -1, 0);
            
            if(m_pRenderer != 0) // renderer init success
            {
                std::cout << "renderer creation success\n";
                SDL_SetRenderDrawColor(m_pRenderer, 255, 255, 255, 255);
            }
            else
            {
                std::cout << "renderer init fail\n";
                return false; // renderer init fail
            }
        }
        else
        {
            std::cout << "window init fail\n";
            return false; // window init fail
        }
    }
    else
    {
        std::cout << "SDL init fail\n";
        return false; // SDL init fail
    }

    std::cout << "init success\n";
    m_bRunning = true; // everything inited successfully, start the main loop

    // Textur zeichnen, kann auch ohne SDL_Surface geladen werden
    SDL_Surface* pTempSurface = IMG_Load("animate-alpha.png");      // SDL_LoadBMP gibt eine Zeiger auf ein SDL_Surface.Objekt zurück
    m_pTexture = SDL_CreateTextureFromSurface(m_pRenderer, pTempSurface);
    SDL_FreeSurface(pTempSurface);      // Temporäre Surface wieder freigeben
    
    //SDL_QueryTexture(m_pTexture, NULL, NULL, &m_sourceRectangle.w, &m_sourceRectangle.h);
    //SDL_SetRenderDrawColor(m_pRenderer, 255,0,0,255);
    SDL_SetRenderDrawColor(m_pRenderer, 255,0,0,255);
    m_sourceRectangle.w = 128;
    m_sourceRectangle.h = 82;

    m_destinationRectangle.x = m_sourceRectangle.x = 0;
    m_destinationRectangle.y = m_sourceRectangle.y = 0;
    m_destinationRectangle.w = m_sourceRectangle.w;
    m_destinationRectangle.h = m_sourceRectangle.h;

    return true;    
}


Liefert ein bool-Wert zurück. Dieser wird dann verwendet, um die Gameloop laufen zu lassen: while (g_game->Running()) {}

Das meinte ich damit. es ist schwierig, da jeder eine andere Art hat den Code zu programmieren. Beispielsweise muss man mit SDL 2.0 keine SDL-Surfaces mehr verwenden. Man kann einfach über die SDL_Texture ein Bild laden. In dem Buch SDL Game Development wird aber trotzdem ein zeiger auf ein SDL_Surfaces Objekt verwendet und dann per SDL_CreateTextureFromSurface eine Texture daraus erstellt. Denn Sinn verstehe ich zwar nicht, aber ist etwas verwirrend und zusätzler Code auch.

Ein weiteres Beispiel ist m_sourceRectangle.x = 128 * int(((SDL_GetTicks() / 100) % 6)); mit dem ein Bild animiert wird. Ich kenne es auch dem SDl Buch von >Kalista eben ganz anders. Das finde ich verwirrend.

Daher meine Frage, ob es sinnvoll ist erst einmal ein Buch durchzuarbeiten und sich dann eine gewisse Struktur anzueignen. Diese könnte man dann unter Umständen etwas anpassen und für zukünftige Projekte verwenden. Ich meine, die Gamestates oder die Events bleiben an sich immer gleich. Daher wäre meine Idee ein gewisses Grundgerüst aufzubauen. Initialisierung der SDL bleibt ebenfalls gleich oder das animieren von Sprites.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TigerClaw25« (16.11.2013, 10:16)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

19

16.11.2013, 11:15

Boolean-Werte für Fehler-Erkennung zu benutzen ist sowas von 1990 oder C. In C++ geht man davon aus, dass ein Konstruktor (der ja Deine Init-Methode ersetzt) korrekt ausgeführt wird. Ist dies nicht der Fall, weil irgendwas schief läuft, was im Normalfall nicht schief laufen sollte, so wirft man eine Exception. Man gibt aber keinen boolean zurück - was in Konstruktoren ohnehin nicht möglich ist.
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]

TigerClaw25

unregistriert

20

16.11.2013, 11:39

Ja, aber anfangs muss man sich nach eine Schema F richten. Wenn ich das Buch durch habe, kann ich es immer noch modifizieren ... :-) verstehe aber nicht, warum viele Neue Bücher immer noch Singletons etc behandelt.

Was du meinst ist mit try und catch waehrend der deklaration einer Instanz oder?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TigerClaw25« (16.11.2013, 11:46)


Werbeanzeige