Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Урок Экономные переменные "Флаги"

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

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
[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 (и наоборот)
Примечание: http://pawno-info.ru/showthread.php?t=231739&page=2&p=1535790&viewfull=1#post1535790

На этом урок закончен, удачной экономии памяти.

P.S: Не используйте более 32 флагов в одном энуменаторе!

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