|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Dusky_Joe
Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 11.01.2005, 21:19 Titel: Joystick-Abfrage ist zu langsam! |
|
|
Hi Leute!
Ich schreibe gerade an einem Spiel, das durch Tastatur, Maus und Joystick bedienbar sein soll.
Ich verwende die Befehle, STICK() und STRIG(), die meines Wissens nach die Einzigen Joystick-Befehle sind.
Gibt es evtl. eine schnellere Methode, etwa mit INP/OUT oder PEEK()/POKE ?
Für Antworten bedanke ich mich schon mal im Voraus!
Ciao! |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 12.01.2005, 01:35 Titel: |
|
|
Hallo
Die Adresse des Joystickport-Registers ist dezimal 513 bzw. hex. 201. Da die Auswertung allerdings etwas umständlich ist, bezweifle ich, dass es damit schneller geht. Leider habe ich meinen Rechner mit Midieingang ausgeliehen und kann es nicht testen.
Der Port funktioniert intern so: Wird in das Register mit
OUT 513, 0
irgendwas geschrieben (es geht dabei nur um den Schreibzugriff - was geschrieben wird ist egal und köntte ausser 0 auch etwas anderes sein), dann werden im rechner vier Kondensatoren entladen und die dazugehörigen Steuerbits auf 1 gesetzt. Die Hebelstellung des Joysticks wird mit Potentiometern erfasst, über die diese Kondensatoren aufgeladen werden. Haben sie eine bestimmte Spannung erreicht, wird das passende Bit des Registers auf 0 gesetzt. Du musst also mit einer Schleife die Zeit messen, die zwischen dem Schreibzugriff und dem Wechsel von 1 auf 0 des passenden Bits vergeht.
Neben diesen vier quasi-analogen Eingängen auf Bit 0-3 im Register, gibt es noch vier digitale, z.B für den Feuerknopf. Deren Zustand kannst du mit Bit 4-7 abfragen. EIn einfaches Programm zum auslesen könnte so aussehen:
Code: | CLS
FOR bit = 0 TO 7
bitwert(bit) = 2 ^ bit
NEXT
DO
LOCATE 1, 1
FOR poti = 0 TO 3
stellung(poti) = 0
OUT 513, 0
DO
stellung(poti) = stellung(poti) + 1
LOOP UNTIL (INP(513) AND bitwert(poti)) = 0 OR stellung(poti) = 10000
PRINT "Poti"; poti; ": "; stellung(poti)
NEXT
PRINT
FOR taste = 0 TO 3
zustand(taste) = (INP(513) AND bitwert(taste + 4)) / bitwert(taste + 4)
PRINT "Taste"; taste; ": ";
IF zustand(taste) = 0 THEN PRINT "AN " ELSE PRINT "AUS"
NEXT
LOOP UNTIL INKEY$ = CHR$(27) |
Wie gesagt bezweifle ich,dass das schneller geht. Die Werte für stellung müsstest du dann noch an deinen Joystick anpassen (welcher Wert wird für Vollausschlag nach links, rechts, oben und unten erreicht). Wie gesagt kann ich's im Moment nicht testen, aber ich kann mich erinnern, dass die Werte zudem stark schwanken und ich z.B. den Durchschnitt aus den letzten zehn Messungen oder so neghmen musste, damit die Anzeige der Potentiometerstellung nicht so stark flackerte. Etwas umständlich, aber auch in anderer Hinsicht interessant, da viele Arten von Licht-, Temperatur- und anderen Sensoren über die Änderung ihres Widerstands funktionieren und so ohne weitere Hardware direkt an den PC angeschlossen und über ein QB-Programm ausgewertet werden können.
Mich würde zudem mal interessieren, ob das unter XP noch läuft. Vielleicht probiert's mal jemand aus und schreibt hier was dazu.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
|
|
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.
|
|