Farbverlauf

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Nescio

Betreff: Farbverlauf

BeitragSa, Okt 20, 2007 0:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, grade eine Funktion geschrieben, die einem einen zeitgesteuerten Farbverlauf ermöglicht. Vielleicht hifts irgendjemandem.

Die Funktion bekommt als Übergabeparameter nur einen String und setzt dann drei globale Variablen r,g,b auf die Farbwerte:

Code: [AUSKLAPPEN]
Farbverlauf("1000,255,0,0;2000,255,255,000")
Color r,g,b


Damit wird ein 1 Sekunde dauernder Verlauf von Rot nach Gelb und ein 2 Sekunden dauernder Verlauf von Gelb nach Rot erzeugt.


Um die Funktion benutzen zu können, muss sie am Anfang eingebunden werden:
Code: [AUSKLAPPEN]
Include "Farbverlauf.bb"


hier der komplette Code:


Code: [AUSKLAPPEN]
;Farbverlauf.bb
Global r,g,b
Global start
Global pos=1

Function farbverlauf(v$,reset=0)

   If timer=0 Or reset Then timer=MilliSecs()

   If reset Then pos=1
   
   
   time=MilliSecs()-start
   
   colourtime=Int(Mid$(v$,pos,4))
   
   If time>colourtime Then
      pos=pos+17
      If pos>Len(v$) Then pos=1
      
      start=MilliSecs()
      colourtime=Int(Mid$(v$,pos,4))
      time=MilliSecs()-start
      
   EndIf
   
   
   timeleft=colourtime-time
   
   npos=pos+17
   If npos>Len(v$) Then npos=1
   
   pr=Int(Mid$(v$,pos+ 5,3))
   pg=Int(Mid$(v$,pos+ 9,3))
   pb=Int(Mid$(v$,pos+13,3))
   
   nr=Int(Mid$(v$,npos+ 5,3))
   ng=Int(Mid$(v$,npos+ 9,3))
   nb=Int(Mid$(v$,npos+13,3))
   
   r = ((pr*timeleft)+(nr*time))/colourtime
   g = ((pg*timeleft)+(ng*time))/colourtime
   b = ((pb*timeleft)+(nb*time))/colourtime
   
End Function   


Viel Spaß damit

MfG

Nescio
Quod est faciendum? Nescio!

Eingeproggt

BeitragSa, Okt 20, 2007 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habs testen wollen, aber gleich am Anfang kommt ein Fehler "Integer divided by zero" in der Zeile
Code: [AUSKLAPPEN]
r = ((pr*timeleft)+(nr*time))/colourtime

kannst du das nicht noch schnell ausbessern?

Und dabei könntest du gleich der Funktion mehrere Parameter übergeben, nicht nur einen String. Das macht die sache langsamer und irgendwie unnötig umständlich, weil man müsste sich erstmal aus den Parametern einen String basteln, und den dann von deiner Funktion zerlegen lassen...

Dann nochwas:
Die Zeile
Code: [AUSKLAPPEN]
pos=pos+17

ist dich etwas "steif"... So wie ich das verstehe, kann man keinen Farbvelauf mit 5stelliger Zeit zeichnen?
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Nescio

BeitragSa, Okt 20, 2007 16:16
Antworten mit Zitat
Benutzer-Profile anzeigen
da ich bis jetzt nur farbverläufe < 10sek brauchte hats mir gereicht, ansonsten kannst du dir die Funktion gerne deinen Bedürfnissen entsprechend umbauen.

Das mit dem "Integer divided by zero" liegt wohl daran, dass du bei der Zeit AUF JEDEN FALL VIER STELLEN haben musst. Wenn du nun Zeiten von zB einer halben Sekunde angeben willst, schreibst du "0500".

Wie gesagt, ich war halt einfach zu faul, die Funktion "idiotensicher" zu machen, aber wenn du willst, kannst du das gerne übernehmen.

MfG

Nescio
Quod est faciendum? Nescio!

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group