Problem mit meinem Script [Problem gelöst]
Übersicht

![]() |
NovaBetreff: Problem mit meinem Script [Problem gelöst] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe ein Problem bei meinem Code.
Eigendlich soll diese Funktion Buchstaben aus einem Satz immer nach einer gewissen Zeit anzeigen. Wie als würden sie gerade erst mit der Tastatur geschrieben werden. Dazu habe ich eine Funktion geschrieben. Jetzt braucht man nurnoch mit "echo satz$" etwas abschicken, das wird dann buchstabenweise auf den Bildschirm gebracht. Das Problem jetzt ist aber, das irgendwie immer zwei Buchstaben geschrieben werden und dann erst gewartet wird. Ebenso funktioniert das ganze nur ein mal. Beim zweiten "echo" wird einfach nichts gemacht. Anscheind funktioniert das "Exit" nicht richtig. (Vermute ich nur.) Da ich bereits mehrmals gelesen habe das "delay" als Zeitbegrenzung viel Leistung frisst wollte ich auf "WaitTimer" umsteigen. Vor allem auf alten Computern soll das vorkommen. Und zuletzt bin ich mir nicht sicher ob mein Code wirklich optimal geschrieben wurde. Ich habe zwar Erfahrung mit PHP allerdings ist mit BlitzBasic neu. Hier also meine Fragen: -> Wieso werden immer zwei Buchstaben und nicht immer einer ausgegeben? -> Wieso funktioniert "echo" nur einmal, wird die "Repeat/Forever"-Schleife vielleicht nicht richtig beendet? -> Ist "delay" wirklich der Tod für alte Computer wenn man ihn als Zeitbegrenzung benutzt? -> Sollte ich lieber "delay" statt "CreateTimer/WaitTimer" nehmen? -> Kann man den Code sonst noch auf irgendeine Art optimieren?[/list] Mit freundlichen Grüßen, Nova. Der Code: Code: [AUSKLAPPEN] Graphics 640, 480, 32, 2
Global kurz = CreateTimer(2) Global lang = CreateTimer(1) start = MilliSecs() echo "Ein kleiner Test, hoffentlich klappt es!" echo "Test Nummer 2 ist das hier, yippie!" ende = MilliSecs() zeit = ende - start WaitKey echo "Und Nummer 3 folgt sogleich. Zeit:" +zeit WaitKey End Function echo(satz$) zahl = Len(satz$) spalte = 0 Repeat zeichen$ = Mid(satz$, spalte+1, spalte+1) Text (spalte*8)+1, (zeile*13)+1, zeichen$ spalte = spalte+1 If spalte+1 >= zahl Then Exit EndIf WaitTimer kurz Forever zeile = zeile + 1 WaitTimer lang End Function |
||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
- Zuletzt bearbeitet von Nova am Di, Aug 19, 2008 8:25, insgesamt einmal bearbeitet
Phlox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] Graphics 640, 480, 32, 2
Global kurz = CreateTimer(5) Global lang = CreateTimer(4) start = MilliSecs() echo "Ein kleiner Test, hoffentlich klappt es!" echo "Test Nummer 2 ist das hier, yippie!" ende = MilliSecs() zeit = ende - start WaitKey echo "Und Nummer 3 folgt sogleich. Zeit:" +zeit WaitKey End Function echo(satz$) zahl = Len(satz$) spalte = 0 Repeat zeichen$ = Mid(satz$, spalte+1, 1) Write zeichen$ spalte = spalte+1 If spalte+1 >= zahl Then Exit EndIf WaitTimer kurz Forever zeile = zeile + 1 WaitTimer lang End Function Ist jetzt aber leider mit Write und Print. Delay ist in diesem Fall besser, da man es genauer einstellen kann. |
||
![]() |
Nova |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm, zwei Probleme hat deine Version (Aber zum Glück weniger als meine! ![]() > Der Timer "lang" funktioniert irgendwie nicht, der zweite Text kommt sofort nach dem ersten. (Ist nicht tragisch, werde ich mit "delay" lösen.) > Ich brauche für das Programm, in dem ich dieses Script nutzen möchte, "Cls". Blöder weise wird der Text dann nicht wieder am Anfang geschrieben, sondern eine Zeile weiter, wo der letzte Text stand. Das war auch der einzige Grund, wieso ich "Text" genommen habe. |
||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
1. du nutzt kein Script. Blitz ist eine Programmiersprache, nicht eine Scriptsprache -> code
2. Delay hält das ganze programm an. Sowas macht man normalerweise indem man zeitdifferenzen misst (millisecs). 3. Wenn du mit CLS dafür sorgen willst das alles an der alten position ist -> neu zeichnen wenn es 1 - x zeilen rauf rutschen will musst du die text zeilen irgendwo speichern (ich rate zu types) und dann einfach zählen auf dem wievielten type du bist und diese zahl (i) * zeilenhöhe für die y koordinate verwenden. dann kommts schön oben ran immer wieder |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Nova |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dreamora hat Folgendes geschrieben: 1. du nutzt kein Script. Blitz ist eine Programmiersprache, nicht eine Scriptsprache -> code
Auch gut. Dreamora hat Folgendes geschrieben: 2. Delay hält das ganze programm an. Sowas macht man normalerweise indem man zeitdifferenzen misst (millisecs).
Da ich allerdings keine Animationen oder ähnliches habe ist "delay" gar nicht mal so falsch. Dreamora hat Folgendes geschrieben: 3. Wenn du mit CLS dafür sorgen willst das alles an der alten position ist -> neu zeichnen
wenn es 1 - x zeilen rauf rutschen will musst du die text zeilen irgendwo speichern (ich rate zu types) und dann einfach zählen auf dem wievielten type du bist und diese zahl (i) * zeilenhöhe für die y koordinate verwenden. dann kommts schön oben ran immer wieder Genau das macht ich doch oben! Immer wenn ich z. b. "Cls" schreibe werde ich natürlich auch die Variable "zeile" wieder auf 0 setzen. Deine Methode ist zu umständlich. Indem ich "zeile" auf die gewünschte Zeile setze kann ich das auch machen. Ich bin Anfänger, da sinst Types der Horror. Wobei ich noch kein gutes Tutorial für die gefunden habe. |
||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kannst auch Dim-Felder nehmen, die verbrauchen zwar unter umständen etwas mehr Speicher als benötigt und du musst sie vordefinieren, sind aber einfach zu handhaben. ;D
Code: [AUSKLAPPEN] ;Grafikmodus Graphics 800,600,0,2 ;BackBuffer setzen SetBuffer BackBuffer() ;Konstanten für Zeilen. Const zeilen%=99 ;Das Dim-Feld Dim zeichen$(zeilen) ;Zeilenvariable zeilenzaehler%=0 While Not KeyHit(1) ;Start Hauptschleife Text 500,0,"Leertaste für neuen Text!" If KeyHit(57) Then ;Wenn Leertaste gedrückt wurde... zeichen$(zeilenzaehler)="Lolwut h4x!" ;Ins Feld eintragen zeilenzaehler=zeilenzaehler+1 ;Zeilencounter erhöhen EndIf For i=0 To zeilenzaehler ;Forschleife, fürt sich zeilenzählermal aus. ;D Aktueller Schleifendurchlauf wird in "i" gespeichert. Text 0,12*i,zeichen$(i) ;Das Zeugs zeichnen. Next ;Ende Forschleife Flip ;Buffer vertauschen Cls ;Buffer löschen Wend ;Ende Hauptschleife End ;Ende Programm Ich hoffe ich hab dein Problem richtig verstanden, kam auch schon vor dass ich reine shice gequatscht hab :o EDIT: Mal wieder voll am Thema vorbeigeredet, sry. ._. |
||
![]() |
Nova |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das problem wurde gelöst. Ich habe mir Mid nochmal angeguckt, leider habe ich erst dann gemekrt das die zwei letzten Parameter nicht dafür sind von wann bis wann kopiert werden soll sondern von wann wieviele Zeichen.
Ist ein bischen schwer zu kapieren aber egal, danke für die Hilfe! ![]() @The_Nici: Du hast es wenigstens versucht! |
||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group