Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Kleine Grafikspielerei

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
k4rsten



Anmeldungsdatum: 01.01.2010
Beiträge: 18
Wohnort: Dortmund

BeitragVerfasst am: 01.01.2010, 23:51    Titel: Kleine Grafikspielerei Antworten mit Zitat

Hallo Leute!
Ich komme gerade von VisualBasic und Python zu FreeBasic und arbeite mich mit relativ sinnfreien Beispielen ein. Um ein bisschen mit Grafikfenstern vertraut zu werden, habe ich einfach mal versucht einen Kreis zu Programmieren, der sich je nach Tastendruck (WASD - wie in Ego-Shootern) bewegt.

Also mal ran an den Code:
Code:
DIM AS INTEGER x, y
DIM AS STRING key

SCREEN 9

x = 10
y = 10
DO
    CIRCLE(x,y), 10
    key = INKEY
    IF key = "w" THEN
        y = y - 2
    ELSEIF key = "a" THEN
        x = x - 2
    ELSEIF key = "d" THEN
        x = x + 2
    ELSEIF key = "s" THEN
        y = y + 2
    END IF
LOOP WHILE key <> "q"


Wie Sie sehen, sehen Sie nichts (besonderes).
Allerdings wird der Kreis nun an jeder Stelle gezeichnet, wo er mal war.

Wenn ich nun hinter die IF-Abfrage ein "CLS" bzw. "CLS 1" setze, haben wir allerdings ein suboptimales Ergebnis mit ekelhaften Rucklern. Gibt´s da eine elegantere Lösung? Mit Sicherheit. Nur warum komme ich da nicht drauf?

Wäre echt super, wenn Ihr mit helfen könnt!

Viele Grüße aus Dortmund,

Karsten
_________________
you cannot kill what you did not create
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 02.01.2010, 00:01    Titel: Antworten mit Zitat

Code:
DIM AS INTEGER x, y
DIM AS STRING key

SCREEN 9

x = 10
y = 10
DO
    CIRCLE(x,y), 10
    key = INKEY
    IF key = "w" THEN
        CIRCLE(x,y), 10,rgb(0,0,0)
        y = y - 2
    ELSEIF key = "a" THEN
        CIRCLE(x,y), 10,rgb(0,0,0)
        x = x - 2
    ELSEIF key = "d" THEN
        CIRCLE(x,y), 10,rgb(0,0,0)
        x = x + 2
    ELSEIF key = "s" THEN
        CIRCLE(x,y), 10,rgb(0,0,0)
        y = y + 2
    END IF
LOOP WHILE key <> "q"



Das sollte dein Problem beheben.
Es wird einfach der alte Kreis schwarz übermalt bevor die Koordinaten geändert werden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
micha



Anmeldungsdatum: 09.12.2005
Beiträge: 72

BeitragVerfasst am: 02.01.2010, 00:30    Titel: Antworten mit Zitat

Hallo Karsten,
Dein OS sollte auch noch etwas Zeit für andere Task bekommen daher ein Sleep() in der Hauptschleife wäre shon ganz nett.

Grüsse aus Essen zwinkern

Micha
Code:
DIM AS INTEGER x, y
DIM AS STRING key

SCREEN 9

x = 10
y = 10
DO
  ScreenLock:cls
  CIRCLE(x,y), 10
  key = INKEY
  IF key = "w" THEN
    y = y - 2
  ELSEIF key = "a" THEN
    x = x - 2
  ELSEIF key = "d" THEN
    x = x + 2
  ELSEIF key = "s" THEN
    y = y + 2
  END IF
  ScreenUnlock
  Sleep(5)
LOOP WHILE key <> "q"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 02.01.2010, 00:57    Titel: Antworten mit Zitat

(Wobei ein SLEEP 1 auch schon reichen würde; Hauptsache ist ein klein bisschen SLEEP)
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 02.01.2010, 01:17    Titel: Antworten mit Zitat

Um die SLEEP-Sache noch zu präzisieren: Beides wartet auf Linux-Systemen ca. 10 Sekunden auf auf Windows-Systemen 15 Sekunden lang.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 02.01.2010, 01:55    Titel: Antworten mit Zitat

öhm ... 10 Millisekunden?
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 02.01.2010, 02:06    Titel: Antworten mit Zitat

...wird wohl so sein Zunge rausstrecken
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
k4rsten



Anmeldungsdatum: 01.01.2010
Beiträge: 18
Wohnort: Dortmund

BeitragVerfasst am: 02.01.2010, 21:43    Titel: Antworten mit Zitat

Vielen Dank für eure Antworten!
Die Lösung mit dem kleinen schwarzen Kreis funktioniert auch super, jedoch scheint mir, rein vom Gefühl her die Screenlock-Variante schöner zu sein.

Also mit einem SLEEP 10 kann man immer noch ruckelfrei arbeiten bzw. den Kreis bewegen. Von daher sollte das wohl ok sein grinsen
_________________
you cannot kill what you did not create
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 03.01.2010, 14:34    Titel: Antworten mit Zitat

Wenn du mal was anderes als nen schwarzen bzw. einfarbigen Hintergrund hast, wirst du mit GET und PUT arbeiten müssen. Kennst du die freeBASIC Befehlsreferenz?
==> http://www.freebasic-portal.de/befehlsreferenz/
==> http://www.freebasic-portal.de/befehlsreferenz/get-grafik-287.html
Da drin sind gute Beispiele zu den Befehlen. (Gemeint sind die Varienten GET (Grafik) und das PUT-Analogon; die beiden Schlüsselwörter gibt's auch für die Arbeit mit dem Dateisystem.)

Viel Spaß mit freeBASIC und willkommen in der Community!


// NACHTRAG:
Hier in der Community ist das Du üblich. Ich hoffe, Sie empfinden das nicht als Indiskretion, dass ich Sie gerade - der Gewohnheit halber - ebenfalls geduzt habe lächeln
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
k4rsten



Anmeldungsdatum: 01.01.2010
Beiträge: 18
Wohnort: Dortmund

BeitragVerfasst am: 03.01.2010, 23:40    Titel: Antworten mit Zitat

Hey,

vielen dank für die Willkommensheissung in der Community.
PUT und GET habe ich im Zusammenhang mit Grafiken schonmal gehört, muss mich da nochmal reinknien. Danke für die Links lächeln

Der Satz "Wie Sie sehen, sehen Sie nichts" war nur so Blöd dahergesagt, natürlich hab ich kein Problem damit, dass hier gedutzt wird (wird ja in Boards häufiger - mach ich ja auch lachen )

Viele Grüße,

Karsten
_________________
you cannot kill what you did not create
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz