Text ersetzen & Frage zur Eingabe (Tastatur oder Maus)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

neolein

Betreff: Text ersetzen & Frage zur Eingabe (Tastatur oder Maus)

BeitragDi, Okt 30, 2007 10:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Morgen,

1.
Ich hoffe das ist eine einfache Anfängerfrage, wie lautet der Befehl, wenn ich einen Text and die Stelle eines anderen setzen will, also z.B. ein Countdown o.ä.


2.
Das Zweite ist schon unangenehmer, wenn ich z.B. aus einer Schleife mit einem Mausklick oder bei Input auf eine bestimmte Taste warte, damit das Programm weitergeht (oder sich wiederholt), dann löst diese Aktion meistens noch andere Vorgänge aus, die ich gar nicht haben möchte.

Z.B. Repeat Until KeyHit(14) bewirkt, daß ich bei drücken der Leertaste zwar die Schleife verlasse, aber der Corsor bei der nächsten Halteposition um eine Stelle vorrückt; oder If Keyhit(2) Exit, daß bei der nächsten Eingabeaufforderung 1 steht.
Mit anderen Worten: der Speicher merkt sich, was ich z.B. falsch gedrückt habe, druckt aber das Falsche nach Betätigung der richtigen Taste aus.

Bei MouseHit() ist es ähnlich, will ich z.B. mit der linken Taste lediglich eine Schleife verlassen oder ein Programm fortführen, wird diese Aktion an der nächsten Stelle, an der ein Mausklick gefordert wird, ausgeführt.

Gibt es sowas, wie ein Deaktivierungbefehl?

Danke, Christian
 

Gast

BeitragDi, Okt 30, 2007 10:55
Antworten mit Zitat
 

neolein

BeitragDi, Okt 30, 2007 11:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, und danke für den Hinweis, habe Robs Kurs rauf und runter gelesen, aber wahrscheinlich mal wieder nach den falschen Stichwörtern gesucht Rolling Eyes

Thunder

Betreff: Re: Text ersetzen & Frage zur Eingabe (Tastatur oder Mau

BeitragDi, Okt 30, 2007 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
neolein hat Folgendes geschrieben:
Guten Morgen,

1.
Ich hoffe das ist eine einfache Anfängerfrage, wie lautet der Befehl, wenn ich einen Text and die Stelle eines anderen setzen will, also z.B. ein Countdown o.ä.



Falls deine 1.Frage schon durch den Kurs beantwortet ist brauchst du dir das nicht durchlesen.
Ich hätte das so gemacht:
Idea

Text 0,0, "Hallo"
cls
Text 0,0,"Ciao"
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

neolein

BeitragDi, Okt 30, 2007 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Thunder,

damit geht es natürlich, allerdings lösche ich damit auch gleich Alles, was ich auf meinem Bidschirm abgebildet habe,also z.B. Grafiken, Zahlen, Schriften etc. aber korrigier mich, wenn das nicht stimmt

BladeRunner

Moderator

BeitragDi, Okt 30, 2007 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Programm läuft in einer Schleife. Oder sollte das, besser gesagt.
In jedem Schleifendurchlauf wird alles neu gezeichnet.
Wenn Du dann also einen Text ersetzen oder löschen willst, geschieht das automatisch, da ja nur der aktuelle Inhalt gezeichnet wird.

Beispiel:

Code: [AUSKLAPPEN]
graphics 640,480
setbuffer backbuffer()

repeat
   if keyhit(57) then  ;Leertaste gedrueckt?
      status = 1 - status
   endif

   if status
      text 0,0,"Ausgabe 1"
   else
      text 0,0,"Ausgabe 2"
   endif

flip
cls

until keyhit(1)
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

DarkDragon-1993

BeitragDi, Okt 30, 2007 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt schon, aber wenn du alles mit Doubble Buffering machst, könntest du dem Countdown einer Variablen zuweisen, alles in der Schleife malen und jedes Mal, wenn es gelöscht wird, wird alles wieder gemalt und der neue Text des Timers wird durch das verändern der Variable auch anders gestallten.

Hoffe, du blickst da durch, ich tus irgendwie nicht mehr.

mfG - DarkDragon-1993
 

neolein

BeitragDi, Okt 30, 2007 16:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Blade,

ich verstehe zwar was du meinst, aber wenn ich meinetwegen ein Brettspiel programmiere, was im Moment der Fall ist, dann läuft im ersten Teil der Schleife ein aufwendiges Rechenprogramm, was zu einem neuen Layout des Brettes führt, meinetwegen sinds jetzt 20 Figuren anstatt 15.

So müßte ich bei jedem Durchlauf der Schleife meine Rechenoperation nochmals durchführen lassen,
z.B. ist doch Schach so ein Bespiel, sagen wir unter dem Brett ist ein Timer, der die Zeit in Sekundenschritte rückwärts anzeigt, heißt das, daß das Brett jede Sekunde neu gezeichnet werden muß?

Ich könnte zwar den Bildspeicher irgendwo ablegen, aber mit jedem Durchlauf wird das Spiel neu gestartet.

In Omikron Basic (Atari) hatte ich damals dieses Problem nicht, der Text wurde einfach ersetzt, wenn ich ihn an die selbe Stelle geschrieben habe, in Blitzbasic wird der Text, visuell, übereinander gestapelt.

BladeRunner

Moderator

BeitragDi, Okt 30, 2007 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das Brett wird bis idR 60 mal in der Sekunde neugezeichnet, was auch kein Problem ist - das geht Rucki-zucki. Es ist aufwändiger sich irgendwelche anderen Methoden aus den Rippen zu leiern um Teile zu löschen oder zu ersetzen.
Deine Spiellogik musst Du ja nicht - falls sie so aufwändig ist- in jedem Durchlauf der Schleife berechnen lassen, hier ist es ja möglich mit Schaltervariablen oder Timern zu arbeiten.

Beispiel
Code: [AUSKLAPPEN]

if time < millisecs()+1000 then
   time = millisecs()+1000
   text 0,10,"ich werde nur einmal pro sekunde aufgerufen!"
endif


Bau das einfach mal im obigen Code in der Repeat mit ein, du wirst sehen das einmal pro Sekunde kurz der Text aufflimmert.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group