Julia Lohmann1 Direct Input. Julia Lohmann2 Möglichkeiten Umgang mit Tastaturen Zeigegeräten (Mäuse CAD) Joysticks (alles andere) Zuweisung einer Globally.

Slides:



Advertisements
Ähnliche Präsentationen
Imperative Programmierung
Advertisements

1. 2 Heute entwickeln wir eine kleine DirectInput-Bibliothek,auf die wir bei unseren zukünftigen Projekten immer wieder zurückgreifen werden. Die Themen.
Versandlösung Optimierung des Versandablaufes. Versandlösung Key Features Gruppierung von einzelnen Lieferpositionen zu einem Versandauftrag. Vereinfachte.
Demontageaufträge - Minusbuchen von Produktionsaufträgen
der Universität Oldenburg
der Universität Oldenburg
FH-Hof Einbindung von JavaScript Anweisungen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Modularisierungstechniken
Zusammenfassung Vorwoche
Excel Kurs Teil I Excel starten, Verknüpfungen auf dem Desktop anlegen. F. Bäumer.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
Wirtschaftsinformatik
Java programmieren mit JavaKara
Peripheriegeräte Erkennen und Funktionsweise
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Hi Zusammen! Ich möchte eine Graphik in PP erstellen, die wie ein Tacho funktioniert. Das heisst, das Tacho ist gegeben, aber der Pfeil soll sich durch.
Effiziente Algorithmen
Excel 97 Einführung - Start -.
Der Aufbau eines Computers
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Ändern von Merkmalen Geometrie Topologie Attribute.
Von der Planung bis zum Hauptmenü Seminar: Softwaretechnologie II Dozent: Prof. Manfred Thaller Referent: Jan Bigalke.
11. Tabellen 11.1 Grundlegende Tabellenbearbeitung
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Datenreihen erzeugen –
Referatsthema - Excel.
Grundkonzepte des Programmierens (mit ActionScript)
HG13_ Herzgen, Jung & Lorkowski1 Java Programmierung BlueJ Workshop.
Logische Struktur einer Präsentation
Programmieren in C Grundlagen C 2
PHP: Operatoren und Kontrollstrukturen
Berechnung der Scharen für Gaubenbacken
Musterlösung zum Arbeitsblatt Nr. 1
HG13_ Herzgen, Jung & Lorkowski1 Java Programmierung BlueJ Workshop.
A Workshop About this chapter General description Units Time Schedule
Historisch-Kulturwissenschaftliche Informationsverarbeitung Übung: Softwaretechnologie II / Visuelle Programmierung Dozent: Prof. Dr. Manfred Thaller WS.
HG13_ Herzgen, Jung & Lorkowski1 Java Programmierung BlueJ Workshop.
Stefan Nolting Andreas Goebels Larissa Timajev
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Die Maus Bilder: Microsoft Cliparts. Maustasten linke Maustaste rechte Maustaste Scrollrad.
PHPUG Karlsruhe 1. Juli 2009 Zend_ProgressBar und Zend_Tag_Cloud Ben Scholzen Software Entwickler DASPRiD's.
GrafStat Ausgabe 2009 Ein kurzer Überblick.
Konstruktoren.
Klausur „Diskrete Mathematik II“
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Analysen univariater Stichproben
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Geschicklichkeit und Reaktion:
Präsentation DBD-KostenKalkül IFC Stand Oktober 2016.
Reihungen Prof. Dr. Christian Böhm In Zusammenarbeit mit Gefei Zhang
Variable: typ varName = Wert Kiste: Art Aufschrift  Inhalt
Rechnungs- Korrekturen
Implementieren von Klassen
Felder in der Informatik
Objektorientierte Programmierung
Statische und Nichtstatische Methoden Properties / Eigenschaften
Herleitung der Formel zur Berechnung von Winkeln zwischen 2 Vektoren
 Präsentation transkript:

Julia Lohmann1 Direct Input

Julia Lohmann2 Möglichkeiten Umgang mit Tastaturen Zeigegeräten (Mäuse CAD) Joysticks (alles andere) Zuweisung einer Globally Unique ID (GUID) Unterscheidung zwischen Knöpfen und Achsen Mehrere Geräte können gleichzeitig aktiv sein

Julia Lohmann3 Vorbereitung DirectInput8Create → Objekt erstellen Instanz des Programms DirectX-Versionsnummer (0x0800) ANSI oder Unicode (Schnittstellenversion) Adresszuweisung per Zeiger Letzter Parameter unwichtig

Julia Lohmann4 Vorbereitung IDirectInput8::EnumDevices Einschränkung auf bestimmte Geräteklassen Zeiger auf die Rückruffunktion Übergebener Wert an die Rückruffunktion (meist unnötig) Einschränkung der Auflistung

Julia Lohmann5 Vorbereitung Rückruffunktion Alle Informationen des aktuellen Geräts abrufbar Rückgabewert bestimmt Fortsetzung → return DIENUM_CONTINUE → return DIENUM_STOP Übergebener Wert eigentlich unwichtig

Julia Lohmann6 Zugriff auf Geräte IDirectInputDevice8::SetDataFormat Zeiger auf ein vordefiniertes Format 1xTastatur, 2xMaus, 2xJoystick IDirectInputDevice8::SetCooperationLevel Fensterbeobachtung Zugriffsbestimmung IDirectInputDevice8::Aquire/Unaquire Zugriff aktivieren/deaktivieren

Julia Lohmann7 Tastatur Gerät nur mit ”Knöpfen” 265 Bytes – 1 Byte pro Taste Vordefinierte Tastenidizes DirectInput Key ”DIK_” → amerikanische Tastatur

Julia Lohmann8 Tastatur Initialisierung per CreateDevice SetDataFormat SetCooperationLevel Tastaturdaten abfragen Allgemeine Daten der Tastatur Durchgehen der einzelnen Tasten → gedrückt, wenn (Key[x] & 0x80) = 1

Julia Lohmann9 Tastatur Grenze der Tastatur 2-7 Tasten maximal gleichzeitig Anzahl je nach Lage der Tasten Lösbar durch Vorbelegung verschiedener Tasten Belegung durch Spieler

Julia Lohmann10 Maus Datenformate c_dfDIMouse und c_dfDIMouse2 3 Achsen (z = Rädchen) 4 bzw 8 Knöpfe abfragbar Achsen immer relativ Startposition muss festgelegt werden Ständige Positionsprüfung nötig

Julia Lohmann11 Maus Tasten analog zur Tastatur Individueller Mauszeiger für Anwendung möglich Kein Windows-Mauszeiger Andere Fenster können nicht benutzt werden (solange Anwendungsfenster aktiv)

Julia Lohmann12 Joystick Datenformate c_dfDIJoystick und c_dfDIJoystick2 6 Achsen 2 Schieberegler 4 Möglichkeiten für den Perspektivenregler (POV) 32 bzw 128 Knöpfe Extra Geschwindigkeit der Achsen und Schieberegler Ebenso Beschleunigung

Julia Lohmann13 Joystick Achsen immer absolut Achsen kehren automatisch zurück Ebenso der Perspektivenregler Besonderheit Schieberegler Kehren nicht in Ursprung zurück Hauptsächlich für Schubkontrolle verwendet

Julia Lohmann14 Joystick IDirectInputDevice8::EnumObjects Ähnlich wie IdirectInput8::EnumDevices Zeiger auf Rückruffunktion Benutzerdefinierter Wert Einschränkung der Auflistung Rückruffunktion Erhält Zeiger auf Objektdaten Wichtig: dwType-Wert (Verhaltensregulierung möglich)

Julia Lohmann15 Joystick IDirectInputDevice8::SetProperty Achseneinstellung Zeiger auf Struktur → Teil jeder eigenschaftsspezifischen Struktur Struktur einer Achseneinstellung Größe der eigenschaftsspezifischen Struktur in Bytes Gesamte Strukturgröße in Bytes Zu veränderndes Objekt Interpretation des Objekts

Julia Lohmann16 Joystick Achsenmodus → Absoluter oder relativer Modus Achsenskalierung → Gerätdatenumwandlung in passendes Schema Die tote Zone → Bereichdefinition für Bewegungsreaktion Sättigung → Maximalwertdefinition vor physischer Grenze

Julia Lohmann17 Datenmöglichkeiten Gepufferte Daten Verspeichern jeglicher Aktionen drücken/loslassen von Knöpfen, Bewegen der Achsen etc Direkte Daten Stand zum Zeitpunkt der Abfrage Aktionen zwischen Abfragen werden ignoriert Akzeptable Spielgeschwindigkeit

Julia Lohmann18 (vorläufiges Ende des Themas)

Julia Lohmann19 Zusammenfassung Im Normalfall werden alle Geräte durchsucht Jedes Gerät muss anders behandelt werden Kein Problem, wenn das zu benutzende Gerät festgelegt ist Freie Belegung problematisch → Joystick nicht mit Maus einfach austauschbar

Julia Lohmann20 Freie Belegung - Theorie Analoge Knöpfe definieren variiert immer zwischen 1 und 0 Achsen werden in links und rechts aufgeteilt Schieberegler müssen wieder auf 0 gesetzt werden, sobald Bewegung abbricht POV wird in vier Knöpfe umgewandelt trotzdem Vordefinition aller Knöpfe unabhängige Abfrage aller Knöpfe

Julia Lohmann21 Initialisieren Maus und Tastatur ohne Rückruffunktion Platzreservierung für 121 Knöpfe (Tastatur: 107; Maus: 14) und für 2 Geräte (einfachere Ansteuerung) Durchzählen der Joysticks Mithilfe einer Rückruffunktion und Variablenübergabe Geräteinformationen per Zahlenindex verspeichert

Julia Lohmann22 Initialisieren Rückruffunktion überprüft Gerätetyp bei identifiziertem Typ, wird dieser initialisiert InitKeybord normal per CreateDevice Index ist per Standard 0 InitMouse ebenfalls Index ist per Standard 1

Julia Lohmann23 Initialisieren InitJoystick Benötigten Speicherplatz erweitern (tbMemReAlloc) Achsen kalibrieren Variablen für max. 2 Positionen eines Schiebereglers Schreibarbeit bei allen: Definition der möglichen analogen Knöpfe

Julia Lohmann24 Abfrage tbDirectInput::GetState ruft die Gerätespezifischen Abfragen auf Index muss übergeben werden bei Joysticks muss auch die Nummer angegeben werden (1. Joystick = Index-2) GetKeybordState kennt mehr Knöpfe, als zugewiesen (256 ↔ 107) → eigene zu testende Tabelle anlegen (andere werden ignoriert)

Julia Lohmann25 Abfrage GetMouseState Achsen in links und rechts geteilt Bewegung nach rechts setzt ”x-Achse-positiv” auf 1 → Berechnung: Position / -15 GetJoystickState ”erweiterte Maus” → Schieberegler → POV-Controller

Julia Lohmann26 Abfrage Schieberegler Differenz zwischen alter und neuer Position wichtig Variable auf beliebigen negativen Wert setzen → wichtig für erstes Abfragen → muss negativ sein, damit es auf 0 skaliert wird absolute Position feststellen und verspeichern

Julia Lohmann27 Abfrage POV-Controller Richtungsbedingte Controller wie Achsen umwandeln frei drehbare mit sin und cos → Grad in Rad umrechnen (TB_DEG_TO_RAD) → sin und cos berechnen (sinf(fAngle) ← beides float) → Unterteilung in vier Bewegungsbereiche

Julia Lohmann28 Zuweisen tbDirectInput::WaitForButton Startverzögerung → Zeit vor erster Abfrage von GetPressedButton() maximale Zeit für eine Eingabe → wenn sie abgelaufen ist und GetPressedButton() nichts gefunden hat, wird -1 zurück gegeben

Julia Lohmann29 Vielen Dank.