|
HH |
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 22.06.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.07.2011, 10:17
Titel: Tastaturlenkung
|
|
Hallo zusammen,
ich habe ein rudimentäres Rennspiel programmiert indem ein Punkt eine vorgegebene Strecke abfährt, indem ich schnell Plots übereinander anzeige. Mein nächster Schritt ist jetzt mit Tastendrücken Einluss auf die Fahrtrichtung zu nehmen und das in Echtzeit. Eigentlich bräuchte ich nur Abfragen ob irgendwelche Tasten gedrückt sind, und wenn ja ändere ich dann entsprechende Parameter. Gibt es da eine einfache Lösung für oder muss ich mich da tiefergehend mit GUIs ausseinandersetzen?
Würde mich über eine Antwort freuen!
Gruß
Harry
|
|
|
|
|
Micha85 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.07.2011, 14:52
Titel:
|
|
Hi,
die KeyPressFcn ist Bestandteil der Figure properties.
Ich denke das könnte Dir weiterhelfen. Schau Dir doch mal das Code-Beispiel in der Dokumentation dazu an.
Grüße
Micha
|
|
|
HH |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 22.06.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 06.07.2011, 11:33
Titel:
|
|
Hallo,
Ich denke auch, dass ich irgendwie KeyPressFcn nutzen muss, aber ich werde aus der Dokumentation auch nicht so schlau, weil ich ja auch nichts in irgendeiner Figure ändern will sondern einen Parameter (vielleicht bin ich auch nur zu dumm )
Hier mal eine kleine Beispielfunktion zur Verdeutlichung was ich vorhabe:
Es hängt quasi an der ersten Zeile nach dem while-Befehl.
Danke schonmal,
Gruß
Harry
|
|
|
Micha85 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2011, 10:27
Titel:
|
|
|
|
|
Hi,
die while-Schleife entspricht also praktisch Deinem laufenden Spiel oder wie?
Und darin willst Du dann verständlicherweise die gedrückten Tasten überprüfen oder?
Ich glaube, dass die Sache mit dem normalen plot-Fenster möglich ist und würde so vorgehen: (hab das aber nie ausprobiert, also keine Garantie auf Funktion)
- Funktion für das Spiel definieren (Hast Du ja schon, muss aber tatsächlich auch eine Funktion sein, so wie in der MATLAB-Doku)
- KeyPressFcn für die Figure anlegen und als Unterfunktion mit ins m-File einbinden
- In der KeyPressFcn Deinen Parameter anlegen/verändern und z.B. mittels globaler Variable an die aufrufende Funktion übergeben. (Rückgabewert für die KeyPressFcn habe ich nicht gesehen)
- Dann musst Du eventuell noch in Deiner aufrufenden Funktion eine kleine Pause einbauen bzw. den Befehl "drawnow" um der KeyPressFcn Zeit für die Abarbeitung zu geben.
So würde ich das mal angehen und hoffen, dass es funktioniert.
Grüße
Micha
|
|
|
HH |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 22.06.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2011, 11:13
Titel:
|
|
Hallo Micha,
vielen Dank für deine Unterstützung, aber ich bin eher Neuling auf dem Gebiet und kann deinen Vorschlag nicht so ganz umsetzen. Meine KeyPressFcn Kenntnisse beschränken sich allerdings auch auf ein Tutorial.
Wär es dir vielleicht möglich mir das an einem kleinen Beispiel zu verdeutlichen? Vor allem die Unterfunktion mit dem KeyPressFcn würde mich interessieren.
Wenns dir zu aufwendig ist versteh ich das auch, aber es wäre nett.
Danke nochmal,
Gruß
Harry
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 07.07.2011, 11:51
Titel:
|
|
Hier ein kleines Bsp. an Hand der Doku zu dem Befehl.
Wenn du jetzt die Funktion figure_keypress aufrufst, wird eine Figure gestartet...alle Eingaben werden an die Funktion test übergeben. Die Variable evnt.Character enthält den Eingabewert.
|
|
|
HH |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 22.06.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2011, 14:17
Titel:
|
|
Gut das funktioniert nun bedingt!
Ich habe jetzt immerhin ein bisschen verstanden wie das mit "KeyPressFcn" funktioniert.
Es tritt nur ein neues Problem auf:
wenn ich nun meine Funktion aufrufe (siehe oben; ergänzt mit der Zeile b=eingabe; eingabe als globale variable, eine andere Möglichkeit der übergabe habe ich nicht gesehen), wird jedesmal ein neues Figure geöffnet. Außerdem funktioniert dann die Tastenabfrage nicht mehr, da ja ein anderes figure geöffnet ist.
Gruß
Harry
|
|
|
Micha85 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.07.2011, 14:51
Titel:
|
|
Na also, dann kommst Du der Sache ja näher.
Die Erstellung der figure sollte natürlich nicht in sondern vor Deiner while-Schleife passieren.
Um sicher zu gehen, dass immer in die gleiche figure geplottet wird kannst Du auch beim Erstellen ein handle definieren und dieses beim Plot ansprechen:
Grüße
Micha
|
|
|
HH |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 22.06.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.07.2011, 10:18
Titel:
|
|
Ja klar natürlich, da hätte ich auch selbst drauf kommen können.
So jetzt nur damit ich das richtig verstanden habe:
durch die neue FigHandle-Zeile brauche ich die function figure_keypress ja nicht mehr oder?
Dennoch meckert er jetzt rum:
1.) bezogen auf global eingabe in der Funktion test
The expression to the left of the equals sign is not a valid target for an assignment.
2.) bezogen auf pause in der Hauptfunktion.
??? Error using ==> pause
Error while evaluating figure KeyPressFcn
aber anders bringe ich den wert von eingabe doch nicht in die Hauptfunktion, oder?
|
|
|
Micha85 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.07.2011, 12:21
Titel:
|
|
Hi,
poste doch bitte Deinen Code, dann fällt das Helfen leichter.
Grüße
Micha
|
|
|
Andy386 |
Forum-Guru
|
|
Beiträge: 485
|
|
|
|
Anmeldedatum: 24.06.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 7.1/8
|
|
|
|
|
|
Verfasst am: 10.07.2011, 17:55
Titel:
|
|
zum 1.) warum muss das ne global sein? du kanst der funktion evtl. auch nen rückgabewert zuordnen:
zum 2.) wie schon erwähnt, was ist mit drawnow?
_________________
Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
|
|
|
HH |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 22.06.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 11.07.2011, 10:52
Titel:
|
|
Hallo zusammen!
Irgendwie haben wohl ich oder der Rechner wohl ein Wochenende Pause gebraucht. Ich hab nur ein paar kleine Schönheitskorrekturenvorgenommen um den Code hier zu posten und dann gings.
Hier noch wie gewünscht das Ergebnis:
Tastendruck-Funktion wie oben:
Hauptfunktion:
damit springt der Punkt munter hin und her.
Zu den beiden Anmerkungen noch:
1.) Das mit Rückgabewert hat irgendwie nicht funktioniert, weiß nicht ob das generell nicht geht oder ich nur nicht dazu in der Lage bin.
2.) Dadurch dass es jetzt mit den einfachen Pausen funktioniert hab ich mich nicht näher damit beschäftigt.
Nochmal vielen Dank an euch alle für eure Hilfe.
Gruß
Harry
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum 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. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|