Место для рекламы.

Реклама на сайте: vk.com/magicowru
Реклама в группе: vk.com/nikita55222
Стать модератором портала: (КЛИК)

[Урок] Экономные Переменные "флаги"

Статус
В этой теме нельзя размещать новые ответы.

PawnDev

Пользователь
Пользователь
Регистрация
29.03.2018
Сообщения
21
Репутация
0
#1
Привет всем.

Рад представить вам мой очередной урок в области 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 флагов в одном энуменаторе!

Автор урока: Doc_Slove
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.