Spiel wird nach dem dritten Level langsamer
Übersicht

![]() |
KlipBetreff: Spiel wird nach dem dritten Level langsamer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Guten Tag,
es würde mich interessieren, wie ich mein Spiel schneller bekomme. Es handelt sich um einen Astro-Lander-Klon. Das erste und zweite Level laufen noch flüssig, doch ab dem dritten stockt der PC, obwohl dort nicht mehr berechnet wird als in den anderen Leveln. Ich vermute, dass es daran liegt, dass die alten Bilder, welche nun nicht mehr gebraucht werden, sich immer noch im Zwischenspeicher befinden. (Ich habe das Spiel in viele Functions unterteilt. die Technik funktioniert perfekt, nur die Geschwindigkeit ist halt langsam. Könnte auch an meinem function-Aufbau liegen, habt ihr Erfahrungen gemacht, dass viele Funktionen ein Spiel mekrlich verlangsamen? Es laufen allerdings nur 2 Stück gleichzeitig ab, jeweils die Funktion, welche die Steuerung des Spielers regelt, sowie eine, welche das Level darstellt, also die Map und den Spieler zeichnet.) EDIT: Das Spiel läuft noch weiter, allerdings rappelt der PC merklich lauter und die Reaktion auf Tastendrück verlangsamt sich. Kurz gesagt: Es stockt oder "laggt". |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Symtome könnten auf einen hohen Speicherverbrauch deuten. Wenn du WinXP hast, dann drücke doch mal STRG+ALT+Enf, wenn es wieder stockt. Dann kannst du im Taskmanager unter Systemleistung deinen Speicherverbrauch kontrollieren.
Falls dieser immer weiter ansteigt und die Auslagerungsdatei immer größer wird, hast du vielleicht eine Grafik in einer Schleife geladen, oder erstellst sehr viele Variablen oder sonstwas. Ich glaube kaum, dass es an den Funktionen liegt. Ich weiss ja nicht, wie du "viele Funktionen" definierst, aber ich hatte damit noch nie Probleme, selbst mit rekursiven Funktionen nicht. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
Timo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wie du schon sagtest, es kann sein, dass du vielleicht bilder noch im Speicher hast, die allmählich den noch vorhandenen Grafikspeicher zu müllen. Bilder, die du nicht mehr brauchst, kannst du mit FreeImage aus dem Speicher entfehrnen | ||
![]() |
Klip |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Travis: Sowohl der Prozessor, als auch mein zugesicherter Speicher sind maßlos überlastet, leider. Variablen habe ich nicht zu viele. Klar, einige Bilder natürlich und einige Werte für Wind und Position von Spieler und Landezone. Ich denke nicht, dass es damit zusammenhängt.
Danke für die Bestätigung im Falle der Funktionen. @ Timo: Ich werde den FreeImage-Befehl ausprobieren, das Resultat editiere oder poste ich hier hinein. Danke für die Hilfe. Es handelt sich auch leider um mein erstes richtiges Spiele-Projekt, weswegen ich im analysieren "solcher" Fehler noch keine Übung habe. |
||
noir |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
zeig uns halt mal deinen code | ||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
eventuell ein Loadimage in der Hauptschleife für den dritten level?
Oder loadimmage in den functions bei jedem Aufruf. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
WEnn du mir deinen Code sendest, schaue ich mal nach. | ||
between angels and insects |
![]() |
Klip |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mit FreeImage hat leider nichts gebracht.
Ich habe mal probiert, den Code so gut wie es geht zu kommentieren. Damit ihr euch vorstellen könnt, wie das ganze dann aussieht, wenn es läuft, lade ich noch einen Screenshot nach. EDIT: Hier der Screenshot: http://img.photobucket.com/albums/v499/Klip/k.jpg Code: [AUSKLAPPEN] AppTitle "- K -" Graphics 640,480,16,2 SetBuffer BackBuffer() SetFont(LoadFont("Tahoma",90,1)) Locate 20,20 Color 215,0,0 Print "- K -" SetFont(LoadFont("Tahoma",70,1)) Locate 120,290 Color 255,255,255 Print "Lade..." ; Grafiken und Variablen laden Global raumschiff1 = LoadAnimImage("gfx/raumschiff1.png",40,40,0,10) ; Spieler Global hoehenanzeige = LoadImage("gfx/hohe.png") Global windanzeige = LoadImage("gfx/wind.png") Global landezone = LoadImage("gfx/landezone.png") ; Zielpunkt Global explosion = LoadImage("gfx/explosion.png") Global sfx_explosion = LoadSound("sfx/explosion.wav") Global map1 = LoadImage("gfx/map1.png") ; Level Global map2 = LoadImage("gfx/map2.png") Global map3 = LoadImage("gfx/map3.png") Global level = 1 ; Levelvariable Global r_frame = 0 ; Frame des Spielerbildes MaskImage raumschiff1,150,0,150 MaskImage hoehenanzeige,150,0,150 MaskImage windanzeige,150,0,150 MaskImage explosion,150,0,150 MaskImage map1,150,0,150 MaskImage map2,150,0,150 MaskImage map3,150,0,150 Global x# = 0 Global y# = 0 Global gravity# = 0.02 Global speed# = 0 Global wind = 0 Global lzx# = 0 Global lzy# = 0 Repeat ; Hauptschleife Select level Case 1 level1 Case 2 level2 Case 3 level3 Case 4 level4 End Select Until KeyHit(1) End ; Funktionen -------------------------- ############################################# Function steuerung() r_frame = 0 If KeyHit(1) End ; mit Esc Spiel beenden EndIf If KeyDown(200) r_frame = 1 gravity = gravity - 0.05 ; Nach oben EndIf If KeyDown(203) r_frame = 2 speed = speed - 0.01 ; Nach links EndIf If KeyDown(205) r_frame = 3 speed = speed + 0.01 ; Nach rechts EndIf If KeyDown(208) ; Nach unten r_frame = 4 gravity = gravity + 0.03 EndIf gravity = gravity + 0.009 ; Schwerkraft x = x + speed + wind y = y + gravity If x < -40 Or x > 660 Or y > 500 gameover ; Wenn man den Bildschirm seitwärts verlässt... : game over! EndIf If y < -20 DrawImage hoehenanzeige,x+20,10 ; Anzeige, wenn man den Bildschirm aufwärts verlässt EndIf If ImagesCollide(raumschiff1,x,y,r_frame,landezone,lzx,lzy,0) And speed<0.5 And speed>-0.5 And gravity<0.6 geschafft ; Kollision mit der Landezone EndIf DrawImage windanzeige,300,30 ; Windanzeige Locate 318,45 SetFont(LoadFont("Tahoma",14,1)) Color 255,220,255 Print wind ; -------------------------------------- Debug-Anzeige ---------------------- SetFont(LoadFont("Tahoma",14,1)) Color 255,220,255 Locate 40,400 Print "Schwerkraft: " + gravity Locate 40,420 Print "Geschwindigkeit: " + speed Locate 40,440 Print "Position: " + x + ", " + y End Function Function levelstart() ; Levelanzeige vor jedem Level FlushKeys Cls SetFont(LoadFont("Tahoma",30,1)) Locate 120,240 Color 255,220,255 Print "Level " + level + "!" SetFont(LoadFont("Tahoma",20,1)) Locate 120,290 Print "Taste drücken" WaitKey End Function Function level1() ; Das Level selbst FlushKeys x = 20.5 y = 20.5 wind = 0 speed = 0 gravity = 0.02 lzx = 107 lzy = 219 levelstart Repeat Cls TileImage map1,0,0 DrawImage landezone,lzx,lzy DrawImage raumschiff1,x,y,r_frame ; -------------------------------------------- Explosion bei Bodenberührung If ImagesCollide(raumschiff1,x,y,r_frame,map1,0,0,0) gameover EndIf steuerung Flip Until level <> 1 FreeImage map1 End Function Function level2() FlushKeys gravity = 0.02 speed = 0 x = 500.5 y = 120.5 wind = 0 lzx = 140 lzy = 97 levelstart Repeat Cls TileImage map2,0,0 DrawImage landezone,lzx,lzy DrawImage raumschiff1,x,y,r_frame ; -------------------------------------------- Explosion bei Bodenberührung If ImagesCollide(raumschiff1,x,y,r_frame,map2,0,0,0) gameover EndIf steuerung Flip Until level <> 2 FreeImage map2 End Function Function level3() FlushKeys gravity = 0.02 speed = 0 x = 12.5 y = 12.5 wind = 0 lzx = 542 lzy = 372 levelstart Repeat Cls TileImage map3,0,0 DrawImage landezone,lzx,lzy DrawImage raumschiff1,x,y,r_frame ; -------------------------------------------- Explosion bei Bodenberührung If ImagesCollide(raumschiff1,x,y,r_frame,map3,0,0,0) gameover EndIf steuerung Flip Until level <> 3 FreeImage map3 End Function Function level4() Cls Print "Das war's! Spiel geschafft ^^" Delay 2000 End End Function Function gameover() ; Bei Bodenkontakt oder zu schnellem Landen Explosion DrawImage explosion,x,y ; laden und Spiel beenden Flip blabla = PlaySound(sfx_explosion) Delay 500 Cls SetFont(LoadFont("Tahoma",30,1)) Locate 120,240 Color 255,220,255 Print "Versagt!" Delay 2000 End End Function Function geschafft() ; Bei erfüllten Levelbedingungen das nächste Level einleiten Delay 200 Cls SetFont(LoadFont("Tahoma",30,1)) Locate 100,140 Color 255,220,255 Print "Level " + level + " geschafft!" Delay 1000 level = level + 1 End Function Ich hoffe, der Code ist nicht zu ungeordnet. Je länger man das Spiel spielt, desto langsamer wird der Computer. Beendet man es nach dem ersten Level oder währenddessen, merkt man nichts, nach dem zweiten oder dritten Level verlangsamt es den PC jedoch gewaltig. Ich hoffe auf Hinweise, die mir helfen könnten. |
||
- Zuletzt bearbeitet von Klip am Do, Jan 13, 2005 17:15, insgesamt einmal bearbeitet
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kein Wunder:Code: [AUSKLAPPEN] SetFont(LoadFont("Tahoma",14,1)) Du hast das mehrmals im Code. Alles was ein Load oder Create beinhaltet verbraucht Speicher. Darum immer alles nur einmal laden und beliebig oft setzen, malen, was auch immer ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
kein Wunder!
SetFont(LoadFont("Tahoma",90,1)) = 5-10 MB Speicher, und so oft wie du das Aufrufst! Kleiner Tip: Code: [AUSKLAPPEN] Global Font_Tahoma_90=LoadFont("Tahoma",90,1) Global Font_Tahoma_30=LoadFont("Tahoma",30,1) Global Font_Tahoma_20=LoadFont("Tahoma",20,1) Global Font_Tahoma_18=LoadFont("Tahoma",18,1) SetFont(Font_Tahoma_90) DAs dürfte dein Problem lösen. |
||
between angels and insects |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
1.
deine Loadfont Routine steht in der Steuerung drin, das wird der wunde Punkt sein, da es immer wieder geladen wird! Lade diese am Anfang Global in eine Var Code: [AUSKLAPPEN] Global Font90 = LoadFont("Tahoma",90,1)
Global Font70 = LoadFont("Tahoma",70,1) ... und dann nur noch Code: [AUSKLAPPEN] setfont font90 usw
2. anstatt Locate und Print benutze Text 123,123,"TEXT" 3. Erst alles andere abfragen , bzw ausschliesen bevor diese ImageColli abfrage ausgefüht wird!Code: [AUSKLAPPEN] If speed < 0.5 Then
If speed > - 0.5 Then If gravity < 0.6 Then If ImagesCollide (raumschiff1,x,y,r_frame,landezone,lzx,lzy,0) Then geschafft ; Kollision mit der Landezone EndIf EndIf EndIf EndIf Wer viel schreibt kommt auch zu Spät! ![]() |
||
[BB2D | BB3D | BB+]
|
![]() |
Klip |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das funktioniert perfekt.
Vielen Dank für die Hilfe. Ich hätte nicht gedacht, dass ein einfaches Schriftsetzen so viel Speicher verbraucht. EDIT: @ Rallimen: Ich werde nachher die If-Schachtelung auch noch probieren, sowie "Text" verwenden, danke. |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
die einzene Schrift nicht, aber wenn du diese 60 mal, oder mehr, pro sekunde ladest kommen da schnell viele MB´s zusammen! | ||
[BB2D | BB3D | BB+]
|
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jan_ reicht Hubsi und RAlimen einen Keks und setzt sich auf die zufrieden Kautsch. | ||
between angels and insects |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
*knurps* Danke ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group