Kurze frage zu einem Spielprogramier problem

Mach mal ein sizeof(Klasse unbew. Objekt) und lass dir das ausgeben. Dann weißt du, wie groß ein einzelnes Objekt ist.

Code:
class MyClass
{
};

// ...
size_t clsize = sizeof(MyClass);
 
Der Vorteil einer guten Engine ist, dass sie sich sowol in Spiele als auch in Simulationen intigrieren lässt.

Naja, eigentlich nicht. Eine Simulation muss vor allem exakt sein, für eine Spieleengine dagegen reicht es aus wenn die Ergebnisse realistisch aussehen.

Das ist deswegen wichtig, weil man bei Simulationen die Schrittweite oft dynamisch anpasst, z.B. um die Genauigkeit der Kollisionserkennung zu erhöhen.
 
Mach mal ein sizeof(Klasse unbew. Objekt) und lass dir das ausgeben. Dann weißt du, wie groß ein einzelnes Objekt ist.

Code:
class MyClass
{
};

// ...
size_t clsize = sizeof(MyClass);

Das werde ich Morgen machen und das Ergebnis hier posten, da ich bereits um 5 Uhr aufstehen darf, muss ich jetzt off gehen.
@Laudian
Gerade wenn die Engine gut ist, hat man Dynamische Klassen, die nur genutzte Variablen anlegen, somit kommt man bei Spielen auf "Es sieht gut aus und braucht wenig Leistung" und bei Simulationen "Das ist recht genau berechnet", im 2. Fall natürlich unter Einsatz von mehr Resourccen.
 
Die wenigsten Spiele haben ein Problem mit der Memory Wall (speicherlimitiert), da gibt es vorher andere Probleme. Jedenfalls ist mir nicht ganz klar, was du mit "dynamische Klassen" meinst, meines Wissens sieht eine Klasse in C++ so aus wie sie zur Compilezeit definiert wurde (und sobald eine Variable da ist belegt sie auch Speicher, ob man sie nutzt oder nicht).
 
Hallo,
ich habe mir nun einen eigenen Account gemacht, damit nicht alles über meinen Bruder läuft.


Mit dynmischen Klassen, meine ich eher das verwenden von std::vektor und anderen dynamischen Speichern


Mit freundlichen Grüßen
Supercomputer
 
Das wären dann eher dynamische Datenstrukturen. Also Objekte die während der Laufzeit dynamisch Speicher anfordern und auch wieder freigeben können. Klassen beschreiben eigentlich nur Objekte. Wie gut sind denn deine C++ Kenntnisse hinsichtlich Vererbung und Polymorphie? So etwas ist eigentlich bei so einem Projekt unerlässlich.
 
Zur Thema Vererbung und Polymorphie bestehen Grundkenntnisse, die jedoch erweitert werden.

Heißt es auch dynamische Datenstruktur, wenn die Klassen durch Templates erst zum Einsatz kommen, wenn sie gebraucht werden?
 
Zur Thema Vererbung und Polymorphie bestehen Grundkenntnisse, die jedoch erweitert werden.

Heißt es auch dynamische Datenstruktur, wenn die Klassen durch Templates erst zum Einsatz kommen, wenn sie gebraucht werden?
Templates werden nicht zur Laufzeit generiert, das passiert beim Kompilieren. Dynamische Datenstrukturen werden zur Laufzeit angelegt.
 
Zuletzt bearbeitet:
Auf allen Systemen von uns ist Linux fest installiert und auf dem Netbook zu dem Windoof was nicht gerade häufig verwendet wird, mein Bruder hat auf der Seite von dem Programm nur downloads für Windoof 32 Bit /64 Bit gefunden
 
Aktuell nutze ich von der Softwareverwaltung direkt ein Programm, trägt den Namen Umbrello und macht einen recht guten Eindruck.
 
Beliebige Wurzeln zieht man mit der "pow()"-Funktion zum Potenzieren (ebenfalls in der "math.h" enthalten), da "n-te Wurzel" identisch ist zu "hoch 1/n" :)

Ein Beispiel: Die 7-te Wurzel einer Zahl x erhalte ich in C++ mit "pow(x, 1/7.0)".

Das kannst du ja benutzen, um die Genauigkeit deiner eigenen Implementierung mal zu testen. Mich würde auch interessieren, welchen Algorithmus du zur Berechnung von Wurzeln benutzt. Das ist nämlich nicht gerade einfach, das genau und vor allem numerisch stabil (für alle Eingabewerte von klein bis groß) hinzukriegen.

Ich habe meine Funktion jetzt mal mit Quadratwurzel von 23 getestet, dabei kam folgendes heraus:

sqrt = 4.79583152331272
Meine Funktion = 4.7958315233127195415484267382311145

Bei anderen Exponenten zickt sie noch etwas, aber das ist nicht so schlimm, da ich nur die Quadratwurzel benötige. :D


Mit freundlichen Grüßen
Supercomputer
 
Ich kann es nur noch einmal wiederholen, für Simulation ok, für Spiele vollkommen uninteressant. Hast du mal die Laufzeit beider Funktionen gemessen? Das würde mich nämlich jetzt eher interessieren.
 
Die Laufzeit habe ich noch nicht gemessen, aber ich habe jetzt auch den size_t gemacht, es kam 304 raus.


Wie messe ich die Laufzeit einer Funktion?
Habe sowas noch nicht machen müssen.
 
Also: 304 Byte / Objekt * 500.000 Objekte = ca. 145 MB Daten

Laufzeitmessung ist leider Plattformabhängig. Unter Linux kannst du das so machen

Code:
#include <sys/time.h>

double get_time(void)
{
    struct timeval tv;
    gettimeofday(&tv, NULL);

    return (tv.tv_sec + (tv.tv_use * 1E-6));
}

void foo(void)
{
    double tstart, telapsed;

    tstart = get_time();
    /* Mach was */
    telapsed = get_time() - tstart;
    printf("Time: %f\n", telapsed);
}
Unter Windows geht das am besten mit QueryPerformaceCounter.
 
Zurück