Привет всем.
Рад представить вам мой очередной урок в области PAWN программирования.
Автором оргинала урока является Slice (пользователь sa-mp.com).
Я его подаю в новом свете.
Итак, приступим.
Вы можете использовать 32 переменные, которые могут принимать значения true или false в одной переменной.
Пользуясь методом, который я опишу ниже, вы не только бережёте размер стека, вы так же избавляетесь от беспорядка в коде.
Если вы будете использовать 100 переменных типа bool для каждого игрока (MAX_PLAYERS), то вы будете тратить 195 Кб памяти.
Однако, если вы будете использовать 4 массива с флагами, то вы затратите только 8 КБ.
Т.е выходит, что вы сэкономите 187 КБ, довольно не плохо, правда?
Для использования флагов, нужно их сначала объявить:
PHP код:
enum Flags:(<<= 1)
{
//Не забывайте устанавливать значение первой переменной флага на 1
LOGGED = 1,
SPAWNED
};
new Flags:playerFlags[MAX_PLAYERS];
Вот и всё, теперь к махинациям:
[1] Узнать значение флага:
PHP код:
playerFlags[playerid] & LOGGED //Вернёт значение флага LOGGED
[2] Установить всем флагам значение:
PHP код:
playerFlags[playerid] = Flags:0; //Обнулит все флаги
[3] Установить значение флага на 1:
PHP код:
playerFlags[playerid] |= LOGGED; //Установит значение флага LOGGED на 1
[4] Установить значение флага на 0:
PHP код:
playerFlags[playerid] &= ~LOGGED; //Установит значение флага LOGGED на 0
[5] Сменить значение флага на противоположное:
PHP код:
playerFlags[playerid] ^= LOGGED; //Если LOGGED был равен 1, то станет 0 (и наоборот)
На этом урок закончен, удачной экономии памяти.
P.S: Не используйте более 32 флагов в одном энуменаторе!
Автор урока: RastaOrecha