note Help Needed
This wiki is the result of an ongoing community effort — thank you all for helping!
If you want to provide changes to this page then please click here.
OnPlayerKeyStateChange
คำอธิบาย
This callback is called when the state of any supported key is changed (pressed/released). Directional keys do not trigger OnPlayerKeyStateChange (up/down/left/right).
Name | Description |
---|---|
playerid | The ID of the player that pressed or released a key. |
newkeys | A map (bitmask) of the keys currently held - see here. |
oldkeys | A map (bitmask) of the keys held prior to the current change - see here. |
ส่งคืน
มันถูกเรียกในเกมโหมดก่อนเสมอ
ตัวอย่าง
if (newkeys == KEY_FIRE)
if (newkeys & KEY_FIRE)
if ((newkeys & KEY_FIRE) && !(oldkeys & KEY_FIRE))
if ((oldkeys & KEY_FIRE) && !(newkeys & KEY_FIRE))
if ((newkeys & KEY_FIRE) && (newkeys & KEY_CROUCH))
if ((newkeys & KEY_FIRE) && !(oldkeys & KEY_FIRE) && (newkeys & KEY_CROUCH) && !(oldkeys & KEY_CROUCH))
if ((newkeys & (KEY_FIRE | KEY_CROUCH)) == (KEY_FIRE | KEY_CROUCH) && (oldkeys & (KEY_FIRE | KEY_CROUCH)) != (KEY_FIRE | KEY_CROUCH))
// HOLDING(keys)
#define HOLDING(%0) \
((newkeys & (%0)) == (%0))
if (HOLDING( KEY_FIRE ))
if (HOLDING( KEY_FIRE | KEY_CROUCH ))
// PRESSED(keys)
#define PRESSED(%0) \
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
if (PRESSED( KEY_FIRE ))
if (PRESSED( KEY_FIRE | KEY_CROUCH ))
// PRESSING(keyVariable, keys)
#define PRESSING(%0,%1) \
(%0 & (%1))
if (PRESSING( newkeys, KEY_FIRE ))
if (PRESSING( newkeys, KEY_FIRE | KEY_CROUCH ))
// RELEASED(keys)
#define RELEASED(%0) \
(((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
if (RELEASED( KEY_FIRE ))
if (RELEASED( KEY_FIRE | KEY_CROUCH ))
public OnPlayerKeyStateChange(playerid, KEY:newkeys, KEY:oldkeys)
{
if (PRESSED(KEY_FIRE))
{
if (IsPlayerInAnyVehicle(playerid))
{
AddVehicleComponent(GetPlayerVehicleID(playerid), 1010);
}
}
return 1;
}
public OnPlayerKeyStateChange(playerid, KEY:newkeys, KEY:oldkeys)
{
if (PRESSED(KEY_JUMP))
{
new
Float:x,
Float:y,
Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerPos(playerid, x, y, z + 10.0);
}
return 1;
}
new
Float:gPlayerHealth[MAX_PLAYERS];
#if !defined INFINITY
#define INFINITY (Float:0x7F800000)
#endif
public OnPlayerKeyStateChange(playerid, KEY:newkeys, KEY:oldkeys)
{
if (PRESSED(KEY_ACTION))
{
// They just pressed the action key, save their
// old health for restoration.
GetPlayerHealth(playerid, gPlayerHealth[playerid]);
SetPlayerHealth(playerid, INFINITY);
}
else if (RELEASED(KEY_ACTION))
{
// They just let go of action - restore
// their old health again.
SetPlayerHealth(playerid, gPlayerHealth[playerid]);
}
return 1;
}
0b00001000
0b00100000
0b00101000
newkeys = 0b00100000
wanted = 0b00101000
ANDed = 0b00100000
newkeys = 0b00101010
wanted = 0b00101000
ANDed = 0b00101000
newkeys = 0b00100000
wanted = 0b00101000
ANDed = 0b00100000
newkeys = 0b00101010
wanted = 0b00101000
ANDed = 0b00101000
บันทึก
tip
NPC สามารถเรียก Callback นี้ได้
tip
Directional keys do not trigger OnPlayerKeyStateChange (up/down/left/right). They can only be detected with GetPlayerKeys (in OnPlayerUpdate or a timer).
ฟังก์ชั่นที่เกี่ยวข้องกัน
- GetPlayerKeys: Check what keys a player is holding.