|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Robin Junior JLI'ler
Alter: 30 Anmeldedatum: 29.10.2008 Beiträge: 73 Wohnort: Inneringen Medaillen: Keine
|
Verfasst am: 13.03.2010, 12:21 Titel: Gamepad - Maus Emulator |
|
|
Ich hab mir mal ein Gamepad für den PC gekauft.
Damit hab ich dann rennspiele, flugzeug spiele, snowboarden und so gespielt.
Jetzt wollte ich damit auch ego shooter spielen, hab aber gemerkt dass ich mich nicht umsehen kann und auch nicht schießen kann,
also hab ich mir einen Emulator Programmiert.
Es funktioniert alles, ich benutze jetzt meinen Rechten Stick als Maus. Nur, wenn ich das Programm starte und dann ins spiel gehe, oder es auf die leiste lege, wird die maus nicht mehr vom controller gesteuert.
______________
Ich brauche den Befehle (hab schon im internet gesucht.),
dass es auch die maus kontrolliert wenn es minimiert ist, es startet schon minimiert ( WS_MINIMIZE ), oder dass halt die Programm abläufe auch laufen, wenn es minimiert ist
GRuß Robin |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 13.03.2010, 14:03 Titel: |
|
|
Bilder, Downloads oder Fragen?
Irgendwie hat der erste Eintrag etwas von einer Endgültigkeit, auf die man nicht mehr antworten muss. Das ist zumindest komisch, denn in einem Forum will doch jeder irgendwelche blöden Kommentare abgeben.
Es wäre z.B. nett zu wissen, wie du das ganze umgesetzt hast und vielleicht einen Download bereit zu stellen, damit man das ganze mal testen kann. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 13.03.2010, 14:21 Titel: |
|
|
Viele Spiele verwenden DirectX, um die geräte anzusprechen. Dein Emulator wird vermutlich die WindowsMessages versenden. Leider (oder auch nicht leider) übergeht DirectX die WindowsMessages - deshalb wird dein Programm nicht so funktionieren, wie du willst. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Robin Junior JLI'ler
Alter: 30 Anmeldedatum: 29.10.2008 Beiträge: 73 Wohnort: Inneringen Medaillen: Keine
|
Verfasst am: 13.03.2010, 15:27 Titel: |
|
|
doch ich frag da was und zwar
Zitat: | Ich brauche den Befehle (hab schon im internet gesucht.),
dass es auch die maus kontrolliert wenn es minimiert ist, es startet schon minimiert ( WS_MINIMIZE ), oder dass halt die Programm abläufe auch laufen, wenn es minimiert ist |
das davor ist vorgeschichte, deshalb ist da auch sowas
________
(so.. jetzt als frage)
Kennt jemand ein befehl, dass es die abläufe im programm weiterführt, auch wenn diese Minimiert ist ???
(denn wenn ich ich das programm minimiere, steuert der controller nicht mehr die maus)
zu AFE-GmdG:
ja kann sein, aber ich hab noch kein directx ausgeführt, sobald ich außerhalb des fensters auf den desktop klicke oder ich das programm minimiere steuert der controller nicht mehr die maus
GRuß Robin |
|
Nach oben |
|
|
Robin Junior JLI'ler
Alter: 30 Anmeldedatum: 29.10.2008 Beiträge: 73 Wohnort: Inneringen Medaillen: Keine
|
Verfasst am: 13.03.2010, 16:09 Titel: |
|
|
ach ja, ich kann mit meinem gamepad die linke und rechte maustaste drücken
hier der code, falls jemand das auch mal braucht:
CPP: | mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
|
jedenfalls ich brauch noch befehl für das drehen des maus rads, und klicken des mausrads.
odeer weiß jemand en link wo sowas steht.. (hab bis jetzt noch nix gefunden)
GRuß Robin |
|
Nach oben |
|
|
Robin Junior JLI'ler
Alter: 30 Anmeldedatum: 29.10.2008 Beiträge: 73 Wohnort: Inneringen Medaillen: Keine
|
Verfasst am: 15.03.2010, 19:39 Titel: |
|
|
shit, es scheint so, als ob echt niemand weiß wie ich das lösen soll, hier das Programm bis jetzt (EDIT: Neuer funktionierender link) Gamepad-Mouse
Der rechte Stick vom Gamepad benutzt man als maus und L1 und L2 als linke und rechte maustaste, aber ihr könnt sehen, wenn man außerhalb des fensters klickt, könnt ihr die maus nicht mehr steuern
GRuß Robin
Zuletzt bearbeitet von Robin am 28.03.2010, 12:51, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 16.03.2010, 21:21 Titel: |
|
|
Howdi,
hast du ein par Beispiele wie genau du es im Quellcode machst? Was meine werten Vorgänger gesagt haben stimmt so nämlich schon. Nur um zu wissen was genau bei dir nicht funktioniert brauchen wir entweder ein par Codeschnipsel oder genauere Erklärungen wie es intern abläuft.
Was AFE-GmdG sagte solltest du auch beherzigen, viele Spiele verwenden DirectInput und fangen die Signale direkt von dem Controler ab (Was auch die maus selbst sein kann). Ohne das du dich direkt dazwischen klinkst wird dein Ansatz vermutlich nicht funktionieren. Es IST möglich, aber auch schwer.
Also liefere mehr Informationen und wir liefern dir mehr Antworten.
mfg Mark
Edit:
Ich sehe grade deinen letzten Post etwas genauer, sry. Du empfängst nur Befehle wenn deine Anwendung den Focus hat, lese dich mal in folgende WinAPI Funktion ein:
SetWindowsHookEx
Das sollte wenn du es richtig anwendest (und das ist anfangs nicht einfach) dafür sorgen das ALLE anwendungen für dich den fokus haben können und dennoch alles Funktioniert. Das problem mit DirectInput wirst du damit aber immer noch nicht beseitigen können. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 18.03.2010, 00:50 Titel: |
|
|
Verwenden aktuelle Spiele nicht überhaupt keine DirectInput mehr, sondern sollen ganz normal die Messages abfangen? AFAIK gibts da ein paar Empfehlungen im DX SDK. _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 18.03.2010, 06:38 Titel: |
|
|
PeaceKiller hat Folgendes geschrieben: | Verwenden aktuelle Spiele nicht überhaupt keine DirectInput mehr, sondern sollen ganz normal die Messages abfangen? AFAIK gibts da ein paar Empfehlungen im DX SDK. | Irgendwie fehlt in dem Satz die Grammatik...
Aber das kann ich mir nicht so recht vorstellen, zumindest wenn das Game mehr als ne Maus verwendet - und selbst dann ist es zweifelhaft. Von dieser "Empfehlung" habe ich jedoch noch nichts gehört oder gelesen. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 18.03.2010, 11:41 Titel: |
|
|
Zitat: |
DirectInput is a set of API calls that abstracts input devices on the system. Internally, DirectInput creates a second thread to read WM_INPUT data, and using the DirectInput APIs will add more overhead than simply reading WM_INPUT directly. DirectInput is only useful for reading data from DirectInput joysticks; however, if you only need to support the Xbox 360 controller for Windows, then use XInput instead. Overall, using DirectInput offers no advantages when reading data from mouse or keyboard devices, and the use of DirectInput in these scenarios is discouraged.
|
http://msdn.microsoft.com/en-us/library/ee418864%28VS.85%29.aspx |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 19.03.2010, 10:59 Titel: |
|
|
Nice - wusste ich noch nicht... _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Robin Junior JLI'ler
Alter: 30 Anmeldedatum: 29.10.2008 Beiträge: 73 Wohnort: Inneringen Medaillen: Keine
|
Verfasst am: 20.03.2010, 16:22 Titel: |
|
|
Um das mit DirectX mach ich mir später sorgen,
ich will jetzt erst mal hinbekommen, dass es auch so geht, ohne dass ich ein Spiel geöffnet habe.
Das muss doch eig. ein simpler Befehl sein, dass es die abläufe im programm auch weiterführt, auch wenn es minimiert ist,
z.B. Firefox, wenn ich das Download fenster minimiere, downloadet es ja auch weiter.
Ach ja, ich benutz DirectInput um die Controller daten zu holen. Und SetCursorPos(X, Y); um die Maus zu steuern.
GRuß Robin |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 21.03.2010, 00:26 Titel: |
|
|
Du musst den Controller in den Fensterunabhängigen, exclusiven Modus versetzen, damit du auch Signale enthält, wenn es (das Fenster) minimiert ist. Allerdings weiss ich nicht, ob du diesen Modus setzen darfst, zumindest bei der Maus ist dieser Modus aus Sicherheitsgründen verboten. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Robin Junior JLI'ler
Alter: 30 Anmeldedatum: 29.10.2008 Beiträge: 73 Wohnort: Inneringen Medaillen: Keine
|
Verfasst am: 23.03.2010, 16:09 Titel: |
|
|
shit...tja, dann lass ichs eben |
|
Nach oben |
|
|
Robin Junior JLI'ler
Alter: 30 Anmeldedatum: 29.10.2008 Beiträge: 73 Wohnort: Inneringen Medaillen: Keine
|
Verfasst am: 28.03.2010, 12:40 Titel: FERTIG !!! |
|
|
Ich habs hinbekommen, ich musste den Befehl andern:
CPP: | lpDIJoystick->SetCooperativeLevel(hWnd, DISCL_FOREGROUND | DISCL_EXCLUSIVE |
einfach statt DISCL_FOREGROUND das benutzen: DISCL_BACKGROUND
Weiteres hier: KLICK
Somit wäre der Emulator fertig.
Ihr könnt ihn hier Downloaden.
ps: es bigt zwar noch eine kleinigkeit die noch gemacht werden müsste (mit den Maustasten) aber sonst ist es funktionsfähig.
GRuß Robin |
|
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.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|