2D spiel stockt

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

xXBerghuhnXx

Betreff: 2D spiel stockt

BeitragFr, Dez 11, 2009 23:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Dez 11, 2009 23:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Wink
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

xXBerghuhnXx

BeitragFr, Dez 11, 2009 23:48
Antworten mit Zitat
Benutzer-Profile anzeigen
ne lad se davor ganz am anfang zuerst was soll ich reinstelle den ganzen code oda nur wie ichs lade?

ComNik

BeitragSa, Dez 12, 2009 0:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Am besten alles, ansonsten nur deine Main Loop, weil da das größte Potential für Bugs drinn steckt Wink

Du hast vielleicht Cls oder so vergessen, wird sich zeigen.

lg
ComNik
WIP: Vorx.Engine

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Dez 12, 2009 0:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Dez 12, 2009 0:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Dez 12, 2009 0:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
AppTitle "Asteorids"

gehört nicht in die Schleife.

AUßerdem Hilft Flip 0 und ein Timer Wink

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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Dez 12, 2009 0:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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! Wink

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

BeitragSa, Dez 12, 2009 0:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Dez 12, 2009 0:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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?

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Dez 12, 2009 0:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Dez 12, 2009 0:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Dez 12, 2009 1:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Dez 12, 2009 2:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Twitter
Download Jewel Snake!
Windows|Android
 

Dreamora

BeitragSa, Dez 12, 2009 2:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Dez 12, 2009 11:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Dez 12, 2009 12:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Jap, mit Delete löschen. Auf jedenfall. Wink

Der Type existiert solang, bis er mit Delete gelöscht wird.
Twitter
Download Jewel Snake!
Windows|Android

Midimaster

BeitragSa, Dez 12, 2009 12:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Dez 12, 2009 13:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Dez 12, 2009 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Wink
Twitter
Download Jewel Snake!
Windows|Android

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group