Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 4 из 9 ПерваяПервая ... 2 3 4 5 6 ... ПоследняяПоследняя
Показано с 31 по 40 из 87
  1. #31
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Ух ты, теперь-то я всё понял, кроме нескольких мелочей:
    - под нуль-символ нужно выделять один символ в переменной?
    - что означает функция (или как это называется) continue?
    PHP код:
    else if(!IsPlayerInRangeOfPoint(irangepos_xpos_ypos_z)) continue; 
    - в format учитывается всё, кроме табуляции, которая занимает 1 символ вместо двух, всё верно? Остальное (цвета и т.д.) по одному символу (цвет 8, буква, цифра по одному). А вот если у меня, допустим, есть дефайн, например "imyaservera" (P.S. Английский знаю хорошо, выдумал на ходу :D), в котором написано имя сервера (чтобы быстро изменять, мало ли), и в диалоге регистрации/авторизации написано следующее "велком ту "imyaservera"...", как здесь высчитывать количество символов для переменной? Учитывать ли кавычки?
    Последний раз редактировалось PawnoNoob; 06.04.2016 в 22:10.

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

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    1. Под нуль символ также нужно выделять место, ибо данные будут склеены.
    2. Это оператор, он пропускает (прерывает) итерацию.
    3. Да. Ассемблерный листинг:
    PHP код:
    ;     {888888}Some\0
    dump 7b 46 46 46 46 46 46 7d    53 6f 6d 65 0    
    Знака \n нет

    ;     {888888}\nSome\0
    dump 7b 46 46 46 46 46 46 7d a 53 6f 6d 65 0 
    Есть

  3. Пользователь сказал cпасибо:
    PawnoNoob (06.04.2016)
  4. #33
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    1. Под нуль символ также нужно выделять место, ибо данные будут склеены.
    2. Это оператор, он пропускает (прерывает) итерацию.
    3. Да. Ассемблерный листинг:
    PHP код:
    ;     {888888}Some\0
    dump 7b 46 46 46 46 46 46 7d    53 6f 6d 65 0    
    Знака \n нет

    ;     {888888}\nSome\0
    dump 7b 46 46 46 46 46 46 7d a 53 6f 6d 65 0 
    Есть
    Ох, как-то сложно Вы объяснили, так как я ещё не совсем понимаю значения этих слов из программирования... Сколько места нужо выделить для нуль-символа? И что такое "Ассемблерный листинг"? О_О И что такое "итерация"?

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

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Ох, как-то сложно Вы объяснили, так как я ещё не совсем понимаю значения этих слов из программирования... Сколько места нужо выделить для нуль-символа? И что такое "Ассемблерный листинг"? О_О И что такое "итерация"?
    Для нуль-символа требуется всего лишь одна ячейка, как и для других символов.
    Итерация

    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    А вот если у меня, допустим, есть дефайн, например "imyaservera" (P.S. Английский знаю хорошо, выдумал на ходу :D), в котором написано имя сервера (чтобы быстро изменять, мало ли), и в диалоге регистрации/авторизации написано следующее "велком ту "imyaservera"...", как здесь высчитывать количество символов для переменной? Учитывать ли кавычки?
    PHP код:
    #define SERVER "Some Name"

    static const name[] = "Welcome to "SERVER;
    const 
    SIZE sizeof name
    Последний раз редактировалось VVWVV; 06.04.2016 в 22:32.

  6. Пользователь сказал cпасибо:
    PawnoNoob (06.04.2016)
  7. #35
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Ух ты, теперь-то я всё понял, кроме нескольких мелочей:
    - под нуль-символ нужно выделять один символ в переменной?
    - что означает функция (или как это называется) continue?
    PHP код:
    else if(!IsPlayerInRangeOfPoint(irangepos_xpos_ypos_z)) continue; 
    - в format учитывается всё, кроме табуляции, которая занимает 1 символ вместо двух, всё верно? Остальное (цвета и т.д.) по одному символу (цвет 8, буква, цифра по одному). А вот если у меня, допустим, есть дефайн, например "imyaservera" (P.S. Английский знаю хорошо, выдумал на ходу :D), в котором написано имя сервера (чтобы быстро изменять, мало ли), и в диалоге регистрации/авторизации написано следующее "велком ту "imyaservera"...", как здесь высчитывать количество символов для переменной? Учитывать ли кавычки?
    1) Да. Нуль-символ указывается таким же спец-символом, как и \n, только "\0" и так же занимает 1 символ.
    2) Это, как сказали выше, оператор, пропускающий текущую итерацию. Итерация - это одно повторение кода в цикле. Например, вот тут
    PHP код:
    for(new 1<= 10i++) 
    Будет 10 итераций. Можешь загуглить, если до сих пор не понятно
    3) Содержимое макросов заменяется в момент компиляции, так что нужно высчитывать не длину имени макроса, а именно длину содержимого этого макроса.
    А учитывать нужно и то, что заполнители, типа "%s", "%d", "%02d" и т.п. - не занимают места вообще. Но если ты их будешь учитывать, то это пока не так критично. Лучше подожди момента, когда сможешь осознать почему ты делаешь именно так, а не иначе, ибо иначе ты создашь больше проблем для себя, чем пользы.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Всё-таки в голову пришёл ещё один вопрос. Не сам по себе, конечно, но всё же задам Вам: наткнулся на функцию обновления аккаунта (ну, снятие затычки, выход из тюрьмы и т.д.) и там присутствует цикл:
    PHP код:
    for(new iMAX_PLAYERSi++) 
    Заранее прочитал о нём в интернете и сделал вывод, что он не такой уж и хороший, гораздо лучше использовать foreach.
    PHP код:
    foreach(Playeri
    Так вот, сами вопросы:
    - действительно ли foreach лучше первого цикла?
    - нужен ли вообще этот цикл в обновлении аккаунта?
    - какая разница между этими двумя циклами?
    - и что вообще означает i и i++? (MAX_PLAYERS хоть знаю )
    Последний раз редактировалось PawnoNoob; 07.04.2016 в 00:56.

  10. #37
    Аватар для Profyan
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2013
    Адрес
    Омск
    Сообщений
    196
    Репутация:
    22 ±
    1.Да,быстрее.
    2.Если у тебя сохранение общее, то да.А если хочешь только определенного игрока сохранить - то нет.В функцию передавай параметр id игрока.
    3.В скорости. for.. - является частью языка.foreach - сторонняя разработка.foreach ориентирован на определенное множество.Подробнее можете почитать на официальном форуме или воспользоваться поиском на этом форуме.
    4.i - переменная-счетчик.С каждой итерацией цикла она изменяется. i++ - задаем шаг(увеличиваем на единицу после каждой итерации). i++ - постинкремент.



    Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку
    Мартин Фаулер


    Skype
    profan99
    VK
    click




  11. #38
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    - какая разница между этими двумя циклами?
    Цикл for, как уже сказали - стандартный цикл. foreach же представляет из себя самописанную систему, которая содержит в себе массив и ряд циклов, срабатывающих при подключении/выходе игрока на сервер.
    Представим, что на сервере такая картина: нулевой и первый слот - заняты, второй и третий - свободны, четвёртый - занят, пятый - свободен, шестой - занят.
    Стандартный цикл в любом случае начнёт свою проверку с нулевой ячейки и закончит 999-ой (в MAX_PLAYERS в 0.3.7 хранится число 1000). Хоть даже и на сервере всего 4 игрока. В SA-MP 0.3.7 так же добавили функцию, которая возвращает последний занятый ID на сервере, но тогда цикл, опять же, сделает 7 итераций (с 0 по 6), а не 4.
    А foreach же реализована система, которая запишет ID игроков по порядку в один массив и выглядеть массив "изнутри" будет так:
    PHP код:
    0 ячейка ID 0
    1 ячейка 
    ID 1
    2 ячейка 
    ID 4
    3 ячейка 
    ID 6 
    И уже цикл, для которого, для удобства, придуман макрос "foreach", будет обращаться не к ID игрока, а к ячейкам массива и извлекать ID игрока из ячеек массива, прогоняя тем самым только те ID, что подключены к серверу.
    Если на сервер подключится новый игрок, в foreach, благодаря ряду условий внутри цикла в OnPlayerConnect, новый ID (в нашем случае первый свободный ID - 2) запишется не в конец цикла (после 6), а именно на своё законное место - после двух, "сдвинув" все остальные ID на ячейку. Так же и при отключении - ячейка не станет свободной, а foreach просто возьмёт и сдвинет все последующее ID, шедшие после отключившегося от сервера, на одну ячейку назад. Благодаря этим новым действиям, которые совершаются с подключённым игроком, foreach и работает быстрее (если не понял, то foreach прогоняет в себе лишь те ID, которые подключены к серверу и никакие другие. Поэтому и проверка на то, подключён ли ID, вызываемый циклом (IsPlayerConnected) просто не нужна - он точно подключён).
    Так же в foreach имеется возможность создавать свои итераторы. Но это уже отдельная большая темаю

    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    - и что вообще означает i и i++? (MAX_PLAYERS хоть знаю )
    "i" - Это обычная переменная, которая нужна циклу для того, чтоб подсчитывать число повторений (итераций), совершённых при работе с циклом. Ты можешь обозвать эту переменную как угодно, просто в программировании принято переменные цикла обзывать именно таким, сокращённым видом (дабы ты понимал, "i" исходит от "iterator").
    "i++" - это обычное математическое действие, которое идентично записи "i = i+1" или же "i += 1". То есть, тут ты просто прибавляешь к переменной единицу. Можешь просто загуглить
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  12. #39
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Цикл for, как уже сказали - стандартный цикл. foreach же представляет из себя самописанную систему, которая содержит в себе массив и ряд циклов, срабатывающих при подключении/выходе игрока на сервер.
    Представим, что на сервере такая картина: нулевой и первый слот - заняты, второй и третий - свободны, четвёртый - занят, пятый - свободен, шестой - занят.
    Стандартный цикл в любом случае начнёт свою проверку с нулевой ячейки и закончит 999-ой (в MAX_PLAYERS в 0.3.7 хранится число 1000). Хоть даже и на сервере всего 4 игрока. В SA-MP 0.3.7 так же добавили функцию, которая возвращает последний занятый ID на сервере, но тогда цикл, опять же, сделает 7 итераций (с 0 по 6), а не 4.
    А foreach же реализована система, которая запишет ID игроков по порядку в один массив и выглядеть массив "изнутри" будет так:
    PHP код:
    0 ячейка ID 0
    1 ячейка 
    ID 1
    2 ячейка 
    ID 4
    3 ячейка 
    ID 6 
    И уже цикл, для которого, для удобства, придуман макрос "foreach", будет обращаться не к ID игрока, а к ячейкам массива и извлекать ID игрока из ячеек массива, прогоняя тем самым только те ID, что подключены к серверу.
    Если на сервер подключится новый игрок, в foreach, благодаря ряду условий внутри цикла в OnPlayerConnect, новый ID (в нашем случае первый свободный ID - 2) запишется не в конец цикла (после 6), а именно на своё законное место - после двух, "сдвинув" все остальные ID на ячейку. Так же и при отключении - ячейка не станет свободной, а foreach просто возьмёт и сдвинет все последующее ID, шедшие после отключившегося от сервера, на одну ячейку назад. Благодаря этим новым действиям, которые совершаются с подключённым игроком, foreach и работает быстрее (если не понял, то foreach прогоняет в себе лишь те ID, которые подключены к серверу и никакие другие. Поэтому и проверка на то, подключён ли ID, вызываемый циклом (IsPlayerConnected) просто не нужна - он точно подключён).
    Так же в foreach имеется возможность создавать свои итераторы. Но это уже отдельная большая темаю


    "i" - Это обычная переменная, которая нужна циклу для того, чтоб подсчитывать число повторений (итераций), совершённых при работе с циклом. Ты можешь обозвать эту переменную как угодно, просто в программировании принято переменные цикла обзывать именно таким, сокращённым видом (дабы ты понимал, "i" исходит от "iterator").
    "i++" - это обычное математическое действие, которое идентично записи "i = i+1" или же "i += 1". То есть, тут ты просто прибавляешь к переменной единицу. Можешь просто загуглить
    Но всё же, что лучше использовать для обновления (не сохранения) аккаунта? Стандартный for или самописный foreach?

  13. #40
    Аватар для Nash_Brigers
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.03.2016
    Адрес
    Moscow
    Сообщений
    167
    Репутация:
    44 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Но всё же, что лучше использовать для обновления (не сохранения) аккаунта? Стандартный for или самописный foreach?
    Вам же расписали их отличия.. Конечно foreach..

  14. Пользователь сказал cпасибо:
    PawnoNoob (07.04.2016)
 

 
Страница 4 из 9 ПерваяПервая ... 2 3 4 5 6 ... ПоследняяПоследняя

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

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

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

Ваши права

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