Warum stürzt dieser Code ab ?
Übersicht

Dirk KnoopBetreff: Warum stürzt dieser Code ab ? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
wenn ich folgendes Programm ausführe, läuft ca. 1 Stunde lang alles bestens. Danach stürzt das Programm ab. Wo liegt hier der Fehler ? Gruß, Dirk Knoop Code: [AUSKLAPPEN] Graphics 1024,768,32,1 SetBuffer BackBuffer() start=AvailVidMem() start1=TotalVidMem() .schleife aktuell=AvailVidMem() aktuell1=TotalVidMem() Cls Text 10,10,"Uhrzeit: "+CurrentTime$() Text 10,50,"Start: "+start Text 10,70,"Jetzt: "+aktuell Text 10,100,"Start: "+start1 Text 10,120,"Jetzt: "+aktuell1 Text 10,200,"Wie oft geladen: "+anzahl Flip If ChannelPlaying(ChannelID) = False FreeSound lied1:lied1=0 lied1=LoadSound("Musik/Lieder/lied1.mp3") ChannelID=PlaySound(lied1) EndIf If KeyHit(1)=1 Then End anzahl=anzahl+1 klickkurz=LoadSound ("Musik/Effekte/klickkurz.wav") sound_nachricht=LoadSound ("Musik/Effekte/nachricht.mp3") ereignis_ok_an=LoadImage("Bilder/Sonstiges/ereignisokan.png"):MaskImage ereignis_ok_an,1,125,255 ereignis_ja_an=LoadImage("Bilder/Sonstiges/ereignisjaan.png"):MaskImage ereignis_ja_an,1,125,255 PlaySound klickkurz Delay 1000 FreeSound klickkurz:klickkurz=0 FreeSound sound_nachricht_ok:sound_nachricht_ok=0 FreeImage ereignis_ok_an:ereignis_ok_an=0 FreeImage ereignis_ja_an:ereignis_ja_an=0 Goto schleife |
||
www.kostenloser-fussballmanager.de
www.discaim.de - weil Spaß kein Zufall ist www.torchance.de - ein etwas anderer Fußball-Manager |
![]() |
Artemis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, vielleicht ist der RAM nach so vielem Laden und Löschen derart fragmentiert, dass das Programm nichts mehr richtig reinschreiben kann und abstürtz? | ||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] sound_nachricht=LoadSound ("Musik/Effekte/nachricht.mp3")
Ok? FreeSound sound_nachricht_ok ![]() Wundert mich sowieso etwas das es überhaupt eine Stunde durchhält ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der Hauptfehler besteht darin, dass du überhaupt etwas in der Schleife lädst (von Goto abgesehen, dass man tunlichst meiden sollte. While / Repeat sind mit wenigen Ausnahmen vorzuziehen).
Media muss man vor der Hauptschleife laden und dann in der Hauptschleife nur noch abspielen / zeichnen. das laden in der schleife sorgt dafür, dass das ganze ruckelt (das programm bleibt stehen solange geladen wird) und füllt den ram bis dieser überfüllt ist. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Dirk Knoop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der obrige Code ist sehr stark gekürzt. Insgesamt besteht mein Code aus 12000 Zeilen Code.
Ich habe hier nur vereinfacht das Problem dargestellt. Insgesamt benötige ich für mein Spiel mehrere hundert Grafiken. Diese kann ich nicht auf einmal in den Speicher laden, da das insgesamt ca. 50 MB png.Dateien sind. Wenn ich die alle zu Spielbeginn lade, habe ich einen freien Grafikkartenspeicher von 10 Byte. Ich muss also innerhalb des Spiels Grafiken und Sounds nachladen und nicht mehr benötigte freigeben (mittels FreeImage und FreeSound). Was kann ich also machen ? Gruß, Dirk Knoop |
||
www.kostenloser-fussballmanager.de
www.discaim.de - weil Spaß kein Zufall ist www.torchance.de - ein etwas anderer Fußball-Manager |
![]() |
theotheoderich |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie schon gesagt wurde, ist das nachladen von Dateien zur Laufzeit keine gute Idee. Bei einem rundenbasiertem Strategiespiel geht es noch, bei einem schnellen Actionspiel bremst es stark.
Verwende einfach kleinere Dateien. Ich weiss, es sagt sich so leicht. Aber nicht jede Hintergrundtextur muss 512x512 pix gross sein und in den Grafikkartenspeicher geladen werden. Bilder als JPG mit grösserer Kompression verwenden. Kleinere Bilder verwenden. Keine stundenlangen Musikloops verwenden. Mehr fällt mir jetzt auch nicht ein ![]() |
||
Gruß
TheoTheoderich -- The box label said, "Requires Windows XP or better.", so I bought an Amiga Computer. |
![]() |
SoNenTyp |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst einfach die Bilder nicht nicht ganz so schnell gezeichnet werden müssen (Pause-Bildschierm usw.) . In den RAM anstadt VRAM laden. Das geht mit dem "Modus" Parameter. | ||
Gruss Der Typ.
User posted image |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
theotheoderich hat Folgendes geschrieben: Bilder als JPG mit grösserer Kompression verwenden. Im Grafikkartenspeicher zählt das nicht mehr ![]() SoNenTyp hat Folgendes geschrieben: Du kannst einfach die Bilder nicht nicht ganz so schnell gezeichnet werden müssen (Pause-Bildschierm usw.) . In den RAM anstadt VRAM laden. Das geht mit dem "Modus" Parameter. Sofern er denn BlitzPlus benutzt ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dirk: Wenn das eine stark gekürzte variante des richtigen Codes ist und der genau so katastrophal strukturiert ist mit Laden und goto jumps, dann würde ich dir dringend empfehlen, ihn zu restrukturieren ... denn wenn er denn so strukturiert wäre, könnte der Fehler theoretisch überall sein ... | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
SoNenTyp |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hubsi hat Folgendes geschrieben: ...Sofern er denn BlitzPlus benutzt
![]() Ai. Hast recht! Sorry mein Fehler. |
||
Gruss Der Typ.
User posted image |
![]() |
DerHase |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mach doch verschiedene Welten, die jeweil ein Set Grafiken haben. Am Ende eines Levels entfernst Du alle geladenen Levelgrafiken und lädst die für das nächste Level benötigten. | ||
Dirk Knoop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich konnte das Problem auf folgenden Code verkürzen: Code: [AUSKLAPPEN] Graphics 1024,768,32,1 SetBuffer BackBuffer() Repeat If KeyHit(1)=1 Then End c=c+1 Cls Text 10,10,c Flip picture=LoadImage("picture.png") FreeImage picture Forever Das Spiel ist ein Strategiespiel. Ich benöte die Hälfte der Grafiken zu einem bestimmten Zeitpunkt. Die andere Hälfte zu einem anderen Zeitpunkt. Und dieses immer abwechselnd für jeweils ca. 60 Sekunden. Und das ganze eigentlich endlos. Sagen wir mal für ca. 5 Stunden. Naja, ich habe evtl. den Fehler gefunden. Es lag an Blitz 3D. Ich hatte noch die Version 1.94, habe jetzt auf Version 1.96 updatet. Werde den o.g. Code mal über Nacht laufen lassen und mal sehen, ob er in 15 Stunden noch läuft, ohne abzustürzen (bekam den Hinweis auf die Version im englischen Forum). Trotzdem Danke für Eure Hinweise und Tipps. Am Rande: Ich programmiere seit über 20 Jahren mit GOTOs und GOSUBs. Alle Spiele unter www.Discaim.de verwenden diese. Und die Spiele laufen, glaubt es mir! Gruß, Dirk Knoop |
||
www.kostenloser-fussballmanager.de
www.discaim.de - weil Spaß kein Zufall ist www.torchance.de - ein etwas anderer Fußball-Manager |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich denke wir sollten dringend noch einmal auf etwas wichtiges hinweisen:
LADE KEINE BILDER/SOUND/MUSIK IN EINER SCHLEIFE! (nicht böse gemeint, aber scheint in den letzten Postings untergegangen zu sein oder du hast es in der Eile überlesen) Laden von Multimedia muss vor der Hauptschleife erfolgen oder du kannst prinzipiell davon ausgehen, das es crashen wird. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Hellfront |
![]() Antworten mit Zitat ![]() |
---|---|---|
Niemand hat behauptet, dass sie nciht laufen aber es gib tmehere Gründe warum, man Goto nicht mehr verwenden sollte. Natürlich kann das jeder für sich bestimmen und die funktion soll nciht in frage gestellt werden, aber gotos sind überholt und machen den code nur unnötig unsauber. Frührer war es vllt gang und gebe aber heute sind sie einfach nur hässlich und in den Programmiersürachen nur noich ein überbleibsel.
Gosubs sind meiner Meinung nach besser, aber ich verwend sie trotzdem nie. Ansonsten solltest du beherzigen, was Dreamora dir gesagt hat. |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
boing boing... bei Dirk Knoop würde ich, trotz meiner Enttäuschung, nicht mehr versuchen ihn zu überreden. Er programmiert halt so und er hat keinen Grund daran was zu ändern. Er programmiert für sich und wird von keinem gezwungen OOP zu verwenden oder sowas. Also lasst ihn doch.
@Dirk Knoop: Sag bitte bescheid, ob es an der veralteten Version lag! MfG D2006 |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Moin Dirk, schön dich mal wieder Hier zu sehen, in deinen Forum.
Also, bitte sage, ob es darran lag. ansonsten, würde ich nciht alle Grafiken, jede schleife wechseln sondern nur wenn andere Gebraucht werden. --> werden keine 1000 Ladevorgänge in einer Stunde sondern in 48 Stunden gemacht. Andere Idee, Variablen dannach auf 0 setzten. Was für Hardware hast du? |
||
between angels and insects |
Dirk Knoop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich habe jetzt auf Blitz-3D V1.96 updatet.
Heute Nacht habe ich den unten stehenden Code laufen lassen. Nach ca. 14 Stunden brach ich den Versuch ab. c hatte einen Wert von 264.000 !!!!! Ich werde jetzt noch mal den ganz oben aufgeführten Code für ca. 10 Stunden ausprobieren und bin sehr gespannt. Meines Achtens ist es auch egal, ob ein Bild in einer Schleife geladen wird oder nicht. Wenn ich mittels LoadImage ein Bild lade, wird es irgendeinen Teil des Speichers belegen. Wenn ich FreeImage benutze, ist doch eigentlich zu erwarten, daß dieser Speicher auch sauber wieder freigegeben wird. Wie könnte sonst mein "Internet-PC" seit ca. 1 Jahr ohne Neustart ununterbrochen 24 Stunden am Tag laufen. Dort wird immer wieder etwas in den Speicher geladen und demnach auch immer wieder sauber freigegeben. Ich werde morgen noch einmal Bescheid geben, ob der ganz oben genannte Code den "Dauertest" bestanden hat. Gruß, Dirk Knoop Code: [AUSKLAPPEN] Graphics 1024,768,32,1
SetBuffer BackBuffer() Repeat If KeyHit(1)=1 Then End picture=LoadImage("Bilder/Intro/discaim.png") ;1024*768 Pixel !!!! c=c+1 Cls DrawImage picture,0,0 Text 10,10,c Flip file=WriteFile("test.txt") WriteLine file,c CloseFile file FreeImage picture Forever |
||
www.kostenloser-fussballmanager.de
www.discaim.de - weil Spaß kein Zufall ist www.torchance.de - ein etwas anderer Fußball-Manager |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group