2D spiel stockt
Übersicht

xXBerghuhnXxBetreff: 2D spiel stockt |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Befasse mich noch nicht wirklich lange mit bb und hab mal ein Spiel gemacht (noch nicht fertig ;D). Jetzt hab ich ein Problem nach einer weile (1-2 mins) fängt das Spiel plötzlich an langsam zu werden und zu stocken. Woran kann das liegen? Es kommt keine Fehlermeldung oder so und benutze eig auch nur Funktionen. Danke schonmal im vorraus MfG Berghuhn |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du lädst nicht zufällig irgend welche Grafiken im Mainloop? Sonst trag mal den Code hier rein, denn meine Kristallkugel hab ich grad verliehen. ![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
xXBerghuhnXx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ne lad se davor ganz am anfang zuerst was soll ich reinstelle den ganzen code oda nur wie ichs lade? | ||
![]() |
ComNik |
![]() Antworten mit Zitat ![]() |
---|---|---|
Am besten alles, ansonsten nur deine Main Loop, weil da das größte Potential für Bugs drinn steckt ![]() Du hast vielleicht Cls oder so vergessen, wird sich zeigen. lg ComNik |
||
WIP: Vorx.Engine |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn dein Code zu lang ist, dann kannst du mal folgendes prüfen:
- Types sind eine tolle Sache, aber wenn man immer nur neue Partikel oder ähnliches erstellt, ohne ältere zu löschen, wird es langsam. - Das gleiche gilt für Stringketten die immer länger werden, weil immer mehr hinter angehängt wird. - Ansonsten der Klassiker: Man lädt die Grafiken immer wieder neu, statt diese am Anfang einmal zu laden. Aber das wurde ja von dir dementiert. Ansonsten kannst du auch den ganzen Code hier rein stellen. Nur das Probelm wird sein - falls dieser schon recht lang ist - dass kaum einer Lust hat sich da durch zu wurschteln. Falls du - wie du am Anfang beschrieben hast - alles in Funktionen aufgeteil hast, kannst du relativ schnell einzelne Funktionen zu Testzwecke auskommentieren und schauen ob das Problem auch weiterhin besteht. So kannst du zumindest es einfach lokalisieren. Ansonsten gibt es hier im Forum irgendwo einen Profiler (suche mal danach), dieser zeigt dir dann, wieviel jede deiner Funktionen an Millisekunden benötigt. Das geht dann noch schneller. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
xXBerghuhnXx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Repeat
Cls AppTitle "Asteorids" ; main createmeteorid() schuss() treffer() extras() kaputt() y_star = y_star - 1 If y_star = 480 Then y_star = 0 TileImage stars, y_star, -1 If gameover = 0 Then DrawImage raumschiff, MouseX(), MouseY() End If If gameover = 0 points = points + 1 End If Flip Cls Until KeyHit(1) End hier mal mainloop der rest is eig nur bilder laden und funktionen |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: AppTitle "Asteorids"
gehört nicht in die Schleife. AUßerdem Hilft Flip 0 und ein Timer ![]() Cls musst du nur einmal verwenden. Man kann nur vermuten was in Zitat: reatemeteorid()
schuss() treffer() extras() kaputt() steht, deshalb kann ich nicht mehr sagen. Allerdings sind da wirklich viele Fehler drin... |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was macht denn createmeteorid() denn so jedes Frame aufs neue?
Ansonsten gewöhn dir am besten gleich als später an, den Code einzurücken. Code: [AUSKLAPPEN] If schlecht=1 Then
Text 20,20,"nicht gut" End IF Code: [AUSKLAPPEN] If profi=1 Then
Text 20,20,"Ich bin der King" End If Und benutz Codeboxen, damit wir dein Code nicht aus dem Fliesstext ausmeisseln müssen. Dann hast du auch so schöne weisse Dinger wo dein Code drin steht hier im Forum. Kein K.O.-Kriterium, aber AppTitle "Asteorids" muß nicht wirklich in den Mainloop. Du löscht den Bildschirm zweimal. Einmal reicht. Wirklich! ![]() Du kannst auch mehrere Sachen innerhalb einer Bedingung erledigen. Das sieht dann in etwa so aus: Code: [AUSKLAPPEN] If Arbeiten=1 Then
Text 20,20,"OK, ich mache das jetzt" Text 20,40,"aber das auch noch" End If |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich tippe eher auf ein Speicherplatzproblem. Vielleicht kruschen irgendwann zuviele Schüsse- oder Asteroiden-Leichen herum. Arbeitest du mit TYPES?
werf doch mal die Routine "Treffer" rein... oder die "Kaputt". Bremst das Spiel auch dann, wenn Du 2 Minuten lang gar nichts "triffst" beim Abschießen? |
||
- Zuletzt bearbeitet von Midimaster am Sa, Dez 12, 2009 0:51, insgesamt einmal bearbeitet
xXBerghuhnXx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh ;D ^^ fällt mir gard auch i-wie auf sry mach noch ned so lange bb ^^ erstes Projekt.
Kann es sein dass es bei der Kolisionsüberprüfung zum verlangsamen kommt? |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
WIe überprüfst du denn deine Kolliisionen? Es gibt da unterschiedliche Möglichkeiten.
Aber das würde nicht erklären, warum dein Spiel immer langsamer wird. Wäre es die Kollision, dann würde man das auch schon von Anfang an merken. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
xXBerghuhnXx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ja überprüfe sie mit imagesoverlap bei den meteoriten - raumschiff und schuss - meteorit aber das verwundert mich ein bisschen warum es nach einer bestimmten zeit langsamer wird (ca 3000 - 4000 punkte also 3000. - 4000. programmablauf) | ||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Löscht du denn die ungebrauchten Meteoriden auch?
Wenn die einfach irgendwo nicht aufm Screen rumwuseln und immer mehr werden ist es klar das es anfängt zu stocken, Poste sonst doch mal den ganzen Code, werds mir mal anschauen mfg ozzi |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Um zu schaun, ob die Meteroiden noch weiter existieren, kannst du auch RuntimeStats![]() ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du hast die ImageFilters ausgestellt oder?
Weil sonst hat das rotieren von images relativ grosse performance auswirkungen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
xXBerghuhnXx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: ich tippe eher auf ein Speicherplatzproblem. Vielleicht kruschen irgendwann zuviele Schüsse- oder Asteroiden-Leichen herum. Arbeitest du mit TYPES?
werf doch mal die Routine "Treffer" rein... oder die "Kaputt". Bremst das Spiel auch dann, wenn Du 2 Minuten lang gar nichts "triffst" beim Abschießen? nicht so schnell wie wenn ich schieß ;D Zitat: Um zu schaun, ob die Meteroiden noch weiter existieren, kannst du auch RuntimeStats verwenden. Das gibt dir die Anzahl der Types im Debugger aus. Wenn die immer größer wird, sollte das Problem klar sein Wink
oh ja ich glaube da war das problem ;D ^^ die zahl wir immer größer ^^ soll ich die meteoriten und schüsse dann mit delete löschen? ( ja arbeite mit types) |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jap, mit Delete![]() ![]() Der Type existiert solang, bis er mit Delete gelöscht wird. |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst ja in diese Richtung jetzt experimentieren, probier es doch einfach aus, ob es was nützt!
Wenn sie nicht wieder gebraucht werden, gehören sie gelöscht. Vielleicht könnte man ja auch bei den Kollisionen die Anzahl der Überprüfungen sinnvoll einschränken. Etwa nach der Art, wenn ein Meteorit noch zu weit weit ist, muss ja er ja nicht auf Kollision geprüft werden. Ist es BB oder B3D in dem Du programmierst? Vor einen ImageCollide gehört immer ein Rectsoverlap und danach ein ImageOverlap und danach ein ImageCollide. Das ist, glaube ich, viel performanceschonender. |
||
xXBerghuhnXx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
programmier in B3D
und wenn ich jetzt z.b. mach Code: [AUSKLAPPEN] If info\meteorid_x = 300 Then Delete info.meteorid End If kommt : Runtime Error Object does not exist |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke dein Code ist so aufgebaut:
Code: [AUSKLAPPEN] For Info.meteorid=Each meteorid If info\meteorid_x = 300 Then Delete info.meteorid End If DrawImage meteroid1,info\meteorid_x,info\meteorid_y,0 Next Warum kommt da wohl der Fehler, dass das Objekt nicht existiert? Genau, weil es gelöscht wird, und nachher noch auf die Objekt-Variablen zugegriffen wird. ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group