Suchergebnisse
Suchergebnisse 1-20 von insgesamt 327.
So wie ich das verstanden hab ist der protected non-virtual dazu da damit man eben nicht die Klasse so über die Basis Klasse löschen kann, was vll in den meisten fällen nicht notwendig ist. Wenn man es aber doch versucht gibt es eine Compiler-Error und dann weis man "Ich sollte eine virtual D'tor benutzen". C-/C++-Quelltext 1 2 3 4 5 6 7 8 9 // dtor is virtual, deleten möglich FooException* foo_ptr = new FooException (1, "1 error"); FooBaseException* foo_base_ptr = dynamic_cast<FooException*>(fo...
Zitat von »dot« Nein; leider wird sehr oft gelehrt, dass eine Klasse, von der geerbt wird, einen virtuellen Destruktor haben sollte. Das ist allerdings nicht wirklich notwendig, potentiell performanceschädlich und imo als Bad Practise einzustufen. Ein virtueller Destruktor wird (wie das eben generell mit virtuellen Methoden so ist) nur dann benötigt, wenn auf irgendeine Art der Destruktor einer abgeleiteten Klasse über einen Basisklassenzeiger augerufen werden soll; z.B. weil ein Objekt einer a...
Zitat von »Evrey« Der Compiler fügt dann automatisch die Standard-Implementierung ein. Ist das gleiche, als würdest du virtual ~MyBaseObject() {} tippen, bloß dass default besser die Absicht vermittelt. Ja ich weis das der automatisch den dtor generiert, ich meinte nur das ich keinen dtor-custom schreibe um Speicher oder anderes zu löschen. Zitat von »Evrey« Zudem kannste nicht einfach eine virtuelle Funktion einer Basisklasse durch eine nicht-virtuelle ersetzen, wie du es in Foo tust! Ahh ok d...
Hallo, Es ist mal wieder eine bekannte Frage die immer wieder gestellt wird und ich die Antwort eigentlich kennen müsset. "Wann benutzt man ein virtual dtor?" Klar die BaseKlasse muss einen haben wenn diese von einer anderen Klasse geerbt wird, (oder nicht?) Ich benutzt NIE den dtor, sonder deklariere immer ein leeren virtual dtor. Kein new oder delete, alles über STL. Und da ist auch die Frage, "WO definiert ich den virtual dtor". Entweder im Header, ausgelagert in .cpp oder virtual ~dtor() = d...
Vll hab ich ja etwas überlesen. Aber wenn man mit Programmieren anfängt, würde ich jetzt erst mal in der Konsole verbleiben. Getreu den motto "Minimum viable product". Man kann sich dann viel mehr auf seine Klassen und Architektur konzentrieren (Stadt, BewohnerKlasse, GebäudeKlasse, ...) Die Logik kann man dann mit einfach Konsolenausgaben testen. Man könnte ja erstmal einfach anfangen: "Bewohner die etwas auf ein Feld platzieren und dann abernten" Nix mit Physik, Userinput, Grafik, Menüs, ... D...
Vll noch etwas als Empfehlung. Du kannst dir ja mal den http://google-styleguide.googlecode.com/svn/trunk/cppguide.html oder den http://llvm.org/docs/CodingStandards.html anschauen. Beides kannst du super mit http://clang.llvm.org/extra/clang-modernize.html und den http://clang.llvm.org/docs/ClangFormat.html nutzen und dein Code schön dadurch jagen und dann ist es schon mal einigermaßen "modernisiert" und formatiert. Ansosnten gibts es noch einige hübsche Talks zu C++11/14 bei der CppCon 2014 un...
Hmmm...mir gefällt das weiterleiten des Events nicht so. Du musst dann ja quasi sicher stellen das es auch durch alle Systeme durch geht und wenn du mal vergisst weiterzuleiten dann kriegen die anderen es vll nicht. So wie du dein Movement-Flag beschreiben hast schaft du dir Abhängigkeiten in den Systemen, denn einige Systeme müssen dann schauen "Lohnt es sich den Spieler zu bewegen wenn das flag schon false ist?, Wurde das Flag schon von den anderen System gesetzt?, oldvalue &= newvalue" Ich ha...
Also so auf die schnelle würde ich sagen... Reihenfolge der System würde ich jetzt auch sagen. LevelSystem AISystem ... InputSystem PhysicSystem MovementSystem Ich würde dann noch so was wie ein MoveComponenet haben mit isCollosionMovable( oder so) und der velocity. Die AI oder InputSystem setzt dann den Player in bewegung in dem es die velocity setzt/erhöht (0 = Stillstand). Das PhysicSystem kann dann eine "probe" Position berechnen mit der dann die Collision ermittelt wird, dann ein isCollosio...
Also wenn du alle Entitiys in ein Manager handelst dann hast du das Problem mit den redundanten Daten nicht. Der Manager beinhaltet dann noch die ganzen Systeme und die Events, welchen das Problem der abhänigkleit nimmt. Jedes System holt sich von den entitys immer nur die Componente es die gerade benötigt und kann wenn es nötig ist Events triggern. Durch die Events können dann die anderen System darauf reagieren. Das Animations-System braucht z.B. die Blickrichtung, kein Problem dann holt die d...
Falls du es in C++/C++11 machst, versuchst mit: https://github.com/alecthomas/entityx Nur so zum anschauen, es ist klein , Übersichtlich und paar Beispiel Projekte gibts auch.
Ich hab auch seit einiger Zeit mit ECS angefangen und hab auch so meine Probleme. Also ich würde das ganze noch in Map und RPG Components auf teilen. Und so paar Grunddaten wie Name. Die Systeme können sich dann ja die notwendigen Components raus nehmen. Map(Position, Sicht) + Graohics(Sprite, Anmation) fürs Rendern. Map + Body(Kollision, Matrix) für PhysiksSystem. Zudem kommt noch das später die System sich mit Events etwas untereinandern austauschen können. z.B. Trigggert das (Map)PhysikSystem...
Hi danke erst mal für die antworten. Also das Problem ist wie buggypixels schon gesagt hat das ich sehr OO denke. Und für mich sind die Objekte die Data, mit weiteren Data (Data in Data) wären das doch auch nur dependencies oder nicht? Mir ist die Trennung von Data und Algo noch schwer zu begreifen. Denn wenn ich die Data vom Algo trenne sieht es für mich mehr nach C also nach C++ aus. Ich weis auch das DOD einfach nur Data in Data transformieren ist, nur kann ich mir schwer vorstellen wie das a...
Ich wollte noch etwas zu Evreys ansatzt mit den shared_ptr sagen, wenn man das tut sollte man auch weak_ptr verwenden. Probleme kann es auch bei threads geben dann muss man gegebenenfalls den cache locken (was etwas unschön ist). Und man sollte wenn man mit shared_ptr arbeitet auch mit weak_ptr arbeiten um z.b. ein cycles vermeide (shared_ptr erhalten sich gegenseiten am leben). Mit expired() kann man auch z.b. die gültigkeit überprüfen ob irgetn jemand anders gerade die Texture verwendet(z.b. d...
Ok, danke Leute. Ich dachte es könnte vll nur später Probleme geben, wenn ich z.b. mit Tilemaps arbeite und dann so 100 Events und NPCs hab die dann geuppt werden. Hatte früher so meine Probleme damit. Aber dazu gibt es glaube gute Frameworks und Libs wie Tiled.
Was genau willst du den compilieren? Kannst dir dann ja die CMakeLists.txt etwas genauer anschauen. Unter Linux muss man z.b. die Develop-Libs installieren: sudo apt-get install libgee-0.8-dev In CMake ist es üblich das man wenn das Package bzw. die Lib (nicht) gefunden wird, dann wird eine Varable angezeigt. "...._LIBRARY-NOT-FOUND" oder "..._LIBRARY = /usr/lib/libgee-0.8.so" das ist dann meinst eine Path-Varable die du dann setzen kannst wo dann die gee-Library drin ist mit.
Hi Leute, Seit langer Zeit hab ich mich schon mit C++11, C++14 und weiteren beschäftigt, unzählige Video angeschaut und bin dabei auf DOD (Data-Oriented Design) gestoßen. Jetzt bin ich aber so ein eingefleischter OOP-Type und es fällt mir schwer mich in diese DOD-Welt reinzudenken da ich noch so Vorstellungen von Vererbung, dependencies und gekapselten Methoden hab. Ich hab wegen DOD jetzt mehr die Vorstellung: C-/C++-Quelltext 1 for(auto chara : charas) update(chara); ist "besser" als, C-/C++-Q...
Ja so in die Richtung hab ich auch gedacht. Hab mir schon mal überlegt damit ich nicht jetzt jede sec. updaten muss. kann ich die Zeit ermitteln oder Vorhersagen wann etwas passieren könnte. Das kann man dann als factor benutzt muss die Zeit zu beschleunigen. Dann darum noch eine while-Schleifen paken bis die aktuelle Zeit erreicht wurde. Aber was ist wenn jetzt wenn eine Kreature lange nicht mehr geupdatet wurde weil der User nicht on war oder es keiner besucht hat. Dann loggt sich der User irg...
@BG habs noch mal überarbeitet. Das mit den Timer ist ja nicht schwer und es macht auch nichts wenn es statt +1% erst später +5% angezeigt wird. Es geht mehr darum was passiert wenn es mal mehr als 50%, 100% oder über 100% kommt. Denn davon sind noch einige andere Dinge abhänig. Z.b. muss es auch von selber schlafen gehen wenn es müde ist. Und selbst auch wieder aufwachen. Jetzt wird es so sein das während es Schlafes z.b. der Hunger langsamer steigt. Oder wenn es Trainiert und ab einer bestimmt...
Hi Leute ich hab mal eine neue Richtung eingeschlagen und versuch mich in der Browsergame Welt. Ich bin noch ziemlich am Anfang meine Projektes aber mir stellen sich schon jetzt eine Fragen. Im Spiel soll es später darum gehen,ein User hat 1 Kreature und die kann er Füttern, trainieren, Schlafen schicken,,, und noch so typische RPG Sachen. Die Kreaturen müssen z.b. jede 10. sec aktualisiere werden. Was ist jetzt wenn ich 1000 User hab und ein update (mit Datenbank auslesen, updaten, schreiben......
Also im grunde versuch ich mir das Serializiren von Objecten zu vereinfachen. Entweder als Binary oder JSON. Dazu benutzt ich den std::stream oder die rapidjson Library. Und ich hab mir einige Funktionen geschreiben die mir die Klassen Member in den Format in den Stream schreiben/lesen. Und was ich dann ja machen müsste ist die Methoden für die Binary zu überschreiben und für das Json obwohl die Funktionen gleich auf gebaut sind. Und da die gleich aufgebaut sind wollte ich das mit Macros machen....