Doc_Slove
Умник
Привет всем.
Рад представить вам мой очередной урок в области PAWN программирования.
Автором оргинала урока является Slice (пользователь wiki.pawno-info.ru).
Я его подаю в новом свете.
Итак, приступим.
Вы можете использовать 32 переменные, которые могут принимать значения true или false в одной переменной.
Пользуясь методом, который я опишу ниже, вы не только бережёте размер стека, вы так же избавляетесь от беспорядка в коде.
Если вы будете использовать 100 переменных типа bool для каждого игрока (MAX_PLAYERS), то вы будете тратить 195 Кб памяти.
Однако, если вы будете использовать 4 массива с флагами, то вы затратите только 8 КБ.
Т.е выходит, что вы сэкономите 187 КБ, довольно не плохо, правда?
Для использования флагов, нужно их сначала объявить:
Вот и всё, теперь к махинациям:
[1] Узнать значение флага:
[2] Установить всем флагам значение:
[3] Установить значение флага на 1:
[4] Установить значение флага на 0:
[5] Сменить значение флага на противоположное:
Примечание: http://pawno-info.ru/showthread.php?t=231739&page=2&p=1535790&viewfull=1#post1535790
На этом урок закончен, удачной экономии памяти.
P.S: Не используйте более 32 флагов в одном энуменаторе!
Автор урока: Doc_Slove
Рад представить вам мой очередной урок в области PAWN программирования.
Автором оргинала урока является Slice (пользователь wiki.pawno-info.ru).
Я его подаю в новом свете.
Итак, приступим.
Вы можете использовать 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
PHP:
playerFlags[playerid] = Flags:0; //Обнулит все флаги
PHP:
playerFlags[playerid] |= LOGGED; //Установит значение флага LOGGED на 1
PHP:
playerFlags[playerid] &= ~LOGGED; //Установит значение флага LOGGED на 0
PHP:
playerFlags[playerid] ^= LOGGED; //Если LOGGED был равен 1, то станет 0 (и наоборот)
На этом урок закончен, удачной экономии памяти.
P.S: Не используйте более 32 флагов в одном энуменаторе!
Автор урока: Doc_Slove
Последнее редактирование:
