GaskiMedlem sedan juni 2000325 inlägg
Har i mitt fagra win program försökt lägga till en knapptrycks avkännare :)
Dvs i det eviga lopen i WinMain funktionen har jag lagt till följande kod:
if(kbhit()) {
// Hämta nedtryckt tangent
int key = getch();
// Kolla om tangenten är 32(mellanslag)
if(key == 32) {
if(x < 1)
xvel = 1;
if(x > 139)
xvel = -1;
if(y < 1)
yvel = 1;
if(y > 392)
yvel = -1;
x += xvel;
y += yvel;
}
}
Men ingenting händer när jag trycker på mellanslag, om jag tar bort alla knapp-if-satser och bara har x och y satserna kvar kommer objektet att röra på sig fint och studsa mot kanterna men meningen är att jag ska kunna styra det med mellanslagstangenten.
Varför fungerar inte ovanstående kod?
Sang-draxMedlem sedan juli 2002570 inlägg
kbhit() är en konsollfunktion; den fungerar ej i GUI-apps.
Titta närmare på WM_KEYDOWN
GaskiMedlem sedan juni 2000325 inlägg
Antar att jag ska använda den i switch-satsen i WindowProc funktionen men vad ska jag skriva där? Hur gör jag för att kolla vilken knapp det är osv...
Marcus EMedlem sedan maj 20021 294 inlägg
T.ex. så här:
switch(uMsg)
{
case WM_KEYDOWN:
int key = (int)wParam;
if(key == VK_SPACE)
{
...
}
break;
}
Läs i dokumentationen för WM_KEYDOWN och virtual-key codes.
GaskiMedlem sedan juni 2000325 inlägg
Kör följande kod:
case WM_KEYDOWN:
{
int key = (int)wparam;
switch(key)
{
case VK_UP:
{
xvel = 0;
yvel = 1;
}
case VK_DOWN:
{
xvel = 0;
yvel = -1;
}
case VK_LEFT:
{
xvel = -1;
yvel = 0;
}
case VK_RIGHT:
{
xvel = 1;
yvel = 0;
}
}
x += xvel;
y += yvel;
return(0);
} break;
Men den väljer alltid VK_RIGHT, varför då?
Dokumentation? Var finns den?
Marcus EMedlem sedan maj 20021 294 inlägg
Dokumentationen följde med när du installerade.
Den kan också hittas någonstans på msdn.microsoft.com
Ditt problem är att du inte använder break efter varje case-sats.
case VK_UP:
{
xvel = 0;
yvel = 1;
}
[b]break;[/b]
case VK_DOWN:
Alpha IIMedlem sedan maj 20002 579 inlägg
Gör du ett spel? (eftersom du frågar om directx i en annan tråd)
Då kan du ju använda DirectInput eller skapa en array med 255 bools.
Sen lägger du till i WM_KEYDOWN om arrayen heter keys:
keys[wParam] := TRUE;
och tvärtom i WM_KEYUP
Alpha IIMedlem sedan maj 20002 579 inlägg
Sen kan du varje ruta kontrollera om tex pilupp tangenten är nedtryckt genom att skriva
if keys[VK_UP]
{
//kod
}
GaskiMedlem sedan juni 2000325 inlägg
Försöker lära mig att göra spel :)
Hur menar du med directInput, har försökt lite med koden ovan men den kan ju bara hantera en tangent i taget, vill hantera minst två i taget vilket directInput klarar. Har du nåt enkelt exempel?
Alpha IIMedlem sedan maj 20002 579 inlägg
Hur menar du?
Om du har en array kan du hantera att flera knappar trycks samtidigt.
Du kontrollerar inte om knapparna trycks ner i WM_KEYDOWN utan i spel loopen.
Hur DirectINput fungerar vet jag inte eftersom jag bara har använt DX med DelphiX i delphi och det är inte riktigt samma sak
Alpha IIMedlem sedan maj 20002 579 inlägg
PÅ http://www.gamedev.net finns mycket information om spelprogrammering och ett bra forum :) du får aldrig några bra svar på wf om spelproframmering