Вопрос Откуда берут значения для m_fFlags?

Начинающий
Статус
Оффлайн
Регистрация
1 Июн 2019
Сообщения
11
Реакции[?]
0
Поинты[?]
0
Ну, я так понимаю, что большинство пастеров и не понимают (а может и понимают :DDDDDDD) откуда взялись значения 257 и 263 (в коде на плюсах видел 256 и 262), и также я не знаю откуда они берутся. Поэтому, я считаю, что этот вопрос будет полезен не только для меня, но и еще для пастеров. Пожалуйста, объясните, как вы понимаете, что 257(256) относится к прыжку, а 263(262) относится к присяду.
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
объясните, как вы понимаете
В информатике вся информация состоит из бит, каждый такой может быть 0 или 1.
Например в байте 8 бит, это означает что мы можем например описать ими беззнаковое число 0..255 (т.к. столько комбинаций получается переставляя нули и единицы), либо можем знаковое число -127..+127 (1 бит обозначает знак числа), либо можем хранить 8 независимых флагов на каждый бит.
Так и происходит в переменной m_fFlags класса CBaseEntity, она int, что в C++ означает 32-бита, т.е. базовая сущность может хранить 32 незавсимых флага.
Сами флаги определены разработчиками движка, и посмотреть их можно например в сливе сорсов движка
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Каждый такой флаг описан как 1 << номер бита, т.е. единица сдвигается в определенный слот (отсчет идет с нуля).
Писать числа вручную глупость, нужно использовать константы, например в 257 это FL_ONGROUND (1 << 0=1) совмещенный с FL_CLIENT (1<<8=256), а 263 это FL_ONGROUND + FL_DUCKING + FL_ANIMDUCKING + FL_CLIENT и т.д.
Для совмещения/иссечения/тестирования таких флагов используются побитовые операции (| ^ & ~ в C++), подробнее тут
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Технически же, m_fFlags это синхронизируемая переменная, сервер просчитывает ее у себя и отправляет клиенту каждый тик (если не учитывать придикции на клиенте).
 
Начинающий
Статус
Оффлайн
Регистрация
1 Июн 2019
Сообщения
11
Реакции[?]
0
Поинты[?]
0
В информатике вся информация состоит из бит, каждый такой может быть 0 или 1.
Например в байте 8 бит, это означает что мы можем например описать ими беззнаковое число 0..255 (т.к. столько комбинаций получается переставляя нули и единицы), либо можем знаковое число -127..+127 (1 бит обозначает знак числа), либо можем хранить 8 независимых флагов на каждый бит.
Так и происходит в переменной m_fFlags класса CBaseEntity, она int, что в C++ означает 32-бита, т.е. базовая сущность может хранить 32 незавсимых флага.
Сами флаги определены разработчиками движка, и посмотреть их можно например в сливе сорсов движка
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Каждый такой флаг описан как 1 << номер бита, т.е. единица сдвигается в определенный слот (отсчет идет с нуля).
Писать числа вручную глупость, нужно использовать константы, например в 257 это FL_ONGROUND (1 << 0=1) совмещенный с FL_CLIENT (1<<8=256), а 263 это FL_ONGROUND + FL_DUCKING + FL_ANIMDUCKING + FL_CLIENT и т.д.
Для совмещения/иссечения/тестирования таких флагов используются побитовые операции (| ^ & ~ в C++), подробнее тут
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Технически же, m_fFlags это синхронизируемая переменная, сервер просчитывает ее у себя и отправляет клиенту каждый тик (если не учитывать придикции на клиенте).
понял, благодарю за потраченное время
 
Сверху Снизу