Speed Optimierung

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

kriD

Betreff: Speed Optimierung

BeitragFr, Jul 20, 2007 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht kennt's der ein oder andere.. man proggt drauf los und schreibt und schreibt.. und alles läuft und man proggt weiter..
Irgentwann läuft zwar immer noch alles, nur zu langsam... is mein Rechner nur zu schlecht oder schreib ich alles zu umständlich?
Vlt. hat einer von euch ja n' paar gute tipps, durch die sich Rechenleistung sparen lässt.. insbesondere für arrays (z.B. im rpg) oder for-schleifen usw., die besonders viel Speicher fressen...
würd mich echt über welche freuen..^^

ps: onlinehilfe hab ich mir schon durchgelesen (sind auch n' paar nette tipps bei, aber da gibts bestimmt noch besseres^^)..

MfG kriD
Wenn ich du wäre, wäre ich lieber ich!

aMul

Sieger des Minimalist Compo 01/13

BeitragFr, Jul 20, 2007 22:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Meine Glaskugel ist kaputt und mein Wetterfrosch im Urlaub. Deshalb kann ich dir leider nicht sagen, wer was falsch macht.

Zwei Tipps will ich dir dennoch geben:
1. programmiere frameunabhängig
2. mache nicht ständig Sachen, die nicht nötig sind; If ist den Freund
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

kriD

Betreff: frameunabhängig?

BeitragFr, Jul 20, 2007 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
@ aMul:
Warum frameunabhängig?
Was nützt mir das schönste Spiel, wenn's nicht spielbar ist??
(Klar, die Technik wird besser und in einem Jahr ist das Spiel für jeden Rechner ein Klacks, aber dann sind auch die Ansprüche an ein Spiel ganz anders..^^)

Trotzdem danke für deinen tipp.. werd ihn beherzigen..^^
Wenn ich du wäre, wäre ich lieber ich!

aMul

Sieger des Minimalist Compo 01/13

BeitragFr, Jul 20, 2007 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Weißt du überhaupt was frameunabhängig heißt? Kommt mir nämlich nicht so vor...

Frameunabhängig heißt, dass sich dir Figuren/was auch immer deines Spiels, sich auf allen Rechnern, unabhängig von deren Leistung, gleichschnell bewegen. Damit verhinderst du unter anderem auch, dass die Bewegungen langsamer werden, wenn du neue Features hinzufügst.

Schau am besten mal im Tutorial-Bereich. Irgendwer hatte zu dem Thema mal ein ganz anständiges Tutorials geschrieben...

EDIT:
Achja, und die Ansprüche an die Spiele verändern sich nicht. Solange es Spaß macht, spielt der Rest keine sonderlich große Rolle Wink
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

kriD

Betreff: frameunabhängig..

BeitragSa, Jul 21, 2007 0:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Embarassed frameunabhängig.. eigentlich klar^^ naja.. danke, dass du's mir erklärt hast..

Wenn aber das Spiel uber die Leistung des Rechners hinausgeht, denn bringt das frameunabhängige auch nix mehr...
oder man setzt die framerate so weit runter, dass nix mehr langsamer werden kann.. Wink ^^ (aber egoshoter mit 10 frames schockt auch net.. Laughing )

naja danke.. ich werd mal nach dem Tuturial suchen..

MfG kriD
Wenn ich du wäre, wäre ich lieber ich!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jul 21, 2007 2:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du die Framerate festlegst, so wäre das eine Frameabhängige Programmierung.

Frameunanhängig heisst, dass die Figuren größere Schritte machen, wenn die Frames runter gehen.

Beispiel:

Bei 100 FPS (ist Delta = 1/100 FPS) und If KeyDown(205) X=X+50*Delta Also X=X+0.5
Bei 10 FPS (ist Delta = 1/10 FPS) und If KeyDown(205) X=X+50*Delta Also X=X+5.0

In beiden Fällen bewegt sich die Figur gleich schnell auf dem Bildschirm, nämlich 50 Pixel / Sekunde. Klar jetzt?
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

kriD

BeitragSa, Jul 21, 2007 10:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Idea nu is klar.. (ich bin aber auch schwer von kp..)

Das is eigentlich ne gute ide..(bin ich noch garnich drauf gekomm^^)
man muss halt nur die frames rausfinden..

Ich mach das immer so:
Code: [AUSKLAPPEN]
counter = counter + 1
If time = 0 Then time = MilliSecs()
If time + 1001 < MilliSecs() Then
framerate = counter
counter = 0
time = MilliSecs()
EndIf

...und dir Schritweite (oä.) ändert sich dann mit der framerate........ logisch^^

Danke für die bisherigen tipps^^

MfG kriD
Wenn ich du wäre, wäre ich lieber ich!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jul 21, 2007 10:38
Antworten mit Zitat
Benutzer-Profile anzeigen
So wie du das machst, würdest du nur jede Sekunde ein neuen Wert zugewiesen bekommen. Besser ist, jedes Frame abzufragen und gleich anzuwenden. Dann hast du eine Verzögerung von nur einem Frame.

Code: [AUSKLAPPEN]
Graphics 400,400,0,2
SetBuffer BackBuffer()

td#=1 ;ZeitDifferenz (Bewegungsmultiplikator)
tp#=MilliSecs() ;MilliSecs Zwischenspeicher
xp#=100 ;X-Position
yp#=100 ;Y-Position
xg#=0 ;X-Geschwindigkeit
yg#=0 ;Y-Geschwindigkeit

timer=CreateTimer(120)




;Hauptschleife
While Not KeyHit(1)

 ;Tastenabfrage
 If KeyDown(203) Then xg=xg-0.001*td
 If KeyDown(205) Then xg=xg+0.001*td
 If KeyDown(200) Then yg=yg-0.001*td
 If KeyDown(208) Then yg=yg+0.001*td

 ;Luftwiederstand
 xg=xg/((0.001*td)+1)
 yg=yg/((0.001*td)+1)

 ;Geschwindigkeitszuweisung
 xp=xp+xg*td
 yp=yp+yg*td

 ;Mapeingrenzung
 If xp>400 Then xp=xp-400
 If yp>400 Then yp=yp-400
 If xp<0 Then xp=xp+400
 If yp<0 Then yp=yp+400

 Rect xp-4,yp-4,9,9,1

 ;Langsamen Rechner simulieren mit SPACE
 If KeyHit(57) Then w=1-w
 If w=1 Then Delay 40

 ;Delta-Berechnung
 ms=MilliSecs()
 td=ms-tp
 tp=ms

 ;FPS-Anzeige
 Text 20,20,fps+" fps":If ms>mt mt=ms+1000:fps=frame:frame=0 Else frame=frame+1

 WaitTimer timer
 Flip 0
 Cls
Wend
End

Mit SPACE wird ein Delay eingeschaltet, was ein langsamen Rechner simulieren soll. Nach einem kleinem Ruck, bewegt sich das Rect wieder gleich schnell, wie vorher. Auch wird die Beschleunigung/Luftwiederstand mitberücksichtigt.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

kriD

BeitragSa, Jul 21, 2007 10:54
Antworten mit Zitat
Benutzer-Profile anzeigen
cool.. danke^^
der code erklärt mehr als 1000 worte^^

habt ihr noch mehr solch gute tipps?? Wink

MfG kriD
Wenn ich du wäre, wäre ich lieber ich!

aMul

Sieger des Minimalist Compo 01/13

BeitragSa, Jul 21, 2007 12:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja.
Du könntest zum Beispiel nur jeden zweiten Frame oder alle 16 Millisekunden rendern(das ergäbe 60FPS), aber den Rest des Programmes öfter ausführen. Dadurch würden die Berechnungen genauer, da die Schritte kleiner sind. Wenn der Rechner allerdings so schon keine 60FPS schafft nützt dir das auch nicht allzu viel...
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jul 21, 2007 12:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso? Mit Delta ist es ja egal, wieviele Frames der Rechner schaft. CreateTimer wird noch zusätzlich gemacht, damit schnelle Rechner nicht unnötig 1000 FPS berechnen.

Eine Begrenzung von 60 FPS sieht bei mir übrigens echt beschissen aus. Es kommt dann immer zu Interferenzen zwischen Bildaufbau 100 FPS und 60 FPS vom Programm. Deshalb mache ich 120 FPS, da sieht man es kaum noch. Monitore die ganze 150 oder 200 FPS selbst bei hohen Auflösungen darstellen, sind recht selten.^^
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

tft

BeitragSa, Jul 21, 2007 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi ...

also Tips zum Code Optimieren .... ist nicht ganz einfach, wenn man den Code nicht kennt. Aber hir einige grundsätzliche dinge.

1. Einzelne Objecte oder gruppen von Objecten die die gleiche Texture verwenden so umstricken das nur ein surface nötig ist.
2.Alle objecte die man nicht am Bildschirm sehen kann. Ausschalten.
3.Wenn du For,Next schleifen verwendest um Objecte zu bewegen oder sonstige dinge damit machst. Den code so umstruckturieren, das du das alles in einer Schleife machen kannst.
4.Weniger ist offt mer.
5.Sortiere immer dinge aus. Die nicht angezeigt werden müssen.
6.Verwende keinen TEXT Befehl. Der ist sau langsam. Es giebt alternativen.
7.Verwende LevelOfDetail für deine Objecte. Wenn sie weiter weg sind.
8.TEste die abschnitte deines Code auf geschwindigkeit. Wo sachen offt durchlaufen werden , ist das Einspar Potenzial grösser als bei einmaligen durchleufen.
9.Denke darüber nach, ab du die LINEPICK und änliche befehle jeden Frame brauchst, oder ob es nicht reicht diese Kaskadiert auszufüren.
10.Es muss nicht alles gleichzeitig auf Collision geprüft werden. Fersuche es auf objecte in deiner nähe zu beschränken.
11.Ist die Collisions abfrage nötig wenn du das Object garnicht sehen kanst.

so das sind einige wenige ansätze.

Fiel spass noch.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

Eingeproggt

BeitragSa, Jul 21, 2007 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
tft hat Folgendes geschrieben:
6.Verwende keinen TEXT Befehl. Der ist sau langsam. Es giebt alternativen.


Ja, der ist langsam, aber die Alternativen interessieren mich jetzt?
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Artemis

BeitragSa, Jul 21, 2007 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
BitmapFonts

aMul

Sieger des Minimalist Compo 01/13

BeitragSa, Jul 21, 2007 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
hectic hat Folgendes geschrieben:
Eine Begrenzung von 60 FPS sieht bei mir übrigens echt beschissen aus. Es kommt dann immer zu Interferenzen zwischen Bildaufbau 100 FPS und 60 FPS vom Programm. Deshalb mache ich 120 FPS, da sieht man es kaum noch. Monitore die ganze 150 oder 200 FPS selbst bei hohen Auflösungen darstellen, sind recht selten.^^

Kann ich nicht nachvollziehen...
Gerade bei mehr FPS gibt es doch unschöne "Schnitte", wenn man die vertikale Synchronisation abschaltet. Da nehme ich lieber weniger FPS als der Bildschirm darstellen kann(bzw genauso viele), spare so Rechenleistung und verhindere VSync-"Fehler"...
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

tft

BeitragSa, Jul 21, 2007 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
hi ...

Draw3D 2.1 .......... gerade erschienen. Ist absolut genial. Und Verdammt schnell.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

Eingeproggt

BeitragSa, Jul 21, 2007 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Bzgl Bitmapfont:

Nach einem Quick&Dirty Test ergab sich: Beides gleich schnell, nur dass TEXT einfacher ist und besser aussieht.
Natürlich ist mein Code noch nicht optimiert, weil das mein erster Bitmapfont-Versuch ist.
Wer Zeit hat, kann sichs ja bitte anschauen. (Ich weiß, Arial ist eine denkbar ungeeignete Schrift dafür^^)

https://www.blitzforum.de/upload/file.php?id=1832

Bzgl Draw3D:

Ohja, die ist genial, aber ich hab nur die B3D demo, ich brauch 2D-Lösungen Embarassed
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

Matthias

BeitragSa, Jul 21, 2007 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay. Also irgendwo hier im Forum habe ich gelesen das mann den Text befehl auf einem Images anwendet und dann einfach das Images setzt.


Auserdem würde ich noch vorschlagen die Shl und Shr Befehle für schnelle berechnungen zu benutzen und vorallem auf die Konvontablen Types verzichten wenn mann mehr als 1500Types benutzen will.

Statdessen liebers Dim Felder oder Banks benutzen.
Natürlich kommt es immer darauf an was das Programm machen soll.
Wie auch einige vor mir schon beschrieben haben möglichst viel vorzu berechnen und in dim Felder speichern oder auch die Functionen auf mehrere Flaps verteilen

Beispiele:
Code: [AUSKLAPPEN]

Graphics 800,600,32,2
Dim Dis#(100000)
For I=0 To 99999:Dis#(I)=Sqr(I):Next



TextImg=CreateImage(100,20)
SetBuffer BackBuffer()

Repeat:
MI=MilliSecs()


FPSLoops=FPSLoops+1
Select MI>FPSTimer+999:Case 1:FPSTimer=MI
;Text auf Images schreiben"
SetBuffer ImageBuffer(TextImg):Color 0,0,0:Cls
Text 10,10,FPSLoops:Color 255,255,255:Text 9,9,FPSLoops
SetBuffer BackBuffer()::FPSLoops=0:End Select






;"Ausbau BildSchirm-----
Select MI>UpdTimer+19:Case 1
UpdTimer=MI:Cls
DrawBlock TextImg,0,0
Flip
End Select



;----------Fuctionssplitting-------

Select FuncInst

Case 1:SucheNeuenPlatz()

Case 2:GegnerKI()
       WegForberechnen()

Case 3:CheckGegner()
Case 4:Steuerung():FuncInst=0
End Select




Until KeyDown(1)=1
End



Function SucheNeuenPlatz():End Function
Function GegnerKI()
EX=AutoX2-AutoX1
EY=AutoY2-AutoY1
;Ent=Sqr(EX*EX+EY*EY)
Ent=Dis(EX*EX+EY*EY)

End Function
Function WegForberechnen():End Function
Function CheckGegner():End Function
Function Steuerung():End Function

aMul

Sieger des Minimalist Compo 01/13

BeitragSa, Jul 21, 2007 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz ehrlich, dein Code ist kompletter Müll.
Bei so einem Stil würde es mich nicht wundern, wenn du nach zwei Wochen keine Ahnung mehr hast, was der Code überhaupt macht.

Achja, und zu diesem Stück Code: [AUSKLAPPEN]
Select MI>UpdTimer+19:Case 1

Wer so verzweifelt ist und aus Geschwindigkeitsgründen solchen Müll schreibt, sollte sich fragen, ob das Problem nicht vielleicht zwischen Bildschirm und Stuhllehne zu suchen ist...

Doppelpunkte und kurze, nichtssagende Variablennamen machen ein Programm übrigens auch nicht schneller, sehr wohl aber unübersichtlicher... Aber das versuchst du mit deinen 100 Leerzeilen ja wieder auszugleichen, nicht wahr?
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

kriD

Betreff: danke..

BeitragSa, Jul 21, 2007 23:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Sind ja schon recht viele sehr brauchbare Ansätze geschrieben worden.. Very Happy
wollt mich zwischenzeitlich nur mal bedanken.. also: Danke für die bisherigen Tipps..^^

besonderen dank an tft.. ich denk, da is was verwendbares bei..^^ (so hab ich mir den thread vorgestellt^^)
und das mit dem frameunabhängigen proggen is auch ne gute sache..

allerdings zweifle ich ein wenig an, dass bilder anzeigen schneller als TEXT sein soll... so rein vom logischen her..
seis drumm..

ich wollt mich demnächst mal an einem kleinen RPG probieren (natürlich alles 2D ^^).. weiß wer, wie ich mich auf sehr großen maps ohne viel Geschwindigkeitseinbuße bewegen kann? also mit scrolling.. (beim Bewegen des Spielers den neuen Bildschirmausschnitt aus der großen map neu einlesen? oder gehts besser.. hat wer sowas schonmal gemacht?)

MfG kriD
Wenn ich du wäre, wäre ich lieber ich!

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group