Speed Optimierung
Übersicht

![]() |
kriDBetreff: Speed Optimierung |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
kriDBetreff: frameunabhängig? |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ 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! |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
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 |
![]() |
kriDBetreff: frameunabhängig.. |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() 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.. ![]() ![]() naja danke.. ich werd mal nach dem Tuturial suchen.. MfG kriD |
||
Wenn ich du wäre, wäre ich lieber ich! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() 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! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
cool.. danke^^
der code erklärt mehr als 1000 worte^^ habt ihr noch mehr solch gute tipps?? ![]() MfG kriD |
||
Wenn ich du wäre, wäre ich lieber ich! |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
BitmapFonts | ||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
kriDBetreff: danke.. |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sind ja schon recht viele sehr brauchbare Ansätze geschrieben worden.. ![]() 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! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group