"Matrix-Effekt" verbessern

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

DATIS

Betreff: "Matrix-Effekt" verbessern

BeitragDi, März 09, 2010 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute.
Habe heute ein Prog gecodet, das den Matrix-Effekt darstellen soll. Wenn man eine Eingabe macht und anschließend Enter drückt, wird der Text dann auch angezeigt. Aber wenn der Text zu lang ist, haut das ganz schön auf die Geschwindigkeit. Wie kann ich den Code optimieren, damit es schneller und besser läuft?

Code: [AUSKLAPPEN]
Graphics 1280,800,16,1
AppTitle "Matrix Script v2"

SetBuffer BackBuffer()
SeedRnd MilliSecs()
font2=LoadFont("Courier New",18)
font=LoadFont("Courier New",14)
font3=LoadFont("Courier New",12)
font4=LoadFont("Courier New",10)
font5=LoadFont("Courier New",8)
font6=LoadFont("Courier New",6)
font7=LoadFont("Courier New",4)
font8=LoadFont("Courier New",22)
font9=LoadFont("Courier New",28)


SetFont font2

matrix=300
hide#=0.03

Dim feld$(matrix,8)

time=MilliSecs()

start$="Reading the Matrix..."
Color 0,255,0
For sub=0 To Len(start$)
   Cls
   Text 6,GraphicsHeight()-20,Left$(start$,sub)
   Flip
Next

For sub=255 To 0 Step -4
   Cls
   Color 0,sub,0
   Text 6,GraphicsHeight()-20,start$
   Flip
Next

;SetFont font2

SetBuffer BackBuffer()
;End
Repeat
   Cls
   
   taste=GetKey()
   If taste>=32 And taste<=126 And Len(pw$)<80 Then pw$=pw$+Chr$(taste)
   If taste=8 Then pw$=Left$(pw$,Len(pw$)-1)
   Color 0,100,0
   SetFont font
   Text 10,GraphicsHeight()-FontHeight(),pw$
   If taste=13 Then
   For sh=1 To Len(pw$)
      Repeat
         wert=Rand(0,matrix)
      Until feld(wert,2)=""
      txt$=""
      For tmpTXT=1 To Rand(5,19)
      txt$=txt$+Chr$(Rand(48,126))
      Next
      txt$=txt$+Mid$(pw$,sh,1)
      feld(wert,5)=txt$;                   Zufälliger String mit zufälliger Länge
      feld(wert,0)=GraphicsWidth()/2-(Len(pw$)/2-sh)*12;    X-Pos
      feld(wert,1)=GraphicsHeight()/2-Len(txt$)*18;    Y-Pos
      feld(wert,2)=MilliSecs();             Aktuelle Zeit (für Vernichtung)
      feld(wert,3)=Rand(-8,1);                   Länge des angezeigten Texts
      feld(wert,4)=MilliSecs();             Aktuelle Zeit (für Erweiterung)
      feld(wert,6)=1;                   Absoluter Farbwert (100%)
      feld(wert,7)=2;                     Font 2!
      feld(wert,8)=1;                     Alert?
   Next
   pw$=""
   EndIf
   If MilliSecs()-time>60 Then
   ;Stop
      time=MilliSecs()
      Repeat
         wert=Rand(0,matrix)
      Until feld(wert,2)=""
      feld(wert,0)=Rand(0,GraphicsWidth());    X-Pos
      feld(wert,1)=Rand(0,GraphicsHeight());    Y-Pos
      feld(wert,2)=MilliSecs();             Aktuelle Zeit (für Vernichtung)
      feld(wert,3)=1;                   Länge des angezeigten Texts
      feld(wert,4)=MilliSecs();             Aktuelle Zeit (für Erweiterung)
      txt$=""
      For tmpTXT=1 To Rand(5,20)
      txt$=txt$+Chr$(Rand(48,126))
      Next
      feld(wert,5)=txt$;                   Zufälliger String mit zufälliger Länge
      feld(wert,6)=1;                   Absoluter Farbwert (100%)
      feld(wert,7)=Rand(1,13);            Font?
   EndIf
   
   For j=0 To matrix
      If feld(j,0)>0 Then
         x=Int(feld(j,0))
         y=Int(feld(j,1))-18
         t=(MilliSecs()-Int(feld(j,2)))
         t2=(MilliSecs()-Int(feld(j,4)))
         staben=Int(feld(j,3))
         If t2>50 Then
            If staben<Len(feld(j,5)) Then feld(j,3)=Int(feld(j,3))+1 : feld(j,4)=MilliSecs()
         EndIf
         anzahl#=Float(staben)
         absC#=Float(feld(j,6))
         If staben>0 Then
         For k#=1 To anzahl#
            If k=Len(feld(j,5)) And absC>=0 Then
               absC=absC-hide
               feld(j,6)=absC
            EndIf
            If absC<0 Then absC=0
            c=Abs(k#/(anzahl#*2))*absC*255.
            Color 0,c,0
            If Int(feld(j,8))=1 Then Color 0,0,c
            If k=anzahl Then
               Color 0,255*absC,0
               If Int(feld(j,8))=1 Then Color 0,0,255*absC
            EndIf
            
            fontTMP=Int(feld(j,7))
            Select fontTMP
      Case 1 : SetFont font
      Case 2 : SetFont font2
      Case 3 : SetFont font3
      Case 4 : SetFont font4
      Case 5 : SetFont font5
      Case 6 : SetFont font6
      Case 7 : SetFont font7
      Case 8 : SetFont font8
      Case 9 : SetFont font9
      Case 10 : SetFont font6
      Case 11 : SetFont font6
      Case 12 : SetFont font6
      Case 13 : SetFont font6
            End Select
            far=FontHeight()
            If c>1 Then
               Text x,y+far*k,Mid$(feld(j,5),k,1),1,1
            Else
               For leer=0 To 8
                  feld(j,leer)=""
               Next
            EndIf
            
         Next
      EndIf
      EndIf
   Next
   Flip
Until KeyHit(1)
End
Frauen und Technik?
Männer und BHs?

Beides möglich.

Eingeproggt

BeitragDi, März 09, 2010 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Oft abgefragte Werte wie in deinem Code GraphicsWidth / Height und Millisecs kannst du am Anfang der Hauptschleife in Variablen Zwischenspeichern.

Außerdem würde ich die Fonts in einem Array organisieren - macht die Sache nicht wirlich schneller aber einfacher für dich.

mfG, Christoph.

btw: Bitte DAS mal berücksichtigen.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Nicdel

BeitragDi, März 09, 2010 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Probier die SpeedText-DLL, dass sollte helfen.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, März 09, 2010 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Text, Print und Write sind alles sehr langsamer Befehle unter BB. Packe dafür alle Fonts in ein Bild (per Laufzeit oder in eine Datei) und maskiere die schwarzen Stellen. Dann nur noch die Bilder anzeigen. Wäre schonmal sehr viel schneller.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group