Работа с переменными.

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

Сообщение Работа с переменными.
» 21 мар 2014, 18:29

Почитав урок от yes_future был очень недоволен, т.к. ни орфографии, ни здравых конструкций с событиями я не увидел, поэтому пишу свой урок. Все кому интересно - прошу под огонек. Приступим:
Что такое переменная? Как говорит википедия: "Имя, с которым может быть связано значение". Т.е. переменная – это просто значение, которое может меняться. В construct 2 они хранятся в разных местах, в зависимости от ситуации. Чтобы создать переменную нужно открыть полотно событий, кликнуть правой кнопки мыши на событии, другой переменной или свободном пространстве и выбрать Add global variable или Add local variable, так же можно нажать V. Но перед тем как мы создадим переменную нужно объяснить два понятия. Локальная и глобальная переменная. Локальная переменная - переменная которая создается в событии, т.е. ее нельзя использовать в других событиях. Глобальная переменная - переменная которая создается в не события, ее можно использовать в других событиях. Теперь можем творить.
При создании переменной мы увидим вот такое меню:
Изображение

Т.к. других свойств у переменной нету, можем рассмотреть их на этой картинке:
1) Название переменной, мы же не будем обращаться к ее адресу в памяти, поэтому надо дать четкое имя от которого станет ясно зачем она нужна. Лично я придерживаюсь таких же название как, если бы писал на С, т.е. не пишу цифры в начале, на английском, с маленькой буквы без пробелов и т.д.: Если переменная означает сколько осталась жизней у игрока - playerHealth. Если это значение выключателя - switchValue.
2) Тип - в c2 их всего 2 - какие данные будут хранится, если нужно хранить число черепашек в шкафу у вас возникнут затруднения при записи буквами (Пять, шесть) и вам понадобиться записывать число (5, 6), но если вы хотите чтобы игра знала имя вашего-же лучшего друга, не помешает обзавестись буквами.
3) Начальное значение - значение с которым появится переменная. Переменные в c2 не могут хранить "пустоту", в отличии от языков высшего уровня. В них должно быть хоть что-то, например, 0 или "Васька".
4) Описание - для хорошего названия переменной обычно не нужно, но иногда не помешает.
5) Будет ли переменная статическая? На скриншоте видно, что использовать это поле сейчас нельзя. Это потому что только локальная переменная может быть статической. Что же изменится если переменная будет статическая? Если не выделить это поле, то переменная будет принимать свое первоначальное значение каждый раз когда событие, в котором оно создано, будет вызываться. Т.е. если ее изменить, то когда событие вызовется снова, то изменение не сохранятся, но если переменная будет статической, то все изменения будут хранится и не исчезать.
6) Можно ли изменить переменную. Если галочка стоит, то изменить переменную нельзя. Обычно такие переменные используются чтобы не вставлять повсюду одно и тоже число\строку, а потом не переписывать 50 раз.

Теперь можно и к практике приступить: Создадим просто счетчик - если нам нужно считать овец, будем нажимать на кнопку, тем самым увеличиваю переменную с количеством овец. Вот вам текстурка для овцы. Создадим новый проект и назовем его SheepCounter. Сразу настроим под себя. Создадим спрайт с именем sheepBtn, объект Text с именем sheepsTxt и добавим объект Mouse. Теперь нужно кликать по овечке, добавляем событие мышки - On object clicked и выбираем овцу для объекта. Но где же переменная? Создаем и даем ей имя sheepsCount с начальным значением 0. Теперь можно и работать с переменной. В c2 есть 4 возможных операций с переменными:
1) Прибавить
2) Вернуть к начальному значению
3) Задать значение
4) Отнять
Мы будем использовать только первые два. К событию нажатия овцы добавляем действие: System -> Add To. Теперь выбираем sheepsCount, а во втором вписываем единицу. Мы работаем с переменной, это хорошо, но как мы узнаем записанное значение? Добавляем еще одно действие - sheepsTxt -> Set to. И вписываем название нашей переменной. Проверяем. Давайте проанализируем ошибки.
1) Скорее всего овца у вас расплывчата. Чтобы это исправить идем в настройки проекта и в "Configuration Settings" выбираем "Sampling" и ставим "Point", подробнее здесь на английском.
2) Как можно заметить, изначально текстовое поле выдает Text, что не верно. Тут можно побаловаться с константами. Давайте создадим константную переменную в которой будем хранить стартовое значение sheepsCount, а после создадим событие System -> On start of layout. И добавим следующие действия: Присваиваем sheepsCount значение нашей константы, для этого Добавляем действие System -> Set value и в поле Value пишем имя вашей константы. Присваиваем тексту значение все той же константы. Запускаем. Скорее всего должно работать. Не помешает поиграться со значением константы для "краш теста".
Теперь мы знаем как складывать, следовательно, и вычитать по аналогии (Subtract from), а также присваивать значения. Осталось научиться их сравнивать. Перед сном я не считаю овец, поэтому посчитать овец до 10 для меня много. Давайте добавим условие, что если мы посчитали больше 10 овец, то вместо количество овец будем выводить "Достаточно много".
Щелкаем по событию нажатия овцы и выбираем Add>Add sub-event. Выбираем System -> Compare variable. В поле Variable выбираем нужное нам, т.е. количество овец, в поле camprasion нужно выбрать какой логический оператор нам нужен, в нашем случае больше (greater than). В последнем поле - Value - нам нужно выбрать число больше которого считать овец становится трудно, я поставлю 10 для теста. Теперь осталось задать значение тексту. В итоге у меня вышло следующие:
Изображение.


Подведем итоги:
- Мы узнали, что такое переменная и какие они бывают.
- Мы узнали какими особенностями обладают разные типы переменных.
- Узнали какие операции и события связанны переменные.
- Не узнали многого о статических переменных :c

На этом все :hi: Спасибо, что почитали, жду здравой критики.
Последний раз редактировалось yegorf1 22 мар 2014, 11:37, всего редактировалось 1 раз.
Аватара пользователя

Участник
Сообщений: 134
Я тут с 09 фев 2014
Skype: yegorf1
Репутация 9 [ ? ]

Сообщение Работа с переменными.
» 21 мар 2014, 20:47

Огромное спасибо за урок.
SheepCounter.capx
(172.83 КБ) Скачиваний: 175
Мои работы Вы можете посмотреть на www.ven000mus.ru

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

Участник
Сообщений: 24
Я тут с 01 мар 2014
Откуда: Ставрополь
Skype: mokushva
Репутация 0 [ ? ]

Сообщение Работа с переменными.
» 21 мар 2014, 22:51

ven000mus писал(а):Огромное спасибо за урок.

Спасибо, что проявил интерес, но ты допустил много ошибок. Например, напрягаешь процессор постоянным условием, но главное что-бы ты понял все связанное с переменными. Удачи
Аватара пользователя

Участник
Сообщений: 134
Я тут с 09 фев 2014
Skype: yegorf1
Репутация 9 [ ? ]

Сообщение Работа с переменными.
» 22 мар 2014, 00:01

yegorf1 писал(а):но ты допустил много ошибок. Например, напрягаешь процессор постоянным условием


Друг, а будь добр тыкнуть на мои ошибки. А то на словах я не очень разберу. Заранее буду благодарен.
Мои работы Вы можете посмотреть на www.ven000mus.ru

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

Участник
Сообщений: 24
Я тут с 01 мар 2014
Откуда: Ставрополь
Skype: mokushva
Репутация 0 [ ? ]

Сообщение Работа с переменными.
» 22 мар 2014, 01:52

ven000mus писал(а):тыкнуть

Указать =)
Аватара пользователя

Участник
Сообщений: 4
Я тут с 16 мар 2014
Репутация 0 [ ? ]

Сообщение Работа с переменными.
» 22 мар 2014, 10:31

System -> On start of layot.

Пишется layout
Переведу вашу игру/часть игры/диалоги/описание/что угодно на английский язык. Могу поправить существующий перевод/проверить на наличие ошибок. Подробности тут или в ЛС
Es gibt viele verschiedene Regeln im deutschen Sprache. Doch die funktionieren immer nicht. Ausnahmen.
Аватара пользователя

Участник
Сообщений: 118
Я тут с 08 мар 2014
Двиг: Godot Engine
Skype: Discord: Ackens#8872
Репутация 27 [ ? ]

Сообщение Работа с переменными.
» 22 мар 2014, 11:38

Gro0vL писал(а):Указать =)

Не суть же (:
Cloudy_ писал(а):Пишется layout

Исправил, спасибо.
ven000mus писал(а):Друг, а будь добр тыкнуть на мои ошибки. А то на словах я не очень разберу. Заранее буду благодарен.

- Ты не сделал все, что я написал.
- Постоянное условие напрягает комп. Оно нужно только когда ты изменяешь переменную, посмотри как у меня сделано.
- Изначально текст пустой - неправильно с точки зрению пользователя.
- Если окно растянуть овечка расплывчатая - нужно либо запретить растягивать либо поставить пикселизацию, как сделал я.
Аватара пользователя

Участник
Сообщений: 134
Я тут с 09 фев 2014
Skype: yegorf1
Репутация 9 [ ? ]

Сообщение Работа с переменными.
» 28 мар 2014, 07:47

ну а какже локальные переменные? ты рассказал только о глобальных
Аватара пользователя

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

Сообщение Работа с переменными.
» 28 мар 2014, 14:36

dobro24h писал(а):ну а какже локальные переменные? ты рассказал только о глобальных

работая с локальными переменными выявил баг. они не всегда работают. даже при прямом обращении -команда не срабатывает. бывает не всегда и на всех командах, но у мели лично была проблема с генерацией случайного числа в локальной переменной. попросту программа отказывалась генерировать число выдавая все время результат 1. ошибки небыло так как перенося локальную переменную вверх, когда она становилась глобальной -все начинало работать. поэтому я лично не советую пока использовать локальные переменные. с ними могут быть ошибки, которые будет очень трудно найти

а по поводу урока. было бы полезно рассказать не только о глобальных но и о приватных переменных которые присваиваются самим спрайтам
Аватара пользователя

Администратор
Сообщений: 5706
Я тут с 05 сен 2012
Двиг: Construct2
Лицензия: Personal
Skype: c2community
VK: gabrielsailergray
Репутация 377 [ ? ]

Сообщение Работа с переменными.
» 28 мар 2014, 15:54

Sailer, пример в студию)
 
ты же понимаешь что локальной переменной не существует выше условия в котором она находится
Game: Exzobot
ИзображениеИзображениеИзображение
Аватара пользователя
ab

Администратор
Сообщений: 772
Я тут с 06 сен 2012
Репутация 109 [ ? ]



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

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

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

Наверх