Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
k4rsten

Anmeldungsdatum: 01.01.2010 Beiträge: 18 Wohnort: Dortmund
|
Verfasst am: 01.01.2010, 23:51 Titel: Kleine Grafikspielerei |
|
|
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 |
|
 |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 02.01.2010, 00:01 Titel: |
|
|
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 |
|
 |
micha
Anmeldungsdatum: 09.12.2005 Beiträge: 72
|
Verfasst am: 02.01.2010, 00:30 Titel: |
|
|
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
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 02.01.2010, 00:57 Titel: |
|
|
(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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 02.01.2010, 01:17 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 02.01.2010, 01:55 Titel: |
|
|
ö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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 02.01.2010, 02:06 Titel: |
|
|
...wird wohl so sein  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
k4rsten

Anmeldungsdatum: 01.01.2010 Beiträge: 18 Wohnort: Dortmund
|
Verfasst am: 02.01.2010, 21:43 Titel: |
|
|
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  _________________ you cannot kill what you did not create |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 03.01.2010, 14:34 Titel: |
|
|
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  _________________ 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 |
|
 |
k4rsten

Anmeldungsdatum: 01.01.2010 Beiträge: 18 Wohnort: Dortmund
|
Verfasst am: 03.01.2010, 23:40 Titel: |
|
|
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
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 )
Viele Grüße,
Karsten _________________ you cannot kill what you did not create |
|
Nach oben |
|
 |
|