Универсальное использование функций

Сообщение Универсальное использование функций
» 20 июн 2014, 09:18

Приветствую вас славные игроделы. В процессе создания игры реализовал для себя удобный вариант использования функций в Construct 2, который позволит привести к более чистому виду часть действий в коде.
Написал так, что ничего не понятно ? :biggrin: Тогда читаем дальше и все станет ясно.
В данном примере вы увидите как можно быстро и безболезненно менять различные значения игрока.


Нам потребуется:
Плагин CBhash
Хостинг с поддержкой PHP и MySQL, я этот пользую.

Хостинг
Процедуру создания баз и заливки файлов описывать не стану, на форуме полно информации на эту тему.

Визуальная часть
  • 1. создаем проект и добавляем в него необходимые плагины






     скриншот





    Изображение


  • 2. создаем на слое объект типа TEXT и дадим ему имя, например UserInfo В нем у нас будет выводиться текущая информация об игроке.






     скриншот





    Изображение


  • 3. создаем на слое объект типа TextBox и сразу добавим ему приватную переменную action.
    Это для того что бы не создавать кучу одинаковых объектов, а использовать копию одного, но с разными значениями.
    Так надо делать всегда !!!! в целях оптимизации игры.






     скриншот





    Изображение


  • 4. Выделяем объект типа TextBox и через зажатую клавишу CTRL создаем еще три копии объекта. Каждой копии назначаем значение приветной переменной action: UserLogin, UserLang, UserPass, UserSlogan
  • 5. создаем на слое объект типа Button и так же как с TextBox назначаем ему приватную переменную. создаем еще три копии и в значениях переменной каждой копии прописываем : UserLogin, UserLang, UserPass, UserSlogan. должно получиться так






     скриншот





    Изображение


С визуальной частью закончили, теперь давайте закачаем файлы и базу, что бы наглядно видеть, то что мы делаем. Смотрите в конец поста, там файлы есть необходимые.
С этим закончили? переходим к самому интересному, к евентам

Пишем события
  • 1. создаем глобальную переменную с именем SERVER_NAME в значении указываем путь до расположения скрипта обработки данных на хостинге, у меня это http://webtpl.ru/func/, галочку у чекбокса constant ставим обязательно






     скриншот





    Изображение


  • 2. создаем событие, на срабатывание при загрузке слоя






     скриншот





    Изображение



    где :
    • 1.выполняем проверку на наличие указанного ID юзера в локальном хранилище. Это условие поставлено исключительно для текущей демонстрации, в рабочих вариантах оно используется не так. Означает оно следующее.
      Если значение ключа "UserID" равно 3588, то вызываем функцию "loadinfo"
      Если значение ключа "UserID" не равно 3588, то присваиваем ему значение 3588 и вызываем функцию "loadinfo"
    • 2. Функция "loadinfo" служит для отправки AJAX запроса на сервер, что бы получить информацию.






       скриншот





      Изображение



      в запросе мы просто отправляем ID юзера , который берем из локального хранилища
    • 3. событие вызываемое при успешной отправке AJAX запроса , обратите внимание, что значение поля TAG и имя этого события имеют одинаковое значение "loadinfouser".
    • 4. проверка на ошибки, если полученные значения с сервера не "error", то значит все в порядке и выполняем действия.
      Первой строкой загружаем полученные данные в массив, второй строкой помещаем данные из массива в текстовое поле вот таким кодом
      Код: Выделить всё
      "ID юзера: = " & Dictionary.Get("UserID") & newline
      & "Логин юзера: = " & Dictionary.Get("UserLogin") & newline
      & "Язык юзера: = " & Dictionary.Get("UserLang") & newline
      & "Пароль юзера: = " & Dictionary.Get("UserPass") & newline
      & "Слоган юзера: = " & Dictionary.Get("UserSlogan") & newline
  • 5. теперь если вы все сделали верно, то при запуске предпросмотра в С2 вы получите вот такой вид






     скриншот





    Изображение



    т.е. мы с вами получили данные, хранящиеся на сервере и вывели их в текстовом поле. Эти данные у нас хранятся в массиве Dictionary, и ими можно пользоваться в последствии, не делая лишних запросов на сервер. Ну вот мы и подобрались в плотную к созданию универсальной функции обновления данных юзера.
  • 6. Создаем группу в которую помещаем функцию "UPuserMySQL" и условие на выполнение AJAX запроса с тегом "updateuser"






     скриншот





    Изображение



    Что у нас здесь твориться ? а здесь функция, которая принимает три параметра , для передачи их в запрос на сервер, а так же здесь мы как раз и используем CBhash для защиты от подстановки левых значений в POST запрос. Ну и наконец проверка на выполнение запроса и прихода ответа от сервера, т.е. если нет ошибок то вызываем функцию AJAX.LastData&"_next" где AJAX.LastData это значение в котором указано имя другой функции, которая собственно и запустила механизм обновления.
    Пока вам это все не понятно, но сейчас поймете для чего это сделано.
  • 7. Функцию универсального обновления данных мы сделали, теперь давайте создадим событие, вызывающее ее.
    • создаем условие "клик по кнопке" и добавляем к нему добавим событие, событием будет вызов функции






       скриншот





      Изображение



      Здесь мы с вами задействовали те самые приватные переменные, которые указывали раньше для кнопки, как видите мы с вами сэкономили несколько строчек, указав в событии вызов функции с именем , которая равна значению локальной переменной самой кнопки. Обратите внимание, кнопки я заменил на страйты, т.к. кнопки отказались выполнять нужное нам.
    • Добавим еще группу , для удобства и в нее запихнем две функции "UserLogin" и "UserLogin_next" , эти функции будут вызваны при клике по кнопке со сменой логина (помните про приватные переменные) как то так должно получиться






       скриншот





      Изображение



      как видите мы вызвали функцию "UPuserMySQL" и в ней передали три параметра
      "user_login" - это ячейки в базе MySQL
      TextBox.Text - это введенный вами тест в текстбоксе
      "UserLogin" - это имя функции, которая вызвала обновление, для того что бы нам к ней вернуться

      функция "UserLogin_next" вызывается другой (тем самым универсальным обновлением)






       скриншот





      Изображение



      "UserLogin_next" у нас у всех обрабатывается в примере одинаково (см. исходник), но сделана для того, что бы вы могли назначать индивидуальную обработку для каждого действия.

Итог
Ну вот мы и закончили, писака с меня херовый, если честно, кто не разберется, спрашивайте, попробую разъяснить более доступно.
Исходники:
func_primer.zip
(176.92 КБ) Скачиваний: 125

ДЕМО: тыц
Последний раз редактировалось infant 20 июн 2014, 12:58, всего редактировалось 8 раз(а).
Если помогли ? скажи спасибо нажав Изображение

Оптимизация проектов на С2 || ТОП рекордов Онлайн

Изображение
Аватара пользователя

Игродел
Сообщений: 327
Я тут с 18 апр 2014, 19:56
Откуда: астрал