Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 12
  1. #1
    Аватар для somebodies
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.01.2017
    Сообщений
    30
    Репутация:
    0 ±

    GetPlayerTargetPlayer();

    Всем привет в очередной раз.
    Вопросик такой возник. Допустим, я себе назначил на клавишу KEY_SUBMISSION определенное действие,а именно
    Код:
    new targetid = GetPlayerTargetPlayer(playerid);
    if(targetid != INVALID_PLAYER_ID) function_name(targetid,params);
    return 1;
    Собсно,выделяю игрока через ПКМ,нажимаю клавишу - нихрена не происходит. пробовал "дебажить" через printf,так он вообще молчит,как будто я нихрена и не делаю. прошу помощи с этой функцией

  2. #2
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Как вы определяете событие KEY_SUBMISSION. Покажите код.

  3. #3
    Аватар для somebodies
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.01.2017
    Сообщений
    30
    Репутация:
    0 ±
    В паблике OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
    Код:
     
    else if(newkeys == KEY_SUBMISSION) // конструкция else if т.к до этого есть также клавиши
    {
    // код который в топик старте
    }

  4. #4
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от somebodies Посмотреть сообщение
    В паблике OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
    Код:
     
    else if(newkeys == KEY_SUBMISSION) // конструкция else if т.к до этого есть также клавиши
    {
    // код который в топик старте
    }
    В этом и проблема, вы используете сравнение, а нужно побитовое И.
    Код:
     
    else if(newkeys & KEY_SUBMISSION)
    {
    // код который в топик старте
    }

  5. Пользователь сказал cпасибо:
    somebodies (08.01.2017)
  6. #5
    Аватар для somebodies
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.01.2017
    Сообщений
    30
    Репутация:
    0 ±
    Т.е "побитовое И" нужно использовать в любых проверках на нажатые клавиши в паблике OnPlayerKeyStateChange(); ?

  7. #6
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от somebodies Посмотреть сообщение
    Т.е "побитовое И" нужно использовать в любых проверках на нажатые клавиши в паблике OnPlayerKeyStateChange(); ?
    Да, ведь в newkeys передаются значения всех нажатых игроком клавиш. Хотя, если вы хотите проверить нажатие только одной клавиши, то используйте оператора сравнения.

    Например, для того, чтобы определить нажатие двух определённых клавиш вы можете использовать побитовое ИЛИ.
    PHP код:
    if (newkeys & (KEY_JUMP KEY_ACTION)) {
         
    // Код

    Последний раз редактировалось VVWVV; 08.01.2017 в 04:21.

  8. Пользователь сказал cпасибо:
    somebodies (08.01.2017)
  9. #7
    Аватар для somebodies
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.01.2017
    Сообщений
    30
    Репутация:
    0 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Да, ведь в newkeys передаются значения всех нажатых игроком клавиш.

    Например, для того, чтобы определить нажатие двух определённых клавиш вы можете использовать побитовое ИЛИ.
    PHP код:
    if (newkeys & (KEY_JUMP KEY_ACTION)) {
         
    // Код

    Самое странное это то,что у меня используется далеко не одна клавиша. Однако,в проверках на другие клавиши я использовал именно сравнение ("=="),а не побитовые "и"/"или",и все прекрасно работало. очень странно. ну ладно,спасибо за помощь Вам.

  10. #8
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от somebodies Посмотреть сообщение
    Самое странное это то,что у меня используется далеко не одна клавиша. Однако,в проверках на другие клавиши я использовал именно сравнение ("=="),а не побитовые "и"/"или",и все прекрасно работало. очень странно. ну ладно,спасибо за помощь Вам.
    Сравнение клавиши с == сработает только при нажатии какой-то определённой клавиши и никаких других. Тогда как сравнение через & сработает при нажатии определённой клавиши и любых других. Ты пытаешься использовать две клавиши одновременно (KEY_SUBMISSION и KEY_HANDBRAKE (клавиша выделения игрока)), но проверяешь на нажатие только KEY_SUBMISSION и никаких других, поэтому ничего и не работает.

    Поэтому, если хочется исключить нажатие лишних клавиш, в данном случае нужно использовать следующую конструкцию:
    PHP код:
    if (newkeys == (KEY_SUBMISSION KEY_HANDBRAKE)) { 

  11. Пользователь сказал cпасибо:
    somebodies (08.01.2017)
  12. #9
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Сравнение клавиши с == сработает только при нажатии какой-то определённой клавиши и никаких других. Тогда как сравнение через & сработает при нажатии определённой клавиши и любых других. Ты пытаешься использовать две клавиши одновременно (KEY_SUBMISSION и KEY_HANDBRAKE (клавиша выделения игрока)), но проверяешь на нажатие только KEY_SUBMISSION и никаких других, поэтому ничего и не работает.

    Поэтому, если хочется исключить нажатие лишних клавиш, в данном случае нужно использовать следующую конструкцию:
    PHP код:
    if (newkeys == (KEY_SUBMISSION KEY_HANDBRAKE)) { 
    Да, так лучше. Но выше предложенный код также сработал бы, ведь используется функция GetPlayerTargetPlayer. Она, как ни странно, проверяет выделение игрока игроком. Хотя это, пожалуй, испортит читаемость и восприятие кода.
    Последний раз редактировалось VVWVV; 08.01.2017 в 04:59.

  13. #10
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Да, так лучше. Но выше предложенный код также сработал бы, ведь используется функция GetPlayerTargetPlayer. Она, как ни странно, проверяет выделение игрока игроком. Хотя это, пожалуй, испортит читаемость и восприятие кода.
    Нельзя сказать лучше или хуже, просто один способ исключает нажатие других клавиш, а другой - нет. И что выбрать - это решать самому, разным людям нужны разные вещи. Я лишь хотел показать, почему == не работает для этого случая, а для других работает и причём здесь GetPlayerTargetPlayer я не понял

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

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