Показано с 1 по 4 из 4

Тема: Флаги

  1. #1
    ? FreeLancer ? Аватар для RastaOrecha
    Регистрация
    12.07.2011
    Адрес
    Челябинск
    Возраст
    26
    Сообщений
    1,857
    Репутация: 229

    Звание: - весьма и весьма положительная личность

    Флаги

    Привет всем.

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



    Код:
    PAWN:
    
    • [PAWN Wiki] Пишем регистрацию с 0 на Y_INI
    • [PAWN Wiki] Использование YCMD (y_commands) + SSCANF 2.x
    • [PAWN Wiki] Использование Y_Timers
    • [PAWN Wiki] Разделяем мод на инклуды (y_hooks)
    • [PAWN Wiki] Использование UVar
    • [PAWN Wiki] Единая тема оптимизации
    • [Интересные комманды] Cмена ника MySQL 
    • [Интересные комманды] Full Set
    • [Интересные комманды] Телепорт по указанным координатам 
    • [Скрипты и инклуды] jBank System [version 1]
    • [Скрипты и инклуды] jRegistration System
    
    Lua:
    • [Wiki] Создание мода с 0
    • [Wiki] Дерево элементов | new
    • [Wiki] Бинд клавиш или комманда на кнопку
    • [Func] eachOther (повторение числа/строки) | new
    Маппинг:
    
    • [MAP] Квартира в центре (приятный вид)
    • [Source] Маленькое помещение с видом из окна
    • [Source] Пустое помещение с панорамными окнами
    
    HTML, JavaScript:
    
    • [HTML] Подключение таблицы стилей CSS к HTML
    • [HTML][CSS] Красивый текст снизу картинки
    
    C#, C++ :
    
    • [C++] Действие на кнопку (при нажатии на кнопку)
    • [C++] Работа с файлами
    • [C++] Склоняем






    “When you have insomnia, you're never really asleep. And you're really awake.”
    “Никогда не указывайте на ошибки, если не знаете, как их исправить.” - Бернард Шоу.
    “Если ты способен выдумать что-то, ты можешь и сделать это.” - Уолт Дисней.
    “Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.” - Элеонор Рузвельт.

  2. 7 пользователей сказали cпасибо RastaOrecha за это полезное сообщение:

    Aretius (17.06.2014), bla (11.05.2015), frog163 (17.06.2014), Mexanizm (16.06.2014), spc. (16.06.2014), Tyser (17.06.2014), Ленивый (17.03.2015)

  3. #2
    ыыыыы Аватар для Mexanizm
    Регистрация
    16.01.2012
    Адрес
    Россия. Воронеж
    Возраст
    30
    Сообщений
    2,450
    Репутация: 287

    Звание: как роза среди колючек

    Re: Флаги

    Я не знал, что так можно. Спасибо
    Modern RP





  4. #3
    Проверенный Аватар для frog163
    Регистрация
    12.04.2010
    Адрес
    Samara
    Возраст
    31
    Сообщений
    4,548
    Репутация: 365

    Звание: - очень-очень хороший человек

    Re: Флаги

    Если вы будете использовать 100 переменных типа bool для каждого игрока (MAX_PLAYERS), то вы будете тратить 195 Кб памяти.
    ~195 будет если использовать integer(32 бит), для типа bool можно использовать такой вариант
    PHP код:
    new bool:lol[MAX_PLAYERS char];//500 байт
    ...х100//50000 ~= 49кб 
    Это так, для справки (:
    Ничто не ограничивает полет мысли программиста так, как компилятор, сцуко!
    Если в предложении собеседника различного рода смайлов больше чем слов - однозначно, что этот индивид страдает критической, неизлечимой и при этом прогрессирующей формой долбоебизма © лурка
    PAWN Compiler делает то, что вы приказали ему сделать, а не то, что вы хотели, чтобы он сделал..

  5. #4
    Проверенный Аватар для PawnoKokolotov
    Регистрация
    12.08.2010
    Адрес
    Пермский край
    Возраст
    27
    Сообщений
    1,205
    Репутация: 161

    Звание: - весьма и весьма положительная личность

    Re: Флаги

    спасибо, полезно
    Y

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •