Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 09, 2025 06:51

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 42 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
BeitragVerfasst: Di Apr 13, 2004 11:41 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Hi!
Habe mein Prog auf GetAsyncKeyState(); umgeschrieben, ich dachte damit kann ich mehrere Tastendrücke auf einmal entgegennehmen.
Drei nimmt er jedoch immernoch nicht an. folgenden Code habe ich dafür:
Code:
  1. if GetAsyncKeyState(VK_UP) = 0 then
  2. taste.vor := False else taste.vor := True;
  3. if GetAsyncKeyState(VK_DOWN) = 0 then
  4. taste.hinter := False else taste.hinter := True;
  5. if GetAsyncKeyState(VK_RIGHT) = 0 then
  6. taste.rechts := False else taste.rechts := True;
  7. if GetAsyncKeyState(VK_LEFT) = 0 then
  8. taste.links := False else taste.links := True;
  9. if GetAsyncKeyState(32) = 0 then
  10. taste.brake := False else taste.brake := True;

Dachte wenn ich das in der Schleife laufen lasse, halt in meinen Rendercode schreibe kann ich alle Tasten entgegennehmen... dies ist leider garnicht so :-/

ThX


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 13, 2004 11:54 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Das ist eine Hardwarebeschränkung. Vor allem billige Tastaturen haben machen mehrere gleichzeitig gedrückte Tasten nicht mit. Probier mal in nem anderen Spiel ob du gleichzeitig drei Tasten drücken kanns.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 13, 2004 12:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Also in Need for Speed, kann ich zumindest mal Gasgeben, lenken und bremsen gleichzeitig.
Das geht bei mir nicht.

EDIT
Mh, bei meinem Spiel Beept das dann auch wenn ich mehrere Drücke, wie normal unter Windows...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 13, 2004 12:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Dann probiers halt mal mit DirectInput, so machen das eh die meisten kommerziellen Spiele, selbst die die OpenGL nutzen (Q3, RtCW:ET, usw.)

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 13, 2004 12:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
:-(
Wo finde ich etwas darüber?
Da muss ich aber nicht directX initialisieren? (Hab ja ka von directX *g*)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 13, 2004 12:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
DirectInput (wie der Name vermuten lässt), ist Teil der DirectX-Suite. Allerding muss man dort aber auch nur (logischerweise) das initialisieren was auch gebraucht wird. Mehr Infos zu allem was mit DX zu tun hat gibts hier.

P.S. : Warum brauchst du denn drei Tastendrücke gleichzeitig? Zocke grade intensic Collin McRae, und brauche da selten mehr als zwei Tasten zu gleichen Zeit.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 13, 2004 12:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Wenn ich schnell fahren will, dabei linken und dann zum schliddern(hinten rum) die Bremse drücken will? :-/ Bei Shootern oder sonstwas ist das denke ich mal nicht ganz so schlimm... Aber so :-( wenn ich wenigstens so machen könnte das die Bremse vor gezogen wird (also das gasgeben an letzter stelle) dann würde es evtl. klappen... ich schau mal bei DirectInput vorbei :-/ in der Hoffnung nicht Fremdzugehen :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 13, 2004 12:21 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Jan 04, 2003 21:23
Beiträge: 674
Wohnort: Köln
wieviele Tasten kannst du denn in SBS gleichzeitig drücjken? 4 klappen da bei mir mindestens :/
ich habs so gemacht:

Code:
  1.  keys: array [0..255] of boolean;
  2.  
  3. //...
  4.  
  5. procedure TForm1.FormKeyDown(Sender: TObject; var Key: word;
  6.   Shift: TShiftState);
  7. begin
  8.     keys[key] := True;
  9. //...
  10. end;
  11.  
  12. //...
  13.  
  14. procedure TForm1.FormKeyUp(Sender: TObject; var Key: word;
  15.   Shift: TShiftState);
  16. begin
  17. //...
  18.     keys[key] := False;
  19. end;
  20.  


und ich frage dann immer den zustand von z.B. keys[VK_UP] ab

_________________
. . .


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 13, 2004 12:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Da gehen bei mir 5 gleichzeitig, mehr wusste ich net zu testen!
Sehr seltsam, hatte das anfangs auch so wie du da jetzt, da gings bei mir auch net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 13, 2004 12:30 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
~->GEF<-~ Adler hat geschrieben:
Wenn ich schnell fahren will, dabei linken und dann zum schliddern(hinten rum) die Bremse drücken will?

Dafür braquchste 2 Tasten: links/rechts + bremse. gas wird nicht gegeben, wenn man bremst ;-) handbremse zieht üblicherweise an den hinterrädern an und ein gro der schnellen karren sind hinterradtriebler, folglich ist gas + bremse sinnlos ;-) das ginge theoretsich nur bei vorderradtrieblern, führt dort aber zu gigantischem reifenverschleiß... Und ob ne Allradgetriebe so ne Atacke schadlos überstehen würde? Ich denke 2 Tasten müssten im Normalfall genügen, aber DirectInput könnte hier durchaus Abhilfe schaffen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 13, 2004 12:36 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Ja, aber dass liegt am benutzer, dann muss er erst vom GAS runter gehen um Bremsen zu können... :-/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 13, 2004 13:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Habe es jetzt nochmal genau so gemacht wie Fiji-F
Aber es klappt nicht so wie bei SBS, woran kann es liegen?
Das es bei SBS geht und bei mir nicht? :-/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 13, 2004 13:23 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Jan 04, 2003 21:23
Beiträge: 674
Wohnort: Köln
zeig mal dein keydown, keyup und deine arraqy-deklaration :?

_________________
. . .


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 13, 2004 15:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
VORAB: KANN ES AN DEN DELPHI V. LIEGEN?
du hast D6 und ich D7...

So wie du?! Aber zur befriedigung ;) *g*
Code:
  1. procedure TDemoForm.FormKeyDown(Sender: TObject; var Key: Word;
  2.   Shift: TShiftState);
  3. begin
  4.   taste.tasten[key] := True;
  5.  
  6.   if key = 27 then
  7.   Game := False;
  8.   if taste.console then
  9.   tastatur_eingabe.Tastatur.tasten_check(key);
  10.  
  11.   if key = 220 then
  12.   begin
  13.   if taste.console then
  14.   taste.console := False
  15.   else if taste.console = False then
  16.   taste.console := True;
  17.   end;
  18. end;

Code:
  1. procedure TDemoForm.FormKeyUp(Sender: TObject; var Key: Word;
  2.   Shift: TShiftState);
  3. begin
  4.   taste.tasten[key] := False;
  5. end;
Folgender maßen schreibe ich es noch um, zum Test das ich net alles abändern muss und bringt nichts :-/
Code:
  1. taste.rechts := taste.tasten[VK_RIGHT];
  2. taste.links := taste.tasten[VK_LEFT];
  3. taste.vor := taste.tasten[VK_UP];
  4. taste.hinter := taste.tasten[VK_DOWN];
  5. taste.brake := taste.tasten[32];

Code:
  1.   TTaste = record
  2.     vor,hinter,rechts,links,brake, console: boolean;
  3.     tasten: array[0..256] of boolean;
  4.     Navigation: integer;
  5.   end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 13, 2004 17:21 
Offline
DGL Member

Registriert: Mo Apr 05, 2004 19:51
Beiträge: 105
Hallo!

Nur als Anmerkung: Die Verwendung von DirectInput ist nicht übertrieben kompliziert. Beim DirectX-SDK sind gute (C++) Demoprogramme dabei und die Hilfe erklärt das eigentlich auch gut. Es ist im Grunde wie mit der WinAPI bzw. OpenGL: Die Initialisierung ist kompliziert, die Benutzung einfach. :)

Ich sehe auch absolut kein Problem darin, DirectX/DirectInput und OpenGL gleichzeitig zu verwenden: Wenn dein Programm direkt auf der WinAPI aufsetzt (was ja scheinbar der Fall ist), ist es ohnehin Essig mit der Plattform-Unabhängigkeit. Ansonsten kannst du eben auch gleich auf SDL setzen, das kümmert sich dann auch um das DirectInput-Interface.

Gruß,
Arno

P.S.: Dass es nur an einer Billig-Tastatur liegt, kann ich mir nicht vorstellen. In den DOS-Zeiten gab es viele Spiele, die man zu zweit auf einer Tastatur gespielt hat, was bei mir und meinen Freunden nie ein Problem war (und da sind sicher mehr als 3 Tasten gleichzeitig im Spiel).


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 42 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.012s | 18 Queries | GZIP : On ]