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

Найдены возможные дубликаты

+1

Используй для перемещения карт liteTween (поведение для твининга), он именно для этих целей и сделан.
http://www.scirra.com/forum/behavior-easetween_topic53288.html

0

Перемещать объект по экрану с помощью скрипта поиска пути, это конечно легендарно.

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

Очень. Удобный. Инструмент. Заточенный на создание простеньких платформеров. А если нужно что-то другое, то сразу БОЛЬ!

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

Просто никому не интересно смотреть, как кто-то другой грызет кактус. Тем более, безрезультатно, так как твои решения, крайне сомнительны. А тем более, кактус, который никто больше не грызет. Просто то, чем ты занимаешь, не популярно. Разработка на конструкт, интересна 2,5 калекам, вот и все.

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

раскрыть ветку 2
0

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

раскрыть ветку 1
+2
у меня были приложения с 1000000 установок

1кк с приложения на конструкте? Мне очень интересно посмотреть на это. Кинь ссылочку.

Все там есть, можно и угол движения задать и координаты и на сколько пикселей двигать, можно все)))

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