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

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

1

12.02.2011, 17:21

[C++ & SDL] Spiel wird auf einmal enorm schnell?

hi @ all,

ich habe da ein kleines Problem mit meinem Spiel:
Ich wollte mir ein Pong schreiben und der Ball soll jedesmal links und rechts abprallen. Dies Funktioniert auch, doch wenn ich 20 Sekunden warte, dann wird das Spiel auf einmal enorm beschleunigt! Ich habe mir mal ein paar Werte ausgeben lassen ( x, y, Zeit und Kollisionen ) und ab ca. 20 Sekunden kommt dann sowas:



"Achtung, Bild konnte nicht geladen werden! Fehler: Out of memory
x: 310
y:
Zeit: 19.557 s
Kollisionen: 13"



Wisst ihr vielleicht, woran das liegt? Ich meine wieso geht denn der Speicher so schnell verloren? Hier mal mein Code: http://codepad.org/v7ZLqJsc

Das sind ja Memory leaks aber wie kommen sie bei mir zustande? =(


Hoffentlich könnt ihr mir helfen!

Mit freundlichen Grüßen




Jawaiica'
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

2

12.02.2011, 17:27

worüber wunderst du dich?
du lädst die bilder jedes frame neu und gibst sie nicht wieder frei und du multiplizierst die bewegung nicht mit der frametime.
"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?

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

3

12.02.2011, 17:29

Du lädst in deiner while Schleife immer wieder jeden Frame deine Bilder, noch dazu setzt du in jedem Schleifendurchgang den Videomodus.

Ich glaube das wäre schon mal dein erstes und gravierendstes Problem.

4

12.02.2011, 17:29

Du laedst staendig das Hintergrundbild rein.

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

5

12.02.2011, 17:31

oh. haha :D ja gut stimmt klar^^ Danke. Ich hatte vorher nen Programm mit bewegtem Hintergrund und deswegen hab ich da immer weiter gemacht -.-' Aber das brauch ich ja jetzt gar nicht :D danke schön :)
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

botlin

Treue Seele

Beiträge: 139

Wohnort: Berlin

Beruf: Fachinformatiker für Anwendungsentwicklung, Student Internationale Medieninformatik

  • Private Nachricht senden

6

12.02.2011, 18:47

Ja sowas ist lustig ^^ : Hatte ich auch schonmal. Hab nur bemerkt das nach n paar Sekunden meinen Anwendung anfing zu ruckeln wie verrückt hab dann mal in die Speicherauslastung gesehen und siehe da ein kleines Model mit 2 Texturen hat sich jedes mal neu angelegt ^^.
Vorkurzem hatte ich ein Problem mit meiner Maussteuerung alles lief ne Weile lang gut bis ich plötzlich beim feststellte das beim rotieren der Perspektive meine Anwendung ruckelte.
Was war das Problem?
Ich habe geprüft ob meine Maus in der Mitte der Anwendung liegt, wenn nicht habe ich die differenz des aktuellen Pixels zum mittigen pixel genommen und ihn auf meine Rotation gerechnet.
Dumm war nur das ich beim prüfen der Rotation geprüft habe ob x && y meiner Maus nicht in der Mitte liegen anstatt x||y :D.
Und da ich noch ein paar einstellungen an der Bildwiederhohlrate gemacht habe. und noch ein bisschen anderes Zeugs konnte ich den Fehler nicht wirklich schnell finden. :rolleyes:

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

7

13.02.2011, 01:07

hehe :) Ich hoffe mir passiert sowas nicht mehr ^^ Ich habe da mal wieder noch eine kleine Frage und zwar wollte ich nun die Punkte zählen lassen am oberen Spielrand. Dazu habe ich die TTF eingebunden und oben steht auch wunderbar "0" am Anfang. Meine Frage ist nun also:
Ich habe zwei Variablen erstellt, die die Punkte von den Spielern zählt und diese würde ich gerne ausgeben lassen mit der TTF, nur wie mache ich das? Ich habe weiß auch irgendwie gar nicht, wie ich da so rangehen soll...

Könnt ihr mir da weiter helfen?
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

8

13.02.2011, 01:35

C-/C++-Quelltext

1
2
3
4
5
6
7
SDL_Color sdl_fg = {0, 0, 0}; // Schwarz
TTF_FONT * font = font = TTF_OpenFont(deine schrift, Größe);
SDL_Surface text_surface = TTF_RenderText_Solid(
                   font
                   "Dein Text",
                   sdl_fg
                );

Musst halt eine Schrift laden, im ttf Format, und eine Größe noch angeben (also ganz normal zwischen 0 und 99, ich würde dir zu 12 - 14 raten). Und natürlich eine Farbe aussuchen ;)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Architekt« (13.02.2011, 11:07)


Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

9

13.02.2011, 11:23

naja den Teil hatte ich eigentlich schon aber trotzdem nochmal danke :) Was ich jetzt suche ist, dass sich die Zahlen verändern, ich also den Text ändern kann^^ Wenn der eine Spieler also einen Punkt macht, dann soll statt einer 0 eine 1 kommen. Weißt zu zufällig wie das geht?
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

10

13.02.2011, 11:45

Ganz einfach, du nimmst eine int Variable, speicherst ihren Wert in einer stringstream
Variable und gibst anschließend den Inhalt der stringstream Variable zurück.

So würde ich es machen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#include <sstream> 

//...
string IntToStr(int x)
{
    stringstream y;
    y << x;
    return y.str();
}


und dann musst du nur noch addieren:

C-/C++-Quelltext

1
2
3
4
5
SDL_Surface text_surface = TTF_RenderText_Solid(
                   font
                   "Dein Text: " + IntToStr(deinwert),
                   sdl_fg
                );


Mfg Jack

Edit: Oops, ich dachte die Funktion läuft über Strings. :wacko:

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Jack« (13.02.2011, 15:47)


Werbeanzeige