GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: Amf - 2013. Szeptember 25. - 11:24:53

Cím: HOLDING( KEY_UP | KEY_DOWN )
Írta: Amf - 2013. Szeptember 25. - 11:24:53
Sziasztok !
Valamiért, ezen a lekérdezésen nem jut tovább: if( HOLDING( KEY_UP | KEY_DOWN ) )
Próbáltam már, KEY_ANALOG_UP - al, de úgy sem .. a wikin is így írták le példának ..
Arra szolgálna, hogy lekérdezzem vele, hogy füstölteti - e a gumikat a játékos.
 
#define HOLDING(%0) \\ ((newkeys & (%0)) == (%0))
Cím: HOLDING( KEY_UP | KEY_DOWN )
Írta: Rupert - 2013. Szeptember 25. - 11:33:40
Próbáld ezzel:
 

if(HOLDING(KEY_UP) && (HOLDING(KEY_DOWN))
Cím: HOLDING( KEY_UP | KEY_DOWN )
Írta: Amf - 2013. Szeptember 25. - 12:16:29
Így sem jó ..  :confused:
Cím: HOLDING( KEY_UP | KEY_DOWN )
Írta: vortexY - 2013. Szeptember 25. - 15:24:09
Én így oldanám meg:
Új definek:
 

#define PRESSED(%0) \\
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
#define RELEASED(%0) \\
(((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))

 
Új változók:
 

new HoldingUp[MAX_PLAYERS];
new HoldingDown[MAX_PLAYERS];
new Drifting[MAX_PLAYERS];

 
És maga a rendszer lelke ami az OnPlayerKeyStateChange-ba megy:
 

if(PRESSED(KEY_UP))
{
HoldingUp[playerid] = 1;
}
if(RELASED(KEY_UP))
{
HoldingUp[playerid] = 0;
}
if(PRESSED(KEY_DOWN))
{
HoldingUp[playerid] = 1;
}
if(RELASED(KEY_DOWN))
{
HoldingUp[playerid] = 0;
}
if(HoldingUp[playerid] == 1 && HoldingDown[playerid] == 1)
{
Drifting[playerid] = 1;   
}
else
{
Drifting[playerid] = 0;   
}

 
Tehát ha égeti a gumikat akkor a Drifting[playerid] változó értéke 1.
Cím: HOLDING( KEY_UP | KEY_DOWN )
Írta: kadaradam - 2013. Szeptember 25. - 16:44:56
A-a, ezekre nem válaszol az OnPlayerKeyStateChange.A  GetPlayerKeys()-el kell lekérdezned õket, vagy egy timer, vagy egy OnPlayerUpdate alatt.
Példa:
http://wiki.sa-mp.com/wiki/GetPlayerKeys
Cím: HOLDING( KEY_UP | KEY_DOWN )
Írta: Amf - 2013. Szeptember 25. - 17:23:37
Nem tudom hogy tudnék lekérdezni két gombot a GetPlayerKeys - el .. Tudnál írni rá egy példát ?
Cím: HOLDING( KEY_UP | KEY_DOWN )
Írta: lackos888 - 2013. Szeptember 25. - 17:32:42

public OnPlayerUpdate(playerid)
{
    new Keys,ud,lr;
    GetPlayerKeys(playerid,Keys,ud,lr);
    if((keys & KEY_UP) && (keys & KEY_DOWN))
    {
        // ide a kód
    }
}
Cím: HOLDING( KEY_UP | KEY_DOWN )
Írta: Amf - 2013. Szeptember 25. - 18:43:55
Próbáltam már így is, de sajnos nem jó .  :confused:
Cím: HOLDING( KEY_UP | KEY_DOWN )
Írta: BoOy - 2013. Szeptember 25. - 22:50:55
Nem oldható meg. Sajnos az van hogyha a \"KEY_UP\" és a \"KEY_DOWN\" gombot egyszerre nyomod meg, \"KEY_DOWN\"-ként megy tovább. Vagyis olyan mintha csak a lefele gombot érzékelné. Még akkor is ha a \"KEY_UP\" gombot hamarabb nyomod le tizedmásodpercekkel.
Cím: HOLDING( KEY_UP | KEY_DOWN )
Írta: Amf - 2013. Szeptember 26. - 13:49:04
Gondoltam, hogy gyári hibás lesz ..  :confused:  Azért köszönöm a válaszokat .