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

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

21

16.12.2011, 23:55

Ja ich werde mich jetzt intensiv mit dem Problem auseinander setzen, danke an alle die geholfen haben.ich hab eine Kollisionsprüfung,
aber die habe ich aus der sfml.org seite meine ich , das ist die mit pixelperfectest etc.
Allerdings finet die nur beim Button menü.
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

22

16.12.2011, 23:57

Es wäre auch gut möglich, dass du Ressurcen lädst ohne es zu bemerken. Zum Beisiel im Konstruktor eines Spielobjektes, wird jedes mal die Bilddatei neu geladen. Wenn durch irgendeinen Zufall dann mal 10 Objekte auf einmal erstellt werden, hängt es halt, weil es nachladen muss.


Soviel ich weiß wird der Konstruktor nur 1x aufgerufen , undzwar wenn man das Objekt erstellt, und so lade ich auch meine Bilder. Ist doch theoretisch der beste weg wenn man sich keinen Imageloader etc. gebastelt hat oder?


Sry wegen den 2 Posts hintereinander.
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

23

17.12.2011, 00:46

Klar, der Konstruktor wird nur ein mal aufgerufen, allerdings sollte dir im klaren sein, dass wenn für z.B. jedes Projektil die Textur neu lädst natürlich alles etwas langsamer wird.

24

17.12.2011, 01:27

Ja, man würde halt normalerweise das Bild genau 1 mal laden und dann jedem Spielobjekt eine Referenz (im Sprachübergreifenden Sinne) darauf geben. Solanges nicht jedes Spielobjekt andere Ressourcen hat, würde man immer versuchen, nichts doppelt im Speicher zu haben. Während dem Spielfluss Dateien zu laden ist generell nicht die beste Idee, weil die halt schonmal groß sein können und Festplatten vergleichsweise langsam sind. Dafür sind ja die Ladezeiten am Anfang da ;-)
Lieber dumm fragen, als dumm bleiben!

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

25

17.12.2011, 11:36

Ich hatte mir den Code nochmal angeschaut und festgestellt das jedes mal wenn ich die Funktion shoot aufrufe , eine neue Instanz von Shot erstellt wird und im Shot konstruktor ist das Bild laden drinne gewesen. Habs jetzt geändert aber die Laggs sind immernoch da. Hab natürlich auch nochmal überall nachgeschaut ob irgendwo anders das gleiche passiert dem ist aber nicht so^^
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

26

17.12.2011, 17:32

Dann pack mal bitte den ganzen Code in eine ZIP und wir können uns das anschauen.

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

27

18.12.2011, 01:26

http://www.loaditup.de/files/672714_pws2ypyrf8.zip

Und noch eine kleine Anmerkung:
Ich habe das Spiel am rechner von nem Kolegen gestartet der hatte keine Hänger sondern da stürzte das Spiel direkt ab.
Da stand etwas über Vektor und line 933, villt. hats damit etwas zutun?

Ich denke der Code wird viele sprachlos machen XD
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »FreezingEngine« (18.12.2011, 02:08)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

28

18.12.2011, 10:42

Schau 10 Sekunden in den Code und find schon etwas, was mich stört.
Werd mal ne Liste schreiben:

1. main.cpp Zeile 27: delete game->Manager;
Das ist nicht die Aufgabe der Mainfunktion, sie sollte nichtmal Zugriff drauf haben. Das Spiel sollte den Manager selbst freigeben.

2. Bei einem Konstruktoraufruf sollte man nie ein Prozess starten, der über fast die ganze Programmlaufzeit geht. Lass RunGame() lieber von der Mainfunktion und nicht vom Konstruktor von Game aufrufen.

3. Was bringt Zeile 178 in Game.cpp? Die kannst du löschen.

4. Du hast recht viele Formatierungsfehler, räum da mal auf.

5. Bei dir sind alle Member public? Kapsel deine Daten!

6. Zeile 70 Game.cpp: delete Manager->Games; Das gleiche wie in der ersten Bemerkung.

7. Die Methode DrawGame() macht mehr als ich von ihr erwartet habe. Gib ihr einen anderen Namen oder teile das Zeichnen und Updaten auf. Ich bin für letzteres.

8. Benutz Vectoren oder die Arrays aus der Boostbibliothek für deine Images.

9. StateManager.cpp ab Zeile 29: Wenn du mit Schleifen arbeiten kannst, dann tue es auch!

10. Versuch die Animation (der Buttons) in einer Klasse zu Kapseln. Das macht das ganze übersichtlicher und einfacher zu verwenden.

11. Brauchst du für Button-Cursor Kollision wirklich eine Pixelgenaue Kollision? Würde Punkt-Rechteck nicht reichen?

Gibt es noch keine Gegner?
Also ich find keinen Fehler ohne das Spiel auszuführen. Debugst du eigentlich mit der Debugversion? Ein Überlauf könnte die Ruckler evtl. auch erklären. Das würde auch erklären wieso es bei deinem Freund ein Absturz gegeben hat und bei dir nicht.
Ehrlich gesagt hab ich auch nicht wirklich lust weiter zu suchen. Du hast so viele Tipps aus den Büchern und von mir ignoriert um dir das Programmieren scheinbar! einfacher zu machen. Da ists kein Wunder, dass es irgendwann nichtmehr klappt. Trotzdem bist du in der Zeit, in der ich dich kenne besser geworden. Das merkt man auch am Code. Allerdings solltest du wirklich auf deinen Stil achten und dich ein bisschen belesen und vorallem darauf hören wenn man dir Tipps und Empfehlungen gibt.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

29

18.12.2011, 13:42

Mir ist auf dem 1. Blick aufgefallen, dass du das Konzept von Konstruktor und Destruktor nicht verstanden hast, was aber fatale Folgen haben kann. In dieser Beziehung sollte man in C++ ziemlich pingelig sein! Hier ein kleines Sps. wo es schon kracht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct KrachBoom {
    KrachBoom *ptr;
    KrachBoom() {
    }

    ~KrachBoom() {
        delete ptr;
    }
};

int main(int argc, char **argv) {
    KrachBoom *boom = new KrachBoom();
    delete boom;
   
    return 0;
}

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

30

18.12.2011, 15:51

Ist das den in ordnung so wie ich es mache in bezug auf die Pointer die ich in den Parameter öfters mal weiter gebe? oder gibts da elegantere Lösungen,
eventuell direkt im Konstruktor statt jede Funktion einzeln?

Achja und Danke für die ehrliche Kritik und die Hilfe die mir hier geboten wird und
Nachoman die Tipp & Tricks die du mir damals gegeben hast, da war ich nochnicht halb soweit um zu sagen ich verstehe das und kanns umsetzen.^^
Jetzt siehts da etwas anders aus.


EDIT:
Mit der Release Version des Spiels sind nur ruckler zu erkennen, keine hänger wie im debug^^
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »FreezingEngine« (18.12.2011, 22:19)


Werbeanzeige