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

другие уроки, мануалы, советы по Construct 2

Сообщение Универсальное использование функций
» 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 КБ) Скачиваний: 94

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

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

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

Игродел
Сообщений: 329
Я тут с 18 апр 2014
Откуда: астрал
Репутация 46 [ ? ]

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

http://joxi.ru/
Отличный скриншотер. Можно рисовать всякие стрелочки/прямоугольники/эллипсы, писать текст, отмечать цифрами в каком порядке делать что-либо и еще кучка полезных приблуд :biggrin:
Пример:
Универсальное использование функций - Форум Construct 2 - Google Chrome.jpg
Аватара пользователя

Игродел
Сообщений: 2229
Я тут с 22 авг 2013
Репутация 450 [ ? ]

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

rokstars, я в фотошопе по старинке :biggrin:
Если помогли ? скажи спасибо нажав Изображение

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

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

Игродел
Сообщений: 329
Я тут с 18 апр 2014
Откуда: астрал
Репутация 46 [ ? ]

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

infant, много лишний работы с этой фотожабой нужно проделывать :biggrin: А там...пара-тройка кликов и вуаля.
Но...как говорится, на вкус и цвет все фломастеры разные wink::

infant писал(а):В процессе создания игры

Что за игра, если не сектрет? :smile:
Аватара пользователя

Игродел
Сообщений: 2229
Я тут с 22 авг 2013
Репутация 450 [ ? ]

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

rokstars писал(а):Что за игра, если не сектрет? :smile:

Я тут мануал пишу, а ты отвлекаешь :) Думаю это будет симулятор социальной сети. Главное скелет весь сделать, а на его базе уже можно на разные темы игры штамповать. Работы еще много на самом деле.
Если помогли ? скажи спасибо нажав Изображение

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

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

Игродел
Сообщений: 329
Я тут с 18 апр 2014
Откуда: астрал
Репутация 46 [ ? ]

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

Фухх вроде закончил. если где непонятно, что и зачем, пишите, дополню информацию.
Если помогли ? скажи спасибо нажав Изображение

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

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

Игродел
Сообщений: 329
Я тут с 18 апр 2014
Откуда: астрал
Репутация 46 [ ? ]

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

а у меня яндекс.диск установлен, он после каждого скрина запускает редактор, там стрелки цифры все есть...
Аватара пользователя

Участник
Сообщений: 43
Я тут с 20 янв 2014
Skype: kostya_kurt2
Репутация 16 [ ? ]

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

Grib04eg, ничего не понял из вашего сообщения .
Если помогли ? скажи спасибо нажав Изображение

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

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

Игродел
Сообщений: 329
Я тут с 18 апр 2014
Откуда: астрал
Репутация 46 [ ? ]

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

infant писал(а):ничего не понял из вашего сообщения

привыкай, тут это стабильно )

За урок +
Аватара пользователя

Модератор
Сообщений: 1085
Я тут с 14 апр 2013
Откуда: Нижний Новгород
Репутация 309 [ ? ]

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

Piponga, :biggrin:
Если помогли ? скажи спасибо нажав Изображение

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

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

Игродел
Сообщений: 329
Я тут с 18 апр 2014
Откуда: астрал
Репутация 46 [ ? ]



Вернуться в Другие уроки по Construct 2

Сейчас эту тему просматривают

Зарегистрированные пользователи: нет зарегистрированных пользователей

Наверх