Performanceprobleme durch Types
Übersicht

PakzorBetreff: Performanceprobleme durch Types |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo blitzbasic portal Forum,
ich habe mich hier soeben angemeldet weil ich durch die Suche nicht fündig geworden bin. Da ich mal wieder nicht schlafen konnte, hab ich mich an mein erstes richtiges Spiel gesetzt. Ich bin momentan dabei einen Weltraumshooter zu programmieren und lagere momentan mehrere Dinge in Funktionen aus und stelle manche Sachen auf Types um. Ich beschäftige mich momentan viel mit diesem Tut von Dottakopf Da sind wir auch schon bei meinem Problem, wenn ich folgende Funktion aufrufe, welche meine Gegner auf den Bildschirm zeichnen soll, dann geht mein Rechner nach ca. 2 Sekunden ziemlich in die Knie. Es liegt ziemlich eindeutig an dieser Funktion, denn wenn ich sie nicht aufrufe, läuft alles flüssig. Ich verwende übrigens das "normale" Blitz(3D). Code: [AUSKLAPPEN] Function DrawEnemies() For E1 = Each Enemy If E1\Existence >= 1 Then DrawImage Gegnerbild, E1\X, E1\Y EndIf Next End Function Nun würde ich gerne von euch wissen, was ich anders machen muss, damit mein Spiel wieder flüssig läuft? Des Weiteren würde ich gerne wissen, ob es Sinn macht einen bzw. zwei Spieler in einem Type anzulegen? PS: E1 steht für den Gegnertyp 1, die Hinweise mit IDs aus diesem Thema https://www.blitzforum.de/foru...6a6657f848 konnte ich jetzt noch nicht umsetzen. MFG Pakzor |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie viele Einträge zählt den der Enemy-Type?
Edit: Bzw. an was für einem Rechner entwickelst du denn? Wenn es nur am zeichnen liegt, muss dass ja eine ordentliche Menge sein... Etwas mehr Code bezüglich Erstellung/Verwaltung wäre vll. ganz nützlich. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn deine Map größer ist als die Graphics-Auflösung würde es sicher etwas Geschwindigkeit bringen, manuell zu überprüfen ob ein Gegner überhaupt im sichtbaren Bereich ist und nur dann DrawImage ausführen.
Aber zu allererst mal Xeres' Punkte abklären ![]() mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
PakzorBetreff: Ergänzung |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo zusammen,
momentan sind es eigentlich nur 21 Gegner, hatte das bisher auch in einer For-Next-Schleife gemacht mit Erzeugung und Zeichnen (ohne Types) da hatte ich auch keinerlei Probleme. Hier mal der aktuelle Code für die Gegner Erzeugung: Code: [AUSKLAPPEN] Function CreateEnemies()
If Stage = 1 And EnemiesCreated = 0 Then For I = 1 To 7 EX = EX + 90 If EX >= 720 Then EX = 90 E1 = New Enemy E1\Existence = 80 E1\X = EX E1\Y = 20 E1\Energy = 20 Next For I = 8 To 14 EX = EX + 90 If EX >= 720 Then EX = 90 E1 = New Enemy E1\Existence = 80 E1\X = EX E1\Y = 70 E1\Energy = 20 Next For I = 16 To 22 EX = EX + 90 If EX >= 720 Then EX = 90 E1 = New Enemy E1\Existence = 80 E1\X = EX E1\Y = 120 E1\Energy = 20 Next EnemiesCreated = 1 EndIf Mehr wird momentan nicht mit den Gegner gemacht, die Code Umstellung von DIM auf Types wollte ich einfach Schritt für Schritt machen, damit ich Fehler leichter finde ![]() Ich entwickel momentan an einem 1 Jahr altem Notebook, was nicht ganz schlecht ist, daran sollte es nicht liegen, da es ja mit DIM noch alles wunderbar ging. MFG Pakzor |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Verursacht die Draw Funktion von Anfang an diese Lags?
Wenn nein, tippe ich darauf, dass du die Enemys aus irgendeinem Grund nicht wieder löschst. Eine globale Zählvariable macht sich zum Debuggen manchmal nicht schlecht. Wenn ja... bin ich ziemlich überfragt ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Pakzor |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein, die Verzögerung tritt erst nach ca. 2 Sekunden ein.
Ich lösche die Gegner momentan noch nicht, weil nichts mit Ihnen passiert. Die explodieren nicht, bewegen sich nicht und sonst passiert auch nichts. Werden nur erzeugt und angezeigt. Bei meinen Schüsen mache ich es so: Code: [AUSKLAPPEN] Function MovePlayerShot() For PShot = Each Shot If PShot\Existence = 1 Then DrawImage laserbild, PShot\X, PShot\Y PShot\Y = PShot\Y - 10 If PShot\Y <= -26 Then Delete PShot EndIf Next End Function Aber es gibt momentan keinen Grund die Gegner zu löschen, wollte ja einfach nur mal testen ob es mit dem anzeigen klappt. MFG Pakzor |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde bei der for...each Schleife mal mitzählen wie viele Gegner tatsächlich existieren... manchmal macht man einfach kleine Logikfehler oder benutzt Lokale statt Globale Variablen und es werden tausende von Enemys übereinander gezeichnet. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Pakzor |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey Xeres,
das ist tatsächlich das Problem. Aber wie behebe ich das jetzt? E1 wurde folgendermaßen angelegt: Code: [AUSKLAPPEN] Global E1.Enemy
Kannst du mir bitte nochmal helfen? MFG Pakzor |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich vermute mal, dass er eher die Variable "EnemiesCreated" meint.
Wenn die nicht Global ist, dann kannst du deren Wert in der Funktion nicht ändern. ->Jeden Frame werden 21 Gegner erstellt und irgendwann sind es so viele, dass man merkt, dass das Programm langsam läuft. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
Pakzor |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen herzlichen Dank an euch beide,
der Hinweis von "mpmxyz" auf die Variable "EnemiesCreated" hat den entscheidenden Erfolg gebracht. Diese war, wie vermutet, nicht global. Dankeschön. Schönes Wochenende noch. MFG Pakzor |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du statt der Standart IDE z.B. IDEal verwendest, kannst du Lokale, Globale und nicht deklarierte Variablen unterschiedlich anzeigen lassen, das hilft ungemein beim Entwickeln ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Pakzor |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die schaut echt fein aus, auf den ersten Blick zwar etwas kompliziert,
aber allein diese ausklapp-Funktion für die Funktionen (wie in den Visual Studios) find ich extrem schick. Danke dir. Gruß Pakzor |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group