TrueBlueDragon

TrueBlueDragon

На Пикабу
Дата рождения: 19 декабря 1994
поставил 1091 плюс и 16 минусов
отредактировал 3 поста
проголосовал за 2 редактирования
Награды:
5 лет на ПикабуС Днем рождения, Пикабу!
6658 рейтинг 26 подписчиков 72 подписки 49 постов 14 в горячем

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды.

Утро доброе, господа!

Для начала немного анализа.


Мои прошлые посты собирали не только плюсы, но и минусы. И каждый новый пост приносил всё больше минусов. Я задаюсь вопросом, почему так? Поэтому прошу вас ответить в комментариях, чего мне не хватает?
Может я слишком часто постил?
Или мой текст слишком безграмотен и не структурирован?
Возможно вы не хотели бы читать о том, что в итоге было ошибкой и лишено смысла?
Или минуса заслуживает моё дилетанство в области геймдева? Мол и ООП учить не хочет, и выдаёт себя за профи-игродела?
Опишите пожалуйста в комментариях, как я могу сделать посты более приятными для вас?

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

Как вы помните, в прошлом посте было описано, как я отказался от прошлого метода "открывания" карт. В этот раз в каждую из шести карт я добавил в качестве кадров рисунки для всех карт.

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Следом мне нужно было, собственно, открыть карты. Я делал это простым переназначением кадра анимации на каждую карту.

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост
Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Что ж, эта вещь работает, но теперь появилась проблема выбора карт таким образом, что бы они не повторялись. И тут у меня случился тупик. А вернее развилка: влево - создать заранее последовательность чисел, и уже на неё опираться как на случайную последовательность; или пойти вправо - каждый раз при присвоении рандомного кадра делать выбор среди не открытых карт. Как делать первое я не знал, а второе хоть и было понятно как делать, но мне это показалось слишком сложным.

В итоге, на следующий день я отправился влево. Я же ведь левша!
Но на самом деле не по этому. Второй вариант, при внимательном рассмотрении, может быть весьма нереальным. И вот почему: часто ли у вас было такое, что вы вытащили из колоды, например, в Манчкине, те самые 3-4 карты подряд, которые вы сыграли в течении последних десяти ходов? Даже если колода только что закончилась и перетасовалась.
К тому же, пристальная критика господина shakagami натолкнула меня на создание последовательности чисел в одномерном массиве.

НеМного погуглив я всё таки умудрился составить правильный запрос и в числе первых строк нашёл гайд по созданию случайной последовательности неповторимых неповторяющихся чисел. Кому нужно будет - могу в комментах дать ссылку.
Однако сразу ввести её в игру я не смог. Запутался. Так что первым делом я воссоздал пример у себя в новой сцене с новым листом событий. Выглядел данный рандомизатор так.

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Что бы перепроверять корректность работы я добавил кнопочку, которая будет инициировать перетасовку.


Тестовый прогон и...

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

...как мы видим, в массиве действительно нет двух одинаковых номеров. Так что следующим этапом я вставил это дело в основной лист событий. Перетасовку поставил на старт сцены, что бы перетасовка происходила автоматически. Плюс еще перед этим указал автоматическое изменение размера текущей последовательности под размер колоды. Ведь в последствии карты будут добавляться и колода увеличится.

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост
Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

И да, это вполне ожидаемо работало.

Кстати, еще упомяну, что максимальное число для рандома я взял на 1 больше, чем размер массива последовательности, ибо первые несколько тестов у меня игра просто зависала. Всё дело в особенности функции рандомизатора: он будет случайным образом выбирать число строго меньше верхней границы. Так что поначалу функция ну вот просто никак не могла найти восемь непохожих друг на друга чисел из семи возможных!

Теперь переходим к "вскрытию" карт.

Здесь я сразу ввёл глобальную переменную под названием "актуальная карта". Она отображает номер той карты, которая будет выбрана следующей.

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Корректируем ивенты: как только каждая карта дойдёт до своего места, ей будет назначен кадр "верхней карты".

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост
Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

И ... карты открылись подряд. Господа, у нас СТРИТ!

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

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Далее мне нужно было проработать механизм движения и замены карты, когда её выбрали. Я хотел сделать так, что бы когда карты выберут, она двигалась на центр экрана, далее активировались её свойства, затем карта следовала к колоде и оттуда снова на своё место, где она стала уже новой картой.

И лучшее, что выдал мне мой мозг, видно ниже.

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост
Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

И естественно эта фигня не работала.

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

В течении следующих двух с половиной дней я отдыхал от работы почитывая о различных поведениях и пробуя это на практике, поскольку с кастомным поведением я не мог задавать скорость в заданном направлении, а только ускорение. И, видимо, каждое новое ускорение как-то суммировалось с предыдущими, так что когда карта после выбора возвращалась обратно в колоду, её там словно на резинку привязывали: она дрыгалась в разные стороны от колоды, но никак не хотела лететь на своё место. Пробовал также поведение "Пуля", но оно в первый цикл алгоритма двигалось не так, как в последующие. А это недопустимо.

По итогу я остановился на поведении нахождения пути (pathfinding). Вообще-то это поведение служит для автоматического нахождения пути для обхода препятствий, но, поскольку, у нас препятствий не будет, карта должна будет двигаться прямолинейно. К тому же пока я экспериментировал, пришёл к разделению событий достижения каждой точки движения на три группы.

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Теперь весь цикл движения выглядел одинаково. И всё бы хорошо, если бы не маленькая неточность.

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Карта всякий раз не доходила до конца на несколько пикселей.

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

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

На данный момент движение карт работало вполне удовлетворительно, одинаково, близко к тому, как было запланировано, но зато без необъяснимых сюрпризов. Так что на данный момент работу с движением карт можно считать завершённой.

Под конец, осталось зациклить колоду. А также я решил добавить перетасовку карт, что остались в колоде. Это исключит вычисление последовательности и предугадывание карт, когда колода закончится. За основу я взял всё ту же функцию тасовки, однако теперь первым шести элементам массива последовательности присваивались номера уже открытых карт, а переменная актуального номера начинала работать с шести, а не с нуля, как при первом перемешивании.

Fight Like a Wizard Alpha #4: правильное движение и перетасовка колоды. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

На этом пока что всё.

Не забудьте оставить в комментариях своё мнение на тему качества постов.


И спасибо каждому, кто в который раз прочёл мою отсебятину до конца.

P.s. Забавно, но баянометр показал сначала мой предыдущий пост с совпадением на 71%, а чуть ниже его же, но уже на 53%.

Показать полностью 18

Fight Like a Wizard Alpha #3: появление стартовых карт.

И снова день добрый.

В прошлый раз у меня была проблема с появлением первых карт, а именно с их движением из колоды на свои места.

В прошлый раз я отказался от варианта, когда все карты представлены в виде одного объекта, а их виды закинуты как кадры анимации. Поэтому сейчас попробуем реализовать всё представив карты как отдельные объекты.

Для начала я разделил объекты по слоям: на задний фон, на втором разместил волшебников, далее идут карты и сверху лежит только колода карт. Последний слой, который виден на скрине, я в последствии удалил.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Далее я создал карты как отдельные объекты. Кроме того я добавил карту-рубашку и еще 4 новые карты для разнообразия.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Следующим шагом я расставил каждую карты-рубашку по своим местам. Они у меня сделаны тоже отдельными объектами.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Я не знаю, зачем я их расставил по своим местам, ведь расстояния между ними я еще в прошлый раз рассчитал. Так что я сразу сдвинул их на исходную точку под колоду.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Что ж, протестим?

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Хмм... Похоже, что карты может и вылетают с пропорциональными скоростями, но всё равно достигают своего места они не одновременно.
Просматривая таблицу ивентов я, кажется, понял, почему так. Расстояния у меня от начала движения карт к их конечной точки имеют небольшой прирост в начале в количестве 66 пикселей. Т.е. расстояния между картами хоть и одинаковые, но расстояния нифига не пропорциональные.
Так что я просчитал поправку в скорости, что бы все карты одновременно стали на свои места.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

В результате я получил, что скорости должны быть кратны 7417,334 пикселям.
Меняем действия.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Проверяем!

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Ну, уже ближе, но всё равно где-то была ошибочка.

С другой стороны, почему бы не сделать поочерёдное появление карт с одинаковой скоростью?
Переписываем действия и ставим паузу в пол-секунды между появлениями карт. Разумеется, первой будет появляться шестая карта.
Также сразу делаем условие для остановки карт.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

И снова тестим!

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

*****. Похоже, я забыл прописать коэффициенты умножения расстояний.

Меняем коэффициенты и снова тест.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Что ж. В этот раз карты всё сделали правильно. Ура!

Теперь подумаем о том, как эти карты "перевернуть". И что бы эта карта была рандомной.

И тут то я впал в ступор. И неизвестно зачем, но я создал массив со свойствами базовой колоды карт. Но мне она ещё пригодится.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

А впал в ступор я по следующей причине.


Мне нужно было, что бы карты появлялись рандомно. Для этого достаточно просто присвоить рандомное значение какой-нибудь переменной, а затем вызвать объект, у которого в названии есть данное число. Но проблема в том, что я не могу создавать объект по имени, которое получено синтезом текста и числа. Мне прога просто предлагает выбрать любой объект и создать его экземпляр.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

То есть, это не строка для ввода, а просто кнопка.

Что ж. Мой мозг подкинул мне два варианта. И выбрал я для начала тот, в который верил меньше. Не ну а вдруг!

Я вернулся к созданию одной карты с разными картами.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Также я добавил этой карте поведение Кнопки, что бы прикреплять её к существующей карте-рубашке, тем самым "открывая" её, и прописывать движения только для шести карт, вместо целой колоды.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Задаём размер карты, поскольку размер картинки больше, чем карты на сцене.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Далее, по приходу карт-рубашек, добавляем создание открытой карты, прикреплённой к каждой из "рубашек", и даём им рандомный кадр.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Тестим!

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Хм, возникла ошибка. Нифига не понятно, но очень интересно.
Я пытался создать экземпляр карты, которой нет нигде ни на одной из сцен. Особенность софта состоит в том, что она не может создать новый экземпляр объекта, если его нет нигде на сценах. Она как бы клонирует тот экземпляр, который был ранее создан, отредактирован по размерам и проч. Так что я создал за сценой один экземпляр данной карты и снова протестил.

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

И получилось НЕЧТО. Т.е. у меня ни одна карта не появилась поверх существующей. Они все возникли в правом верхнем углу и постоянно моргала разными кадрами.

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

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

Fight Like a Wizard Alpha #3: появление стартовых карт. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

В заключение вернёмся к прошлому посту. Я там в конце спрашивал, есть ли возможность обращаться не к объекту в целом, а к конкретному экземпляру.
И сегодня утром мне ответил пользователь Greengrym, тем самым простимулировав меня исследовать несколько возможностей и получить ответ на этот вопрос.
А если вкратце, то у меня возник вопрос: Как сказать компу "Ищи среди этих объектов тот, у которого переменная равна значению n!"? Днём я сообразил, что ответ в вопросе - двойное условие события!
Три частных случая таких множественных условий вы найдёте в ветке комментариев.

И еще раз спасибо всем за то, что в который раз вы читаете мои посты.

Показать полностью 21

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа.

И снова всем здравствуйте.

В прошлом моём посте я в конце отметил, что у меня возникла проблема с исчезновением карт. Собственно, начну с разбора этой проблемы.

Но для начала опишу ещё один момент. Поскольку карты у меня будут разного вида, их нужно как-то отличать друг от друга. Для начала у меня было 4 спрайта карт, которые я загрузил в один объект в виде кадров анимации.

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Для того, чтобы спрайт карт (а соответственно и свойства) был разным, я ввёл в объект карты локальную переменную, в которой для каждого экземпляра на сцене я написал отдельный номер.

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Далее я сделал так, что бы при нажатии на карту она двигалась к моему волшебнику, моргала и исчезала, т.е. как бы применяясь.

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Условие для остановки карты - пересечение ею 370-й координаты Y. Однако оно не сразу стало таким.

Сперва было событие, что когда вертикальная координата станет равна 356-ти (точка, куда я направлял движение), тогда и будем производить остановку. Однако, как показала практика, карта при движении может никогда и не иметь такой координаты. Поскольку она двигалась довольно быстро,  многие натуральные значения координат попросту проскакивались и карта уёбывала к херам с экрана. Поэтому выбор пал на условие отслеживания преодоления 370-й координаты Y-ка.

Выяснил я этот нюанс лишь тогда, когда отключил мигание карты, ибо, напомню, она исчезала.

Немного поразмыслив и вникнув в логику событий, я пришёл к выводу, что мигание будет постоянно в состоянии старта, пока событие будет выполняться. Так что следующим моим действием было присвоение координат, которые не будут удовлетворять условию события.

Таким образом как только карта пересекала нужную границу, её тут же переносило немного назад и мигание спокойно работало.

Однако теперь возникла другая беда: карты останавливались ровно в том месте, где их настигло выполненное условие.

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

И, поскольку, все шесть карт стартуют в одну точку с разных мест, имеют разную длину пути, они останавливаются в совершенно разных местах. Так что было решено переносить карту не просто немного назад, а в конкретную позицию. Теперь всё было замечательно.

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Следующим шагом я решил сделать появление карт в начале сцены. Они должны будут как бы выплывать из колоды слева и становиться на свои места. При чём хотелось сделать, что бы карты появлялись рандомные.

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

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Затем я добавил цикл повторения на 6 раз и занёс в него все действия с картой.

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Для чего мне нужна была эта переменная?

По задумке, каждый новый созданный экземпляр карты должен будет стать на своё место: от первого до шестого. Для того, чтобы узнать конкретные координаты остановки каждой карты я для начала просто разместил их на сцене, записал их Иксы и вычислил расстояние между ними.

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

В качестве среднего значения я взял 280. Далее забил это значение в действия. Опять же, по задумке, каждый экземпляр карты должен будет выдвигаться слева с пропорциональной скоростью каждый в свою точку.

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

А, и я чуть не забыл указать условие остановки карт на своих местах.
Я добавил это в подусловие к циклу.

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Попробуем протестить это дело.

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

И...

Ничего не происходит.

Попытки опробовать эту механику с другими циклами (For и While) тоже не принесли ровно никаких результатов.

Далее мне стало интересно, а создаются ли вообще карты?

Я переставил координату Х создания карт на 0 и...

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

...таки да. Хотя бы одна карта при старте сцены создаётся.

Но вот сколько конкретно их создаётся мне не было понятно (они же друг на друге лежат).

Так что я добавил временную кнопку и перенёс процесс создания карт на событие активации кнопки. Таким образом я хотел проследить за тем, как вообще будут вести себя карты при первом открытии сцены. 

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Многократно просмотрев то, каким образом появляются карты, я пришёл к выводу, что все карты движутся с одинаковой скоростью независимо от переменной номера карты. Кроме того, им вообще пофигу на условие остановки движения. Они просто появляются, медленно ползут вправо и, я уверен, продолжают своё движение даже за краем экрана.

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

Fight Like a Wizard Alpha #2: проблема с исчезновением и напрасная работа. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

В общем, творилась полнейшая анархия.

Остановившись на несколько часов я пришёл к выводу, что когда я назначал порядковый номер, да и вообще, присваивал значения любым локальным переменным, я присваивал их всему объекту, т.е. каждому экземпляру. Но вот как обратиться к какому-нибудь отдельному экземпляру не влияя при этом на все остальные, я так и не понял. Господа знатоки и умельцы в Construct 2, не подскажете, такое вообще можно делать?

В общем, я решил отказаться от идеи собирать все карты в один объект с различными кадрами, и перейти к созданию на каждую карту своего отдельного объекта. Так что почти всё, что я описал в этом посте, было впустую. Завтра начнём с начала.

Спасибо всем читателям за внимание.

Показать полностью 14

Fight Like a Wizard Alpha #1: черновая графика, первое движение.

Всем привет.

Не так давно у меня появилась идея для игры, и спустя некоторое время вынашивания я принялся за её реализацию.

Для начала немного инфы: собирать игру я буду через конструктор Construct 2. О том, почему я выбрал этот софт и чем он мне нравится, я писал ранее в своём посте. Разработка обещает быть интересной, так что я решил поделиться этой историей создания с вами. К тому же, ответственность за написание дальнейших постов не даст мне забыть и забить на это дело.

Здесь я поделюсь тем, как я реализовывал те или иные задачи игровой механики, с какими проблемами сталкивался и как их решал. Сразу скажу, всю идею игры я не буду выкладывать, скорее даже ничего не буду объяснять, кроме непосредственно того, над чем буду работать. Должна же быть интрига, не так ли?

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

Итак, начнём.

Для начала, мне нужны были объекты, с которыми можно будет работать. Как вы поняли из названия, в основе игры лежит сражение волшебников. Уточню, это будет дуэльное сражение. Так что самым первым у меня появился волшебник.

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Рисовал и анимировал я его в моей родной Moho Pro.

На выходе получил несколько секвенций.

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Рисовал опять таки в Moho Pro.

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Ну и, естественно, нужен какой-никакой интерфейс.

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Далее в проекте Construct'а были созданы спрайтовые объекты и загружена в них графика. Также в объект с волшебником я подгрузил все кадры анимации.

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Поскольку у волшебника будут различные атаки, у него есть несколько различных движений. И мне нужно было придумать каким образом запускать ту или иную последовательность кадров.

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Как видно на скрине выше, при нажатии на изображение заклинания кадр волшебника переставляется на начало соответствующей анимации и запускается. Затем система ждёт 1,25 секунды чтобы проигралась анимация, поскольку длинна этой анимации 30 кадров, а идёт она на 24 FPS. Далее анимация стопится и перескакивает на основной кадр.

Но здесь я был не прав. Это слишком долгий и муторный процесс. Высчитывать, с какого кадра идёт нужная мне анимация, долго, как и вычислять длину паузы. В одном из гайдов по созданию платформера (ссылку в комменты могу дать) я заметил весьма полезную для таких случаев функцию, на которую я сразу и не обратил внимания. 

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Далее встал вопрос о движении, собственно, карт с заклинаниями, поскольку в мои планы не входило их статичное положение.

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Однако действие Set Position меня не устраивает, поскольку так расположение карты будет меняться моментально, а мне бы хотелось, что бы она двигалась по экрану.

Соответственно я озадачился выбором поведения для движения.

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

И для начала я решил поколдовать с движением по 8 направлениям.

Это поведение при включённом контроле позволяет управлять объектом с помощью стрелок клавиатуры.

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Для начала я попробовал дать карте простое движение: при нажатии на неё она должна передвинуться вправо. Для этого я дал команду симулировать нажатие стрелки вправо. А также добавил условие остановки движения - при достижении карты по горизонтали отметки 1743 она должна будет остановиться, в течении секунды помигать (отдельное поведение) и затем исчезнуть.

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Однако на деле всё получилось далеко не так, как я это планировал.

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

При нажатии на карты они чуть-чуть отодвигались вправо и замирали. Более того, когда они заходили за координату 1743 они попросту исчезали.

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

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Тогда я снова полистал список поведений движения и решил выбрать кастомное движение.

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Также я оставил поведение мигания и добавил затухание, для более эффектного исчезновения.

Почему мне понравился именно этот вариант? Ответ прост: кастомное поведение даёт как раз те варианты команд, что мне нужны.

Fight Like a Wizard Alpha #1: черновая графика, первое движение. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Здесь есть возможность дать карте движение как в любом определённом направлении, так и в любую определённую точку. Вот последним я и воспользовался чтобы не просто двигать карту вправо (ведь это лишь для теста было), а передвинуть её на центр экрана.

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

Спасибо за внимание.

Показать полностью 16

АДМ Пермь -> Днепр

Праздники заканчиваются, а подарки продолжаются!


В проекте АДМ принимаю участие впервые.
Я понятия не имею, что еще такого можно написать во вступительной части, так что давайте перейдём непосредственно к осмотру.

На днях получил с почты вот такую вот коробочку.

АДМ Пермь -> Днепр Тайный Санта, Отчет по обмену подарками, Праздники, Новый Год, Обмен подарками, Длиннопост

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

Придя домой я наконец вскрыл коробку.

АДМ Пермь -> Днепр Тайный Санта, Отчет по обмену подарками, Праздники, Новый Год, Обмен подарками, Длиннопост

"А где же книги?" было первое о чём я подумал, но затем улыбка расползалась всё шире и шире, когда я вынимал каждый последующий подарок!

Итак, у нас здесь имеется, как вы уже заметили, чашка! Из Перми.

АДМ Пермь -> Днепр Тайный Санта, Отчет по обмену подарками, Праздники, Новый Год, Обмен подарками, Длиннопост

Вот те самые две книги!

АДМ Пермь -> Днепр Тайный Санта, Отчет по обмену подарками, Праздники, Новый Год, Обмен подарками, Длиннопост

В описании я писал, что люблю разного рода приключения. Судя по описанию, первая относиться к научной фантастике. Спасибо моему АДМу большое! А то последнее, что я читал из подобного, был Рэй Брэдбери, и то, еще в школьные годы.
Когда я писал, что люблю вселенную Minecraft'а, я ожидал получить плакатики, чашки, значки, брелки... Ну на крайняк подушку с рисунком крипера. Но для меня было полнейшим сюрпризом получить КНИГУ! И еще раз спасибо, мой АДМ! То, что этот фанфик получил твёрдый переплёт, уже говорит о том, что он стоит прочтения, что это не будет обилие... впрочем, я отклоняюсь от темы.

Также пришли пара магнитиков, и они уже заняли своё место на холодильнике.

АДМ Пермь -> Днепр Тайный Санта, Отчет по обмену подарками, Праздники, Новый Год, Обмен подарками, Длиннопост

Ну и, конечно же, какой новый год без сладостей?

АДМ Пермь -> Днепр Тайный Санта, Отчет по обмену подарками, Праздники, Новый Год, Обмен подарками, Длиннопост

Спасибо-спасибо-спасибо! Получить бобы Берти Боттс для фаната ГП - это просто лучший подарок! Такой Милки, как эта, я раньше никогда не видел, очень вкусная оказалась. Конфеты тоже замечательные. Яблочная лента - вообще нечто!

И чай! Чай для Самого-самого! С чебрецом, между прочим.

АДМ Пермь -> Днепр Тайный Санта, Отчет по обмену подарками, Праздники, Новый Год, Обмен подарками, Длиннопост

Настоящие пермские конфеты. И не какие-нибудь там, а с любовью!
Вот тут ты, дружище АДМ, попал в точку, ведь я люблю конфеты хорошим шоколадом и орехами!

АДМ Пермь -> Днепр Тайный Санта, Отчет по обмену подарками, Праздники, Новый Год, Обмен подарками, Длиннопост

В целом, вот такой набор праздничного настроения и радости пришёл ко мне, когда все праздники закончились и новый повод для радости будет не скоро.

АДМ Пермь -> Днепр Тайный Санта, Отчет по обмену подарками, Праздники, Новый Год, Обмен подарками, Длиннопост

В послесловие скажу: участием в проекте доволен более чем. Хоть и пересылка в другие страны стоит недёшево, оно того стоит. Ведь согласитесь, получить посылку из другой страны куда интереснее, чем из соседнего города. И ты никогда не знаешь, что может быть внутри. По сути, ты ждёшь не просто картонную коробку со сладостями и подарками, а целую бомбу, заряженную сюрпризами, загадками и законсервированным новогодним настроением! И самое классное, что ты вот подобные эмоции можешь доставить совершенно случайному человеку, который никогда даже тебя не видел!

Мне проект понравился!

Буду ли еще принимать участие?
Однозначно!

Готов ли отправлять в другие страны?
Всенепременно!

Спасибо Ивану Александровичу, моему АДМ'у из Перми, за то, что не забыл и хорошо подготовил подарок.

И спасибо всем, за то, что прочитали до конца. Вот вам котик в ленту.

АДМ Пермь -> Днепр Тайный Санта, Отчет по обмену подарками, Праздники, Новый Год, Обмен подарками, Длиннопост
Показать полностью 10

Как я лишился игросоздательской девственности.

Всем привет.


Не так давно я познакомился с таким софтом, как Construct 2. Я не буду описывать прогу, её особенности и прочее, я хочу всего лишь рассказать немного о своих впечатлениях, и что из этого вышло. 

Как я лишился игросоздательской девственности. Gamedev, Construct 2, Конструктор игр, Длиннопост
Как я лишился игросоздательской девственности. Gamedev, Construct 2, Конструктор игр, Длиннопост

Картинка взята из клипа Жизнь прекрасна.

Немного предыстории (если не интересно, можно пропустить).

Ранее я как-то мечтал быть игроделом, даже пытался изучать Java и С++, но как-то не заладилось. Видимо дело было в том, что на курсах С++ мы тупо переписывали код с доски, нам один раз вяленько объясняли, за что отвечает тот или иной блок (не слово, и даже не строка) и дальше мы с умными еблетами смотрели в экраны и что-то писали то и дело забывая ";" ставить в конце строки. А Джаву учил по учебнику, где тоже далеко не всё было понятно.

И вот мне ко дню рождения подарили новенький смартфон известной фирмы на букву Х. Мне сразу вспомнилась та серия из ТБВ, когда ребята создавали приложение для чтения рукописных формул на доске. В общем, спустя некоторое время стали появляться идеи, а стало быть нужно было искать способ их реализации.

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

Почитав инфу о конструкторах я нашел Construct 2 в одном из постов пользователя @flatingo, спасибо ему за это! (не понимаю, почему его посты минусят??)

Теперь конкретно о софте.

Программа действительно простая и понятная, но, пожалуй, стоит отметить, что она будет проста тем, кто могёт в алгоритмы. Ибо поначалу я частенько путал действие над конкретным объектом с действиями в системе в целом, а также были трабблы с очерёдностью выполнения.

Что мне понравилось, так это то, что в описании программы действительно не соврали: работать в ней можно не имея вообще никаких навыков программирования. После прохождения одного из туториалов я создал свою игру не написав при этом ни строчки кода. Если тебе нужно создать объект - создаёшь спрайт, рисуешь его прям в софте (хотя можно и подгрузить готовое изображение), там же при желании создаёшь анимацию. Если хочешь, что бы объект вел себя не как простое изображение - добавляй любое поведение из широкого числа видов. Если нужен текст, отображающий порядковый номер кнопки - создай в этой кнопке переменную и оставь в тексте ссылку на неё. Конкретно в своей игре я пользовался ровно одним поведением - физика.

Для различных событий есть отдельный листик, при добавлении события или действия видно все объекты, с которыми может что-то произойти, а при выборе одного из них открывается окно со всеми возможными действиями над этим объектом - выбирай что душе угодно!

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

Небольшая неожиданность.

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

Подтверждение интуитивной понятности.

В туториале также не было ни слова про счет. Но в моей игре он должен был быть. Механику набора (хотя скорее потери) очков я понимал, это было просто. Но вот создавать отдельную переменную под каждый уровень мне было лень. Единственным простым и действенным способом я видел использование одномерного массива (табличка, 16 строк, 1 столбец). Создав его я попробовал заполнять ячейки по прохождению уровней. Это стало работать благодаря всего одной команде. Она в конце уровня просто присваивает соответствующей ячейке бОльшее  из двух значений: текущий счет, сохранённый в ней счет. Написать эту команду оказалось действительно не сложно.

Результат.

Софтом я доволен более чем. Тест уровней производится непосредственно в браузере. И будь геймдев кулинарией, я бы процитировал Гюсто из "Рататуя" - Создавать игры может каждый!

Скачать получившуюся игру для винды можно Тут.

Спасибо за внимание.

Показать полностью 1

Небольшая анимашка

Всем привет.

Если кто читал мой прошлый пост, значит вы знаете, что я аниматор. Нет, не тот, который с детьми вместо их родителей играется, Боже упаси. А тот, кто мультяшки анимирует.

Так сложилось, что в последнее время в моей работе создался большой перерыв, уже около месяца отдыхаю. И захотелось мне отдохнуть от отдыха, извините за тавтологию. Душа требует творчества, да и в конце то концов, аниматор я или кто? Уже месяц как ничего не творил.

На просторах девиантарта перерыв кучу говна я нашёл замечательный рисунок от зеленогривого художника(-цы). Мне он очень понравился по сравнению с тем, что я видел, так что в вопросе, что анимировать, выбор пал на него. Ну а результат... Результат ниже! Судите как пожелаете)
Первые три секунды показан исходник.

P.s. Если у вас есть на примете какие-нибудь рисунки - кидайте в комментарии.Что понравится - попробую оживить. Не стесняйтесь в ассортименте, это могут быть как милые рисуночки, так и довольно динамичные арты.

Спасибо за внимание.

Мой опыт работы по удалёнке

Всем привет. Я уже довольно давно читаю Пикабу, относительно недавно зарегистрировался, и думаю, что пора бы наконец и мне что-то написать, дабы не слыть информационным нахлебником. Да, это мой первый пост.
Вдохновился на написание после прочтения поста BennyPirozhkov'а. Спасибо за тот пост. Так что хочу поделится и своим опытом в удалёнке. Писать сухие факты не хочу, поэтому если не интересно, как я к этому пришёл - пропустите первые 7 абзацев.


Итак, начнём.

Когда мы с девушкой планировали съезжаться, само собой разумелось, что нужно будет работать на еду и съём квартиры. У неё тогда работа была, а я стал искать.

Спустя несколько дней нашлась одна несложная работа: оператор в отделе продаж на телефоне. 3 дня на обучение - и вот, ты уже 5 дней в неделю по 6 часов пытаешься впарить людям всякие штуковины, вроде пауербанков и депиляторов, а через 3 дня принимаешь от них заявку на возврат/обмен. Из плюсов - я тогда научился спокойно разговаривать по телефону с незнакомыми (у меня была проблема, похожая на заикание) и довольно дружный коллектив. Из минусов - нужно ехать туда около часу и вскоре пришедшее понимание того, что ты продаёшь даже не реплику, а говёшку в обертке точь-в-точь как у Xiaomi.

Работать на такой, пусть и официальной работе, как раз из-за последнего пункта мне стало просто невыносимо. У меня не густо получалось заработать, поскольку нам платили именно за дополнительные продажи, а у меня с ними плохо получалось. Но когда у меня в голове всякий раз при оформлении клиента стал кто-то громко орать "НЕ ПОКУПАЙ, ЭТО ДЕШЁВКА, ОТКАЖИСЬ, ОТКАЖИСЬ!!" зарплата вообще упала почти до нуля. Я не могу продавать заведомо плохой товар.

Повезло, как раз в то время мой друг преподавал в детской IT-школе робототехнику. Предложил и мне поискать там работу, а вернее, предложить ввести курс анимации. Здесь следует сделать небольшое отступление на несколько флешбэков.

Дело в том, что в прошлом я пытался делать всякие мультфильмы. Будь это глупая последовательность кадров, нарисованная в Пэинте в 7 лет, или бегающие и дерущиеся стикмены в Pivot'е в 12 лет, или попытка сделать мультсериал в 18 в профессиональной софтине.

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

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

Еще месяц - и нашлась работа в компании, примерно как описывал BennyPirozhkov. Тестовое задание я выполнил хорошо, мне за него даже заплатили! Собеседование по скайпу и... И там я проработал полтора года (ушёл, ибо после массовых запретов на ютубе проект закрыли).

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

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

Что меня удивило - это отношение начальства к сотрудникам. Настолько тёплой и дружественной атмосферы я вот не ожидал от слова совсем! Раз в несколько месяцев проводились скайп-собрания, где руководство рассказывало о нововведениях и слушало мнение подчинённых. Там же можно было рассказать, что нравится в организации рабочего процесса, а что нет. И каждому можно было предложить как это поправить. Если открывался какой-то новый проект - у аниматоров, иллюстраторов, сценаристов спрашивали, интересно ли им это? Хотят ли они перейти и получить новый рабочий опыт?

Кроме того, когда я только пришёл в компанию, многие аниматоры работали во Флеше. Я же со своего, так сказать, анимационного детства использую Anime Studio Pro (в последствии Moho Pro). Увидев результат моей работы начальство приняло решение перевести аниматоров на последнюю среду анимации. Так что наш лид-аниматор сам начал учить мою софтину и учил ей других. Для этого был создан чат, куда попадали ссылки на обучалки, и где каждый мог спросить, что ему не понятно. А если лид-аниматор находил какую-нибудь интересную особенность в функционале - он созывал всех на конференцию, шейрил экран, показывал и рассказывал. Благодаря такой организации я приобрёл довольно много навыков, смог подучить несколько смежных программ, а спустя год сам удивился тому, насколько я профессионально вырос!

То, как организована оплата труда - тоже меня порадовало. Во-первых, у нас была ставка от выработки, т.е. больше сделаешь - больше получишь. Но здесь и не приветствовалось наделать как-нибудь, но побольше, ибо эпизоды проверялись и зачастую возвращались на поправить. Во-вторых, у нас был бонус за хорошую выработку: сделал 5 минут анимации за неделю - получи бонус! В-третьих, как-то раз меня перестала устраивать нынешняя зарплата (расходы повысились), и я стал искать работу на стороне. Нашёл. Сообщил своим об уходе. Мне арт-директор лично позвонила на телефон и проговорила с пол-часа, спрашивала о том, как мне работа? Всё ли нравится? Почему решил уйти? А почему появилась потребность в большем доходе? И тому подобное. Одним словосочетанием, она интересовалась моей жизнью! Не думаю, что такая практика - распространённое явление в странах СНГ. В тот разговор согласились на удвоенный бонус. А спустя две недели вместо него повысили ставку на 40% (что для меня было даже лучше).

В-четвёртых, однажды у нас ввели премию за просмотры. А было это так: сдав очередной свой эпизод я о нём благополучно забыл и делал дальше. Через три недели нас созывают на всеобщее собрание, подключили все отделы и сообщили новость: тот самый эпизод набрал за три недели более 7 миллионов просмотров (а для детского мультфильма без диалогов это нифига ж себе!!), и теперь вводят новую премию: за каждый лимон просмотров тем, кто делал этот эпизод, добавляли немного премиальных. На 7 миллионах полагалось 52$ на сценариста, иллюстратора, аниматора (т.е. меня) и звуковика. Порадовало, что мои старания, пусть и косвенно, но изменили что-то в компании.

В-пятых, это больше касается уже не оплаты за труд, а благодарности. Раз в 4 месяца у нас выбиралось штук 20 самых лучших эпизодов и выставлялись на конкурс, где каждый сотрудник мог проголосовать за понравившейся мульт. Номинаций было несколько: на лучшую иллюстрацию, анимацию, сценарий, озвучку, и еще несколько. Кроме того, также одаривали самого продуктивного работника. Победители в данном конкурсе получали по почте памятную статуэтку (у меня таких две). Бесполезно, но приятно. Однако, если был кто-то, кто побеждал сразу по двум номинациям (некоторые аниматоры и свои сценарии писали, кто-то сам рисовал иллюстрации) - то его начальство отправляло на выходные в Европу, и можно было даже выбрать куда! Я тоже выиграл эту поездку, но в тот момент ехать не мог. Мне её перенесли на попозже. Поначалу я предлагал просто деньгами мне отправить подарок, но арт-директор объяснила, что вот таким образом деньги разойдутся на различные аспекты быта и забудутся, а вот эмоции и впечатления от поездки сохранятся навсегда. И именно эти эмоции они и хотели подарить! По-моему, это круто, ведь большинство в нашей стране, сколько бы не выдали премиальных, про поездку за границу подумают в одну из последних очередей.

А на день рождения мне даже прислали подарок! Баночка конфет с разными вкусами вроде гаррипоттеровских "Бэрти Ботс". Мелочь, конечно, но безмерно приятно.

В заключение скажу, что мне очень повезло начинать свою карьеру мультипликатора в такой компании, как эта. Я искренне рад, что товарищ BennyPirozhkov тоже нашёл подобную. Я был очень рад читать о том, что это не единичный случай, когда в компании поддерживается столь тёплая и добродушная атмосфера. И делюсь своей историей, что бы порадовать других.

А если среди тех, кто прочёл всё до конца, есть работники на удалёнке, я хочу пожелать вам каждому найти компанию хотя бы в половину такую же хорошую, как моя.

Показать полностью
Отличная работа, все прочитано!