Autor Beitrag
DK99
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46

Win Vista (64 Bit) + W7 Up
(Delphi 7,) Java 6 (Eclipse+ BlueJ), OpenGL2.0
BeitragVerfasst: Di 05.05.09 09:09 
Hi,
ich schreibe grade an einem Programm in dem der Spieler einfach durch ein Gebäude laufen kann. Um die Bewegungen zu steuern werden W,A,S,D über getasynckeystate abgefragt.
Um eine flüssigere Bewegung zu ermöglichen müsste ich allerdings erkennen ob
z.B. W und D gleichzeitig gedrückt gehalten werden. getasynckeystate liefert bei mir aber leider immer nur ein Ergebnis. Gibt es da irgenteine Möglichkeit das Problem zu lösen?
LG




bis jetzt sieht das so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
//Bewegungsabfrage über Tastatur
if boolean(getasynckeystate(ord('W'))) then
begin
X := X + (MOVE_SPEED  * sin(degtorad(rotation)));
Z := Z + (MOVE_SPEED  * cos(degtorad(rotation)));
end;
if boolean(getasynckeystate(ord('A'))) then
begin
X := X + (MOVE_SPEED  * sin(degtorad(rotation-90)));
Z := Z + (MOVE_SPEED  * cos(degtorad(rotation-90)));
end;
if boolean(getasynckeystate(ord('D'))) then
begin
X := X + (MOVE_SPEED  * sin(degtorad(rotation+90)));
Z := Z + (MOVE_SPEED  * cos(degtorad(rotation+90)));
end;
if boolean(getasynckeystate(ord('S'))) then
begin
X := X + ((-1*MOVE_SPEED)  * sin(degtorad(rotation)));
Z := Z + ((-1*MOVE_SPEED)  * cos(degtorad(rotation)));
end;



Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 05.05.2009 um 09:37

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."-- Dan Salomon
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 05.05.09 09:26 
Ich nehme mal an, dass da technische Probleme/Gründe das gleichzeitige Drücken mehrerer Tasten nicht möglich machen. Eine Tastatur wird im Matrixverfahren vom Tastaturkontroller/Embedded Controller abgefragt und diente ursprünglich nur zur Text- und Steuercode-Eingabe - für Spieler ist eine Tastatur nicht besonders gut geeignet.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 05.05.09 09:40 
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
Ich nehme mal an, dass da technische Probleme/Gründe das gleichzeitige Drücken mehrerer Tasten nicht möglich machen. Eine Tastatur wird im Matrixverfahren vom Tastaturkontroller/Embedded Controller abgefragt und diente ursprünglich nur zur Text- und Steuercode-Eingabe - für Spieler ist eine Tastatur nicht besonders gut geeignet.

Dann würde das aber alle Spiele betreffen, die man mit dieser Tastatur steuert. Und da heutzutage die meisten Spiele auf WSAD setzen, sehr unwahrscheinlich..
ich habs noch nie erlebt, dass man bei einem Shooter nicht gleichzeitig vorwärts und zur Seite laufen kann ;)

Edit:
Achso, das eigentliche Problem liegt übrigens in deiner Umwandlung in boolean..
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  CheckBox1.Checked := getasynckeystate(ord('W')) <> 0;
  CheckBox2.Checked := getasynckeystate(ord('D')) <> 0;
end;

funktioniert ohne Probleme.

_________________
PROGRAMMER: A device for converting coffee into software.
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Di 05.05.09 09:50 
Das heist nicht das er unrecht hat. Der Computer kann es nur so schnell verarbeiten. Das es für uns gleichzeitig wirkt.
Das Spiel fragt in dem Fall auch nur ab ob die Taste gedrückt wurde. Und dann läuft man solange bis die Taste wieder hochgelassen wird. d.h. er erkennnt erst >>> w dann a z.B. aber läuft seitwärts daher das die software weis das keine der beiden Tasten wieder losgelassen wurde =)
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 05.05.09 10:03 
Ja, schon klar, dass die Tasten einfach nur schnell nacheinander abgefragt / verarbeitet werden.

Aber was user profile iconhathor wohl meinte war
de.wikipedia.org/wik...astatur#Key_Rollover
und das ist hier definitiv nicht der Fall - es lag einfach nur an der Abfrage bzw. Auswertung von DK99.

_________________
PROGRAMMER: A device for converting coffee into software.
DK99 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46

Win Vista (64 Bit) + W7 Up
(Delphi 7,) Java 6 (Eclipse+ BlueJ), OpenGL2.0
BeitragVerfasst: Do 07.05.09 12:42 
ok vielen Dank für eure Antworten :)
Wenn ichs ohne boolean mache klappts prima 8) thx Xentar :D

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."-- Dan Salomon