Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Mark7788
Anmeldungsdatum: 21.01.2006 Beiträge: 77 Wohnort: Frankfurt Freebasic
|
Verfasst am: 27.04.2006, 10:08 Titel: Bild (Sprite) mit Cursortasten steuern/bewegen |
|
|
Hallo!
Ich hätt da mal wieder eine anfängerfrage, die mich schon lange beschäftigt. und zwar geht es um die tastatur. Ich will das sich ein bestimmtes bild was er auf dem bildschirm anzeigt nach oben bewegt, wenn ich die "feil nach oben" taste drücke. wie ist sowas möglich? wird irgendwas mit inkey usw sein oder? und x und y. Gibt es eigentlich eine Auflistung irgendwo wo steht wie welche Taste auf der Tastatur in Basic heißt ?
Danke schonmal!
Mfg
Markus
/edit dreael: Aussagekräftigerer Betreff verpasst _________________ www.DasMillionenQuiz.de.vu ; www.Mkse.de.vu |
|
Nach oben |
|
|
Lutz Ifer Grillmeister
Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 27.04.2006, 13:19 Titel: |
|
|
"Die Rechtschreibfehler sind absichtlich und dienen zur belustigung des lesers!"
"Belustigung" sowie "Lesers" groß - und gehören die Sinnfehler auch dazu?
Aber im Ernst:
In FreeBasic gibt es die Funktion Multikey, die dir den Status der Tasten zurückgibt (also gedrückt oder nicht gedrückt). Wenn du die gfxlib.bi mit einbindest, brauchst du Dir nichtmal die Tastencodes merken, sondern nur die Namen der Tasten SC_UP, SC_DOWN, SC_LEFT, SC_RIGHT, SC_ENTER, SC_NUMLOCK usw. usf.
Bild in ein mit imagecreate() erstellten Puffer, dann mit put() anzeigen lassen. Die Position in einem Koordinatenpaar x,y speichern, wie Du schon richtig erkannt hast, und bei Tastendruck entsprechen anpassen und Bild an der richtigen Stelle erneut anzeigen.
Lutz Ifer
ps: Dies ist ein Posting aus der Serie "Ich erkläre Dir absichtlich nicht genau, was Du machen musst, sondern gebe dir genügend Stichworte, um es selbst herauszufinden, weil man damit viiiieeeel mehr lernt. Solltest Du aber noch Fragen haben, immer her damit" _________________ Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft. |
|
Nach oben |
|
|
Heizi
Anmeldungsdatum: 19.01.2005 Beiträge: 309
|
Verfasst am: 28.04.2006, 10:18 Titel: |
|
|
ergänzend kann man noch sagen, das um das Bild nach rechts
zu bewegen du etwas zu der aktuellen x Koordinate
dazuaddieren musst. Nach links musst du etwas abziehen,
mit nach oben und unten bewegen geht es entsprechend mit
der Y Koordinate. |
|
Nach oben |
|
|
qbay
Anmeldungsdatum: 08.06.2008 Beiträge: 84
|
Verfasst am: 30.12.2011, 01:00 Titel: weitere frage zu multikey |
|
|
heyy ich hab dieses Thema gerade gefunden
und hatte noch ne frage zu MultiKey
wie genau funktioniert das eigentlich mit dem löschen des Puffer´s
da das MultiKey nicht von selber macht wie InKey
funktionieren meine Programme teilweise schlecht oder garnicht
aber auch in der Befehlsreferenz und auf anderen Seiten bin ich nicht fündig geworden.
Also was ich suche ist eine am besten ein Beispielprogramm in FreeBasic.
LG |
|
Nach oben |
|
|
Dusky_Joe
Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 30.12.2011, 15:41 Titel: |
|
|
Du wirst nicht drum herum kommen, den Puffer manuell zu löschen - benutz dazu einfach Inkey:
Code: | Do : Loop While Len(Inkey) |
Es werden also so viele Inkey-Abfragen durchgeführt, bis der Puffer leer ist; dann fährt das Programm normal fort. Achte auf die Position dieser Abfrage-Schleife, damit sie nicht übermäßig oft ausgeführt wird, und Leistung kostet.
Viele Grüße,
Dusky Joe
(der hier schon wieder viel zu lange nicht war...) _________________ 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 |
|
|
qbay
Anmeldungsdatum: 08.06.2008 Beiträge: 84
|
Verfasst am: 30.12.2011, 18:48 Titel: |
|
|
Code: |
Do : Loop While Len(Inkey)
|
Ich glaube ich kann mich dunkel errinern das ich diese Zeile so schonmal gesehen habe. Aber ich verstehe nicht genau wie sie funktioniert.
Was will man mit LEN() bei InKey denn abfragen?
und wie genau löscht das denn Puffer?
Kannst du dazu noch etwas sagen?
Das würde mir sehr weiter helfen. |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 30.12.2011, 18:57 Titel: |
|
|
Hallo!
qbay hat Folgendes geschrieben: | Was will man mit LEN() bei InKey denn abfragen? |
Damit fragt man ab, ob noch etwas im Puffer steht. Die Schreibweise ist in dem Fall etwas verkürzt.
LEN() gibt die Länge des jeweiligen Zeichens (oder ggf. 0) zurück. Während ein 'A' die Länge 1 besitzt, würde eine F-Taste (bspw. F5) einen zweistelligen Code (Länge = 2) hervorrufen.
Alternativ könnte man u.a. auch schreiben:
Code: | Do : Loop While ( Len(Inkey) <> 0 ) |
Das kann man aber deshalb vereinfachen, weil alle Werte ungleich 0 als "wahr" (true) interpretiert werden und der Wert 0 als "falsch" (false). D.h. so lange, wie LEN eine Zahl größer 0 liefert (z.B. 1 --> = "Im Puffer steht etwas."), ist die Schleifenbedingung "wahr" und die Schleife wird wiederholt.
qbay hat Folgendes geschrieben: | und wie genau löscht das denn Puffer? |
INKEY leert bei jedem Aufruf den Puffer und gibt den (aus dem Puffer entfernten) Inhalt zurück. Wenn man an dem Inhalt nicht interessiert ist, sondern bloß den Puffer leeren möchte, muss man die Rückgabe von INKEY keiner Variablen zuweisen.
Daraus ergibt sich: Die Schleife verwirft so lange den Puffer-Inhalt, bis keiner mehr da ist.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4599 Wohnort: ~/
|
Verfasst am: 30.12.2011, 20:30 Titel: |
|
|
Möglich wäre sonst auch
Code: | DO : LOOP UNTIL INKEY = "" |
oder
Code: | DO : LOOP WHILE INKEY <> "" |
Letztendlich läuft das alles auf dasselbe hinaus. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Dusky_Joe
Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 05.01.2012, 14:04 Titel: |
|
|
Arbeiten mit Zahlentypen - und insbesondere mit INTEGERn - sind aber um einiges schneller als STRING-Operationen.
Im einen Fall vergleichst du nämlich den Leerstring "" mit dem Inhalt des Tastaturpuffers, im anderen Fall wird nur eine Zahl (LEN) mit null verglichen.
LEN nicht explizit mit 0 zu vergleichen (also zu schreiben: ... WHILE LEN(INKEY) = 0) erspart dem Rechner nochmal einen zusätzlichen Arbeitsschritt. Wenn kein ' = ...' dabei steht, ist die Frage nur: Gleich oder ungleich null. Ansonsten muss ein extra-Schritt durchgeführt werden.
Macht meistens keinen Unterschied, ob du die (Menschen-verständlichere, aber langsamere) Variante von nemored anwendest, oder die LEN-Abfrage. Wenn die DO-LOOP-Schleife aber allzu oft vorkommt, kannst du dich damit ausbremsen.
Eher eine Stil-Frage also. Wenn du solche Tricks aber konsequent anwendest, kannst du - wenigstens bei großen Projekten - spürbar mehr Leistung rausholen.
Viele Grüße! _________________ 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 |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
|
Nach oben |
|
|
|