Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Detekcija pritisnutih tastera (2 ili vise u isto vreme) C#

  • 8 odgovora
  • 4.290 pregleda

Najnovija ↓

Detekcija pritisnutih tastera (2 ili vise u isto vreme) C# 12.06.2005. u 15:25 · pre 260 meseci #1
Radim neku igricu, nista spektakularno (windows forms) i imam jedan problem.

Potrebno mi je da prihvatam user input za 2 plejera koja kontrolisu svoje svemirske brodove. E sad, potrebno je da recimo oba usera skrecu u istom trenutku, a form1_keypress to ne moze da handluje. Dok se drzi jedan taster on njega prihvata ali ako pritisnes neki drugi taster on onaj prvi ignorise i od tada vidi samo onaj drugi po redu sto je pritisnut.

Npr player 1 drzi levo a player 2 oce da pritisne svoje levo (nije bitno sta)..U tom trenutku se levo za player1 ignorise i sad samo player2 ima input dok ga p1 ne preuzme i obrnuto, tako u krug. Kako da odradim da mogu oba istovremeno da se kontrolisu ?

poz

n
Re: Detekcija pritisnutih tastera (2 ili vise u isto vreme) C# 13.06.2005. u 12:22 · pre 260 meseci #2
Tja, mogao bi da overridujes WndProc i da pratis poruke o pritisnutim i podignutim tasterima (WM_KEYUP i WM_KEYDOWN).
Samo ne znam koliko je to efektivno u praksi za tvoj projekat.

Javi kako fercera...
Potpis
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
Re: Detekcija pritisnutih tastera (2 ili vise u isto vreme) C# 13.06.2005. u 12:47 · pre 260 meseci #3
hmm daj nesto detaljnije posto mi slabo znaci ovo iznad...
nisam se previse zezao sa c# znam sta je override al ne znam sta je wndproc :D

Glavno mi je da prihvatam 2 tastera istovremeno jer ko god sedne da isproba igricu drzi tastere umesto da ih pritiska....
Re: Detekcija pritisnutih tastera (2 ili vise u isto vreme) C# 13.06.2005. u 13:19 · pre 260 meseci #4
Moraces da se igras sa DirectInput-om ili pokusaj da nadjes C# ekvivalent za:
Code:

GetKeyboardState
The GetKeyboardState function copies the status of the 256 virtual keys to the specified buffer. 

BOOL GetKeyboardState(
  PBYTE lpKeyState   // array of status data
);
Parameters
lpKeyState 
[in] Pointer to the 256-byte array that will receive the status data for each virtual key. 
Return Values
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError. 



yooyo
Re: Detekcija pritisnutih tastera (2 ili vise u isto vreme) C# 13.06.2005. u 13:44 · pre 260 meseci #5
Code:

using System.Runtime.InteropServices;

[DllImport("user32.dll")]
static extern short GetAsyncKeyState(int vKey);

if ( GetAsyncKeyState( vkUP ) < 0 ) 
{
... pressed
}


vkUP i ostalo ces naci u winuser.h. Deo headera:
Code:

#define VK_SPACE          0x20
#define VK_PRIOR          0x21
#define VK_NEXT           0x22
#define VK_END            0x23
#define VK_HOME           0x24
#define VK_LEFT           0x25
#define VK_UP             0x26
#define VK_RIGHT          0x27
#define VK_DOWN           0x28
#define VK_SELECT         0x29
#define VK_PRINT          0x2A
#define VK_EXECUTE        0x2B
#define VK_SNAPSHOT       0x2C
#define VK_INSERT         0x2D
#define VK_DELETE         0x2E
#define VK_HELP           0x2F
Re: Detekcija pritisnutih tastera (2 ili vise u isto vreme) C# 14.06.2005. u 19:30 · pre 260 meseci #8
Sve iscrtavam posebno, za sada nema flickera, a nece ga ni biti verovatno, jer je jednostavna grafika.

jos su mi te kontrole brodova ostale problem ne stizem da uradim to al postujem rezultate ovde cim se dohvatim toga...

A sto se tice grafike, ne koristim double buffer, nema previse crtanja pa lepo radi.
Stavio sam samo ovu liniju, sto sam negde na netu naisao sto bi trebalo da ubrzava mada i sa njom i bez nje radi prakticno isto:

Code:

this.SetStyle(ControlStyles.AllPaintingInWmPaint|ControlStyles.UserPaint|ControlStyles.DoubleBuffer,true);


poz

n
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme