Speedoptimierung?
Übersicht

![]() |
FirstdeathmakerBetreff: Speedoptimierung? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde gerne diesen Code optimieren, aber ich weis nicht genau wie...
Ich hab schon statt "print" "text" benutzt, aber es ist immer noch ellenlangsam. Wie könnte ich das schneller bekommen? Code: [AUSKLAPPEN] ;Matrixbildschirmschoner
Modes=CountGfxModes() If GfxModeExists(1280,1024,16) Graphics_X=1280 Graphics_Y=1024 ElseIf GfxModeExists(1024,768,16) Graphics_X=1024 Graphics_Y=768 ElseIf GfxModeExists(800,600,16) Graphics_X=800 Graphics_Y=600 ElseIf GfxModeExists(640,400,16) Graphics_X=640 Graphics_Y=400 EndIf Graphics Graphics_X,Graphics_Y,32,1 Timer=CreateTimer(100) Dim Feld((Graphics_X/10),(Graphics_Y/10),3);0=Zahl,1=c1,2=c2,3=c4 SetBuffer BackBuffer() Abstd_X=10;Abstand der Zahlen auf der X Koordinate zueinander Abstd_Y=11;Abstand der Zahlen auf der Y Koordinate zueinander ;Zufallszahlen setzen For i=0 To Graphics_X/10 For i2=0 To Graphics_Y/10 Feld(i,i2,0)=Rand(0,9) ; Feld(i,i2,1)=250;Rot ; Feld(i,i2,2)=255;Grün ; Feld(i,i2,3)=250;Blau Next Next Dim Reihe(Graphics_X/10,2);0=aktiv,1=Standortnummer,2=Diesen Durchgang schon benutzt. Repeat WaitTimer timer SeedRnd MilliSecs() Cls For i=0 To Graphics_X/10 If Reihe(i,0)=0 And Rand(0,100)=1 Reihe(i,0)=1 For i2=0 To Graphics_Y/10 If Reihe(i,0)=1 And Reihe(i,1)=i2 And Reihe(i,2)=0 Feld(i,i2,1)=250 Feld(i,i2,2)=255 Feld(i,i2,3)=250 Reihe(i,1)=(Reihe(i,1)+1) If Reihe(i,1)>(Graphics_Y/10) Reihe(i,1)=0 Reihe(i,0)=0 Reihe(i,2)=1 EndIf Color Feld(i,i2,1),Feld(i,i2,2),Feld(i,i2,3) Text i*Abstd_X,i2*Abstd_Y,Feld(i,i2,0) If Feld(i,i2,1)>0 Feld(i,i2,1)=Feld(i,i2,1)-50 If Feld(i,i2,2)>0 Feld(i,i2,2)=Feld(i,i2,2)-5 If Feld(i,i2,3)>0 Feld(i,i2,3)=Feld(i,i2,3)-50 Next Reihe(i,2)=0 Next ;Framerate counter=counter+1 If time<MilliSecs() time=MilliSecs()+1000 frames=counter counter=0 EndIf Color 255,0,0 Text 100,100,frames Flip Until GetKey()<>0 |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
Kekskiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zu dem Textproblem gibt es eine passende Lösung , welche sich Bitmapfont
nennt. Hier mal ein kleiner Funktionscode Code: [AUSKLAPPEN] Function BmpPrint(msg$,x,y,font,center=0) Select center Case 1 laenge=Len(msg$)*ImageWidth(font) x=x-(laenge/2) End Select For z=1 To Len(msg$) zeichen$=Mid(msg$,z,1) If Asc(zeichen$)>=48 And Asc(zeichen$)<=57 Then DrawImage font,x+(z-1)*ImageWidth(font),y,Asc(zeichen$)-48+52 Else If Asc(zeichen$)>=65 And Asc(zeichen$)<=90 Then DrawImage font,x+(z-1)*ImageWidth(font),y,Asc(zeichen$)-65+26 Else If Asc(zeichen$)>=97 And Asc(zeichen$)<=122 Then DrawImage font,x+(z-1)*ImageWidth(font),y,Asc(zeichen$)-97 Else Select zeichen$ Case "!":imgnum=62 Case "/":imgnum=63 Case "(":imgnum=64 Case ")":imgnum=65 Case "=":imgnum=66 Case "?":imgnum=67 Case ".":imgnum=68 Case ":":imgnum=69 Case ",":imgnum=70 Case ";":imgnum=71 Case "~":imgnum=72 Case "*":imgnum=73 Case " ":imgnum=1000 End Select If imgnum<>1000 Then DrawImage font,x+(z-1)*ImageWidth(font),y,imgnum EndIf EndIf EndIf Next End Function Die Bilder der Buchstaben und Zahlen müssen in der folgender Reihenfolge sein: Kleinbuchstaben Großbuchstaben Zahlen Sonderzeichen ( siehe bei dem Select-Block) Klappt immer sehr schön und schnell soetwas. Vielleicht hilft es ja. |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also wenn ich das jetzt richtig verstanden habe macht dein Code folgendes: Er zeichnet an die angegebene Stelle das Zeichen welches ich angebe (in ASII Code) als Image. Jetzt brauche ich also nur noch einen Bitmapfont?
Das Problem ist ja, dass ich sich dauernd verändernde Zeichen habe, von der Farbe her gesehen. Da sich die einzelnen Zeichen nicht alle gleichzeitig auf eine gemeinsame andere Farbe verändern, kann ich da schlecht mit allgemeinen Bearbeitungsmethoden arbeiten, da die ja alles verändern würden. So weit wie ich das verstanden habe müsste ich also 51 verschiedene Fonts haben? Oder habe ich da etwas missverstanden? Ansonsten eine Grundsatzfrage: Ist BB schneller im Zeichnen von Images als im Zeichnen von Text mittels Textbefehl? |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
junky |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
allerdings ist es das
hab dein bsp ma schnell umgecodet ( allerdings teilweise ziemlich drastisch - nicht weil es schlecht war, sondern weil es einfach nicht anners ging ) Code: [AUSKLAPPEN] ;Matrixbildschirmschoner Modes=CountGfxModes() If GfxModeExists(1280,1024,16) Graphics_X=1280 Graphics_Y=1024 ElseIf GfxModeExists(1024,768,16) Graphics_X=1024 Graphics_Y=768 ElseIf GfxModeExists(800,600,16) Graphics_X=800 Graphics_Y=600 ElseIf GfxModeExists(640,400,16) Graphics_X=640 Graphics_Y=400 EndIf Graphics Graphics_X,Graphics_Y,32,1 SeedRnd MilliSecs() Dim Feld((Graphics_X/10),(Graphics_Y/10),3);0=Zahl,1=c1,2=c2,3=c4 SetBuffer BackBuffer() Abstd_X=10;Abstand der Zahlen auf der X Koordinate zueinander Abstd_Y=11;Abstand der Zahlen auf der Y Koordinate zueinander ; 48 - 57 -> Zahlen von 0 - 9 ; 65 - 90 -> große Buchstaben ; 97 - 122 -> kleine Buchstaben AscIIStart = 48 AscIIStop = 57 ;Zufallszahlen setzen For i=0 To Graphics_X/10 For i2=0 To Graphics_Y/10 Feld(i,i2,0)=Rand(AscIIStart,AscIIStop) ; Feld(i,i2,1)=250;Rot ; Feld(i,i2,2)=255;Grün ; Feld(i,i2,3)=250;Blau Next Next Dim Reihe(Graphics_X/10,2);0=aktiv,1=Standortnummer,2=Diesen Durchgang schon benutzt. ;#############################################; ;=============================================; ; Bilder werden vorberechnet ; ; jede Zahl wird in den benötigten ; ; Farbtönen (Frames) gezeichnet ; ; a -> Zahl von 0 - 9 ; ; b -> Grünton in 5er Schritten ; ; c -> bestimmt in diesem Fall die Helligkeit ; ;=============================================; font=LoadFont("Verdana",12) SetFont(font) Dim Image(AscIIStop) For a=AscIIStart To AscIIStop Image(a)=CreateImage(12,12,251) Next For a=AscIIStart To AscIIStop c=250 For b=250 To 0 Step -5 If c>0 : c=c-25 : EndIf SetBuffer(ImageBuffer(Image(a), b)) Color(c,b,c) Text(0,0,Chr(a)) Next Next ;=============================================; ;#############################################; SetBuffer(BackBuffer()) Repeat Cls For i=0 To Graphics_X/10 If Reihe(i,0)=0 And Rand(0,100)=1 Reihe(i,0)=1 For i2=0 To Graphics_Y/10 If Reihe(i,0)=1 And Reihe(i,1)=i2 And Reihe(i,2)=0 ;Feld(i,i2,1)=250 Feld(i,i2,2)=250 ;Feld(i,i2,3)=250 Reihe(i,1)=(Reihe(i,1)+1) If Reihe(i,1)>(Graphics_Y/10) Reihe(i,1)=0 Reihe(i,0)=0 Reihe(i,2)=1 EndIf ; jeweilige Images (Frames) werden eingezeichnet ; aber nur, wenn das Image einen Grünton hat ; also in diesem Fall nicht schwarz ist If Feld(i,i2,2)<>0 DrawBlock(Image(Feld(i,i2,0)), i*Abstd_X, i2*Abstd_Y, Feld(i,i2,2)) EndIf ;If Feld(i,i2,1)>0 Feld(i,i2,1)=Feld(i,i2,1)-50 If Feld(i,i2,2)>0 Feld(i,i2,2)=Feld(i,i2,2)-5 ;If Feld(i,i2,3)>0 Feld(i,i2,3)=Feld(i,i2,3)-50 Next Reihe(i,2)=0 Next ;Framerate counter=counter+1 If time<MilliSecs() time=MilliSecs()+1000 frames=counter counter=0 EndIf Color 255,0,0 Text 100,100,frames Flip Until GetKey()<>0 End |
||
gestern stand ich noch vorm Abgrund
heute bin ich einen Schritt weiter... |
- Zuletzt bearbeitet von junky am Mi, Mai 12, 2004 19:56, insgesamt einmal bearbeitet
Kekskiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Achja , die Sache mit der Farbe ( doofer Keks ) .BB ist aufgrund
von DirectX ( soweit ich weiß ) wesentlich schneller im Zeichnen von Bilder , als im Plotten oder Schreiben von Texten , allgemein ist die Sache mit den Grafikfunktionen aus BB heraus ziemlich langsam , wie auch in anderen Sprachen.Als allererstes solltest du unbedingt den 32bit-Modus runterschalten , ich bitte dich , bei simplen Textfunktionen reicht auch 16bit locker aus.Zudem ist das Programm bei mir so ust lahm , dass ich nicht mal nach einer Viertelstunde einen Sinn darin erkennen kann ^^".Aber bei meinem Antiquariat ( Pentium I ) ist das auch kein Wunder.Gibt es denn hier keine Superspeedcomputer , die das Testen könnten? Edit:Ah , so ist das schon viel schneller ^_^ Nur 32bit ist wirklich zu heftig. Ich würde aus den einfachen Zahlen zufällige Asciicodes machen , das kommt teils viel lebediger rüber. |
||
![]() |
sbrog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Post das ding doch mal ins codeforum .
Ist sehr interessant und und sieht Grafisch professionell aus. Habs gleich als Wallpaper genommen ![]() |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ junky: Danke, ich werd jetzt mal deinen COde studieren und dazulernen. Darf ich deinen Code ins Code-Archiv stellen? | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
junky |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ehm ![]() |
||
gestern stand ich noch vorm Abgrund
heute bin ich einen Schritt weiter... |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, ich hab das Ding noch ein klein wenig verändert (Geschwindikeit festgelegt [ironie: erst schneller wollen, dann die Geschwindigkeit wieder runterschrauben]) und stell es jetzt ins Codearchiv.
MFG FDM |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group