TrueBlueDragon

TrueBlueDragon

пикабушник
243 рейтинг 111 комментариев 16 постов 0 в "горячем"
3

Западная клиентоориентированность

Прочитав данный пост расскажу и свою историю о западных сервисах.

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

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

Но вот спустя месяцев 5 у меня внезапно с карты списывают 15$. Казалось бы, мелочь, но в тот момент я переживал не самые легкие времена, и даже эта сумма была для меня существенной (особенно если учесть, что я живу в Украине). Так что я решил разобраться, куда и каким образом отправились чуть ли не последние мои деньги.

Оказалось, что на сервисе очень заждались от меня оплаты и решили самостоятельно списать нужную сумму. Естественно, я написал в поддержку, какого, собственно, хрена они творят? Зная, как нехорошо относятся к клиентам в странах СНГ, и как трудно бывает добиться возврат денег, я был готов часами строчить ответные письма, я с нетерпением ждал ответа, что бы излить всю злость и таки добиться возврата средств!

Но ответ поддержки загнал меня в ступор.

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

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

6

Про личное мнение

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

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

Ну что ж, начнём.

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

Однако кто не совершал ошибок - тот не человек.

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

Начало.

Я рос довольно послушным мальчиком, практически никогда не перечил маме, желал никогда её не расстраивать, делал то, что она говорила. Лет с 8-ми у меня появились домашние обязанности, и чем старше я становился, тем больше и сложнее они были. Мы жили в частном доме, поэтому помимо уборки внутри дома необходимо было ещё ухаживать за огородом и участком. Это вполне нормально, я не считаю это чем-то плохим.

Но, как мне кажется, в течении следующих лет 10-ти мама просто привыкла, что я буду делать то, что она скажет. Я, по сути, её принимал как главу семейства, поскольку отец практически не принимал никакого участия во всём этом. У него, как говорится, был свой мир, вполне для него комфортный. Если маме что-то приходило в голову, то я, зачастую, соглашался с ней, поскольку цели благие, объяснения логичны, доводы правильные, мама в авторитете. Но со временем мой кругозор расширялся, и годам к 12-ти у меня понемногу стало появляться личное мнение, которое, естественно, могло идти вразрез с мамиными взглядами. По крайней мере, именно в этом возрасте впервые на моей памяти возникли мысли, что мама меня, наверное, не любит и мне будет лучше уйти из дому.

И вот с этого момента, по моему мнению, начались проблемы.

Когда происходит что-то, что человеку не сильно нравится, что делает человек? Он об этом говорит, громко и ясно "Мне это не нравится!". Поначалу я поступал так же. Однако практически всегда я соглашался с маминым мнением. Мне не нравилось водное поло, но, тем не менее, я отходил на него три года. Поскольку плавание благотворно воздействует на позвоночник, способствует развитию легких и развивает в комплексе многие мышцы тела. А кроме того, посещение спортивной группы по водному поло стоит вдвое дешевле, чем просто плавание.
Логично?
Логично!
Но это объяснение в мамином исполнении могло занимать минимум час, с отхождением на смежные темы, воспоминанием из прошлого, отсылкам на авторитетные источники и прочим, прочим, прочим...
Такие же методы использовались и для художественной школы (рисовать как профи мне не сильно нравилось, и закончил я её с горем пополам круглым троечником), и для курсов дизайна интерьеров (я учился на архитектуре, и это курс нужен для расширения проф. навыков), и для изучения французского (стажировка во Франции!! АААА!!), и для множества других вещей!.. При чём если я высказывал своё недовольство какими-нибудь моментами, пытался выразить своё мнение в данном аспекте - меня нередко прерывали не дослушав и рассказывали подробно в каких моментах я не прав. Описать это можно одной фразой: на каждое моё слово у мамы находилось три.
Я быстро понял, что чем больше я буду говорить - тем больше уйдёт времени на мамину попытку убедить меня в правильности именно её взглядов. А мне ой как не хотелось по нескольку часов тратить на бесполезные беседы, где, по итогу, я окажусь неправ. Поэтому годам к 15-ти я исключил из данного процесса вещи, которые способствую продолжительной беседе, т.е. перестал с ней вообще о чём-либо спорить, во всём соглашаясь. Это позволило сократить потраченное время до одного часа, оставляя тот же результат.
Быстро?
Определённо!
Мама убедила меня в правоте?
Убедила! Я ж согласился!
И я считал, что так будет лучше всем. Ведь в то время, пока другие дети устраивали истерики, кричали на своих родителей, сбегали на несколько дней, запирались в комнате и тому подобное, я по прежнему оставался послушным сыном, радовал маму, и был золотым ребёнком.
Но оказалось, что так было лучше всем, кроме меня.

Развитие.

Со временем я становился старше, у меня и возможностей становилось побольше, чисто физически. Так что "благодаря" отцу во мне видели единственного помощника, последняя надежда семейства на крепкие мужские руки. И, естественно, вся тяжёлая работа падала на мои плечи: починить табуретки, собрать в окна форточки (окна деревянные, времён прабабушки), вставить ещё один слой стекла, по новой построить забор (благо, с каркасом крёстный помог), утеплить дом, монтировать подвесной потолок и прочее прочее прочее...

При этом я не мог отказаться от этой работы. Причины простые - из экономии. А нравилось мне это или нет особо не учитывалось, ибо все мои аргументы разбивались о железобетонные факты "мы же для себя делаем!", "зачем кому-то платить денюжку, если можно сделать самому, а деньгу сэкономить и  купить одежду/обувку/вкусняшку". И спорить с этим было невозможно, ибо да, я хотел, что бы у нас было хорошо и красиво, и да, опровергнуть логику экономии не так просто.

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

Так что мои даже самые крупные протесты и возможные компромиссные решения (чтобы и мне было приятно, и всем остальным было хорошо) гасились внутри, так и не увидев света белого. Я понимал, что в любом случае мама будет права, а лишнее словоизлияние лишь продлит разговор не меняя результата. Со временем пропало даже желание искать какие-нибудь компромиссные варианты, а умение создавать и выражать собственное мнение гасло за неимением практики.

Результат.

К моему совершеннолетию я жил по нескольким принципам. Один из них звучит как "Лучший спор тот, которого не было", а второй предполагал в случае расхождения мнений с собеседником вступать в спор ТОЛЬКО при наличии абсолютно титановых аргументов с большим основанием в виде стопки авторитетных источников. Так что зачастую, что бы мне не предлагали, я практически со всем соглашался. И это касалось не только общения в семье, но и вообще везде. Кроме того, я стал совершенно не уверенным в себе, ведь не имея никаких общеизвестных обоснований в своих речах, я не мог быть уверен, что моё мнение правильное. И зачем тогда мне его вообще говорить?

Моё будущее было предопределено мамой. Я не мог посвятить свою жизнь тому, что нравилось. Я одевался так, как нравилось маме. Стригся так, как она считала приемлемым. Своё отношение к миру, к религии, к работе, к домашнему быту я никому не высказывал. Свою личную жизнь я скрывал от родных, поскольку не хотел ещё и там оказаться в чём-то неправым. Свои планы на будущее я сохранял внутри, не показывая этого никому. Как и мировоззрение в целом. Повлиять как-то на атмосферу внутри семьи не представлялось возможным. Ведь к этому времени я привык, что "Все, что вы скажете, может и будет использовано против вас." © Любой адвокат.

Кроме того в результате всего этого я совершенно разучился говорить неприятные вещи в лицо собеседнику, а маме особенно. Т.е. если я говорил с кем-то из друзей, я подавал неприятное для него мнение максимально мягко, а то и вообще намёками, так что собеседник редко понимал, что я хочу сказать. Маме же я вообще ничего не мог сказать. Я мог по пути в универ или домой проводить у себя в мыслях громкие словесные баталии с криками и рукоприкладством, я переживал в своём воображении тонны гнева и ярости, я фактически жил этими чувствами, пока был наедине с собой! Но стоило мне оказаться в такой ситуации в реале, перед лицом мамы, у меня в горле застревал большой ком невысказанных слов, который порой причинял мне даже физическую боль в горле. Хотите верьте, хотите нет, но лично у меня было ощущение, словно невидимый крючок цеплялся за мою гортань.
Единственный раз, когда я смог донести до мамы свои мысли, был случай, когда (уж не помню причины) мама поинтересовалась моим мнением. Поскольку сказать я не мог, все ответы я писал ручкой на вырванном из тетради листике. Мама вроде как поняла меня, даже попечалилась вместе со мной, я даже посмел внутренне порадоваться, что теперь всё будет по другому! Но я проснулся на следующий день, а вчерашнего как не бывало.
Основной причиной, почему я так ничего и не говорил (за исключением случаев, описанных ниже) было то, что я боялся последствий. Несколько раз мама в порыве непонимания и негодования спрашивала о радикальных методах, вроде "Так может пойти к психологу??!!", и у меня в голове радостный крик соглашался "Да, мама!! ДА! Я ХОЧУ ПОЙТИ К ПСИХОЛОГУ!!! ЕЙ Я СМОГУ ВСЁ-ВСЁ-ВСЁ РАССКАЗАТЬ, А ОНА ОБЪЯСНИТ ЭТО ТЕБЕ!!", но я не мог этого сказать. Я не знал, как мои слова воспримет мама, я не знал, как она отреагирует на это, я боялся, что её психическое здоровье пошатнётся. Я люблю свою маму, и хочу, что бы у неё всё было хорошо. Но я тогда не знал, что дальше будет только хуже.

Таким образом я стал тихим анархистом: если мне что-то не нравилось - я покорно соглашался, но делал по-своему. Если вообще делал. Благо, мама не лезла в мой телефон/комп, и я мог сам выбирать что слушать/смотреть/читать/играть.

Исключения.

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

Случай первый. Место - магазин обуви. Ситуация - мама увидела замечательные мокасины с квадратным носком и швом, торчащим вверх. Маме они очень понравились, и ей во что бы то ни стало захотелось мне их купить. Как по мне, это были мокасины стреднестатистического хача, разве что коричневые, а не красные. Не хочу никого оскорблять данным заявлением, но именно так я себя в них чувствовал. Т.е. для полного комплекта мне оставалось только завести монобровь. Я явно чувствовал себя не собой. Я ясно, открыто, как говорится, русским по белому сказал: "Я. Это. Носить. Не. Буду!". Несколько раз. На что каждый раз получал ответ "Нет! Будешь! Они же хорошие!". Спустя 10 минут моих препирательств мама перестала меня слушать и понесла обувку на кассу. На следующий день я был вынужден пойти в них в универ. Я чувствовал себя хачом. Стоит ли говорить, что моё настроение на весь день было испорченным?
Благо, вскоре мои молитвы были услышаны, на третий день мокасины расклеились и мама отнесла их на возврат.

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

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

Лечение.

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

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

Ах да, почему мама именно названивала?
Просто в начале моего четвёртого курса мы с женой решили съехаться (спустя год отношений). В некоторых случаях её методы моего лечения принимали самые жёсткие и стрессовые обороты. И это один из них: мне фактически был дан ультиматум - или я нахожу способ жить вместе, или она уезжает вообще из города. При чём это условие было дано не как ультиматум, а как следствия двух различных решений. Т.е. мою свободу она никоим образом не ограничивала. Для меня выбора не было - я не хотел расставаться, за прошедший год я стал её любить даже больше, чем себя, и это совершенно другая история.

То, что было дальше, я бы не сделал в нормальных условиях. Я совершил "прыжок веры" - несмотря на то, что у меня не было практически никаких сбережений, из поступлений была лишь стипендия, мы сняли квартиру (Спасибо её отцу, он подкинул немного средств на первое время).


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

Так вот, возвращаясь к теме поста. В атмосфере, когда моё личное мнение никак не притеснялось, а наоборот поощрялось, я почувствовал себя намного лучше и свободнее. Я понял, что я могу делать всё, что захочу! Моя душа летала, а я наконец-то понял, что такое счастье. Более того, высказывание личного мнения даже провоцировалась! Несколько раз жена мне истерику закатила, лишь бы я сказал хоть что-то своё, а не соглашался по привычке. И знаете? Мне это понравилось!!

Ответная реакция.

Помните, я там писал, что дальше будет хуже? (концовка блока "Результат")

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

По сути, глядя со стороны на весь этот путь, можно сказать, что с 12-ти лет я не до конца осознанно, но со всей старательностью и упорством сооружал между собой и мамой большую такую стену, которая закрывала меня такого, какой я есть, и показывала такого, каким меня хотела видеть мама. Вплоть до 20-ти с половиной лет я скрывал от неё всё, что противоречило её мировоззрению, дабы не нарываться на крики, ругань и скандалы. И вот с появлением в моей жизни моей жены я перестал строить эту стену, я показал истинного себя, который уже совсем не такой, каким был в 12-ть, и каким до этого выглядел в глазах мамы. Ей казалось, словно меня подменили, одурманили, приворожили. Для неё, для сестры и для тёти я внезапно стал отъявленным мерзавцем, который ради девушки бросил маму с сестрой одних, в частном доме, которому, на минуточку, скоро 70 лет стукнет, как построили самую первую комнату.

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

В завершение.

Говорят, что родители - это единственное, что у нас всегда будет. Что бы с нами не случилось, в какие жизненные ситуации мы не попадём - всегда есть мама, которая нас примет, приласкает и успокоит. По крайней мере именно так мне вчера твердила моя тётя, та самая, которая несколько раз фигурировала ранее. Но я в это не верю. Не всегда такое бывает. И истории, которые меня натолкнули на написание этого поста (ссылки в самом начале) тому доказательство.

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

Мораль. (ИМХО)
Для всех родителей и тех, кто собирается ими стать. Да и вообще для всех, кто контактирует с другими людьми.

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

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

Благодарности
.

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

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

Зачем я это делаю??

Доброе утро, пикабу.
Окей, сейчас половина девятого утра, а я хожу взад-вперёд по квартире в тапках с приклеенными к ним картонками (на фото ниже).

Внимание, вопрос: Зачем Я Это Делаю???

Зачем я это делаю?? Работа, Анимация, Гифка

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

На самом деле всё просто: я работал.

Да, именно работал.

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

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

Зачем я это делаю?? Работа, Анимация, Гифка

Зачем я это написал? Да просто, захотелось поделиться. Ибо работы у всех разные, и некоторые из них бывают довольно забавными и необычными)

Морали нет, всем спасибо!

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

Что это за фильм?

Пикабу, добрый день.
Я хотел бы попросить вашей помощи.

Более пяти лет назад я как-то с семьёй смотрел по ящику один фильм. Мне он тогда очень понравился, но, к сожалению, я не могу вспомнить ни его названия, и имён актёров. А мне очень хотелось бы его пересмотреть. Гугл не помог, выдавал всё что угодно, но только не то, что нужно.

Я по памяти написал в гугл-доках краткий сюжет, посмотрите, может кто-нибудь знает что это за фильм и сможет написать мне его название?
Жанр - попаданцы, фантастика (на фентези не сильно смахивает), возможно приключения.
Год производства, судя по качеству, не ранее 2000 и точно не позже 2015, скорее всего 2008-2012. Очень маловероятно, что это американский фильм (хотя кто его знает...).

Подскажите, пожалуйста, что это за фильм?

По возможности, продвиньте в топ, пожалуйста.

Пост без рейтинга.

3

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода.

Доброе утро, Пикабу! Доброе утро, Лига разработчиков видеоигр!

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

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

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

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

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

И при проверке данное условие и порядок действий вполне себе работает.

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост
Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Поэтому я добавил кнопку сброса карты.

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Ей, так же, как и картам, добавил локальную переменную позиции.

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост
Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Теперь мне не осталось ничего другого как настроить очерёдность хода.

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

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Также я вставил ещё один одномерный массив, отображающий последовательность карт в колоде противника. А также скопировал события и действия для перетасовки карт, заменив объекты.

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

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

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Далее следуют действия выбора карт компом и вызывается функция.

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Я ещё при тесте забыл учесть нажатие на кнопку сброса. Так что когда я сбрасывал карту ход компу не передавался. Копируем действия!

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

А также каждому источнику свой индикатор!

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Механизм восполнения энергии крайне прост: в начале хода из каждого источника капает одна энергия. Т.е. если есть пара источников воды, то в начале каждого хода будет капать 2 энергии воды.

Fight Like a Wizard Alpha #6: эффекты заклинаний и очерёдность хода. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Ещё раз спасибо каждому, кто дочитал, спасибо тем 5-ти людям, которые на меня подписаны, и увидимся в следующем посте!

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний.

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

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

Продолжил я свою работу с того, что попробовал ввести плагин LiteTween для перемещения карт, как мне посоветовал господин @LIMOR. Спасибо тебе огромное за совет! Плагин работает отлично!
Протестировав его на отдельной сцене, я занялся переносом в основную сцену. Но тут я заметил, что у меня большинство событий связанных с картами, очень похожи друг на друга, и отличие состоит только в их положении.
Так что я решил сразу оптимизировать код заменой шести разных карт на одну, но в шести экземплярах и с новым поведением.

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Затем я попробовал сразу в настройках поведения вставить формулу для нахождения цели пути.

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Так что теперь координаты цели (Target) движения каждой карты присваиваются отдельной строкой действия.

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Кстати, когда я включал движение карты, в качестве опции старта следует указывать Start from the beginning, ибо когда я выбрал Resume at current progress с мыслью, что карта как бы продолжит свой путь, она сразу телепортировалась в конец пути.

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

На этом этапе движения карт меня очень даже удовлетворяло, так что прошлые объекты карт я удалил.

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Далее я занялся эффектами карт заклинаний, ведь именно для это они и нужны, верно?

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

При тесте этой сцены у меня в загрузки сохранялся следующий файл.

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Далее я загрузил этот файл в проект в раздел файлов.
Подгрузкой файлов в Construct 2 занимается объект AJAX, так что для начала я добавил его и при старте сцены дал ему команду на загрузку файла со свойствами.
И отдельным событием на завершение загрузки этого файла добавил действие на заполнение массива свойств карт заклинаний.

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Более того, в ходе попыток это исправить я нашёл ещё баг: одна карта у меня часто повторялась после перетасовки.

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Причину я нашёл немного позже, случайно вспомнив, что в массиве свойств карт я оставил себе пустой столбец. Дело в том, что массив нумерует свои строки, столбцы и выдвижные ящички (в глубину по Z, как секретер с картотекой в какой-нибудь поликлинике) начиная с нуля. А для собственного удобства я пописывал значения первой карты в столбец 1, второй - столбец 2, и т.д. пропустив столбец 0.
Так что при старте сцены задаём ширину массива последовательности на 1 меньше, чем ширина массива свойств карт.

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

Далее!
Заклинания не могут выполнятся за просто так. Так что я ввёл волшебникам 4 новые локальные переменные на энергию каждой стихии и ввёл на каждую переменную свой индикатор энергии аналогично индикатору здоровья (скрин забыл сделать).

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Fight Like a Wizard Alpha #5: небольшая оптимизация и эффекты заклинаний. Разработка, Gamedev, Construct 2, Fight Like a Wizard, Длиннопост

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

Спасибо, что прочитали до конца, и до следующего поста.

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

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%.

Показать полностью 17
-6

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!"? Днём я сообразил, что ответ в вопросе - двойное условие события!
Три частных случая таких множественных условий вы найдёте в ветке комментариев.

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

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

Скидки на товары и услуги для геймеров (и не только) в честь E3

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

Игровая периферия от SteelSeries

Скидки на товары и услуги для геймеров (и не только) в честь E3 Длиннопост

Гарнитуры, мыши и коврики для них, клавиатуры, контроллеры – за этим можно идти к бренду SteelSeries, который поддерживает киберспортивные турниры. Вводите промокод SS10 и покупайте разные игровые устройства со скидкой 10% – без ограничений.


Ввести промокод (только перед этим зарегистрируйтесь)

Доставка еды от «Кухни на районе»

Скидки на товары и услуги для геймеров (и не только) в честь E3 Длиннопост

«Кухня на районе» идеально подходит, чтобы не отвлекаться от игры или стрима. Вы просто заказываете в приложении и за 25 минут получаете свою еду. Без минимальной суммы заказа и комиссии за доставку. Всем новым клиентам – скидка 500 рублей по пикабушному промокоду PIKABUE3.


Заказать еду

Автобусы на Daedu.ru

Скидки на товары и услуги для геймеров (и не только) в честь E3 Длиннопост

До Лос-Анджелеса, где проходит E3, на автобусе, конечно, не доехать, зато вот по стране и ближнему зарубежью прокатиться можно. Сайт Daedu.ru — это простой и удобный поиск самых дешевых билетов на автобусы. Вы просто задаете направление, а сервис ищет в интернете лучшее предложение.


Найти билет

Игровое кресло ThunderX3 EC3

Скидки на товары и услуги для геймеров (и не только) в честь E3 Длиннопост

Удобное кресло – важно всегда: и для работы, и для стриминга. Кресло ThunderX3 EC3 может похвастаться двумя подушками в комплекте (под поясницу и шею), механизмом «топ ган» и технологией AIR Tech – дышащей поверхностью, с которой летом не будет жарко. Главный плюс – раскладывающая спинка аж на 180 градусов. Когда надоест сидеть, можно прилечь.


Не забудьте перед заказом ввести промокод PIKABU20, который дает 20% скидку.


Купить кресло

Игры месяца в июне от PlayStation

Скидки на товары и услуги для геймеров (и не только) в честь E3 Длиннопост

Эксклюзивное предложение для подписчиков PS Plus в этом месяце включает две бесплатные игры для PlayStation 4:


Sonic Mania

Выход этой части был приурочен к 25-летнему юбилею серии игр о Сонике. Разработчики сохранили лучшие черты игрового процесса первых игр (с SEGA!), добавив новые возможности.


Borderlands: The Handsome Collection

Это сборник из игр Borderlands 2 и Borderlands: Pre-Sequel. Если вы никогда не играли в этот комедийный экшен, сейчас, в преддверие выхода третьей части, самое время наверстать. А тем, кто уже знаком с серией, стоит обратить внимание на новое бесплатное сюжетное дополнение «Командир Лилит и битва за Убежище», которое послужит мостиком к грядущей Borderlands 3.


Посмотреть игры месяца в PS Plus

Первая поездка на Uber Russia

Скидки на товары и услуги для геймеров (и не только) в честь E3 Длиннопост

Если еще не пользовались Uber Russia, тогда качайте приложение в App Store или Google Play. В разделе «Промокод» введите PIKABU, при заказе машины выберите оплату картой и наслаждаетесь скидкой 40% (максимальный размер скидки – 150 рублей). Акция действует до 14 июля 2019-го.

Товары для геймеров на goods.ru

Скидки на товары и услуги для геймеров (и не только) в честь E3 Длиннопост

Используйте промокод PikabuE3, чтобы получить выгоду 1000 рублей при покупке от 4000 рублей на первый заказ. Он работает с 14 июня по 30 июня 2019-го.


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


Перейти в геймерский раздел

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