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:

Bild (Sprite) mit Cursortasten steuern/bewegen

 
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
Mark7788



Anmeldungsdatum: 21.01.2006
Beiträge: 77
Wohnort: Frankfurt Freebasic

BeitragVerfasst am: 27.04.2006, 09:08    Titel: Bild (Sprite) mit Cursortasten steuern/bewegen Antworten mit Zitat

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 happy

/edit dreael: Aussagekräftigerer Betreff verpasst
_________________
www.DasMillionenQuiz.de.vu ; www.Mkse.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen MSN Messenger
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 27.04.2006, 12:19    Titel: Antworten mit Zitat

"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 böse 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
Benutzer-Profile anzeigen Private Nachricht senden
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 28.04.2006, 09:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 30.12.2011, 00:00    Titel: weitere frage zu multikey Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



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

BeitragVerfasst am: 30.12.2011, 14:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 30.12.2011, 17:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 30.12.2011, 17:57    Titel: Antworten mit Zitat

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
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



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

BeitragVerfasst am: 30.12.2011, 19:30    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



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

BeitragVerfasst am: 05.01.2012, 13:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 05.01.2012, 16:04    Titel: Antworten mit Zitat

ob die in diesem falle bedeutend schneller is, ist sehr fraglich. denn in der rtlib wird genau diese lengenabfrage auch vorgenommen, bevor der string selbst verglichen wird: http://fbc.svn.sourceforge.net/viewvc/fbc/trunk/FreeBASIC/src/rtlib/libfb_str_comp.c?revision=5581&view=markup

hier dürfte der Vorteil nur einige wenige Instruktionen betragen.

MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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