Данная статья из раздела «практика», а посему будем решать конкретные задачи. В нашем случае - заставим катиться квадратный спрайт.
Для проекта нам потребуется спрайт с размерами 128х128 пикселей.
Поехали !
Вполне логичная идея - сделать смену точки вращения (pivot) в зависимости от текущего угла поворота.
Если представить что мы поворачиваем спрайт, то очевидно первая точка вокруг которой он провернется будет вот эта :
Для того чтобы понять в какие координаты надо установить offset , мы можем либо перейти в режим редактирования оси трансформаций, либо вбить цифры руками прямо в меню свойств спрайта.
В нашем случае у первой точки это будут координаты -128, -128
Соответственно вторая точка будет -128, 0, третья 0,0, четвертая 0, -128.
Устанавливать эти координаты надо при достижении определенного угла.
Так, если спрайт повернулся больше чем на 90 градусов, то мы устанавливаем новую точку вращения. Но есть одно НО..
Переносим логику в код. И проверяем.
Заметно что спрайт вращается и двигается. Но на стыке поворотов происходит какой то рывок.
А суть тут вот в чем : как только мы меняем координату оси весь спрайт сразу же перемещается в координату мышки.
По сути мы должны компенсировать , в нашем случае 128 пикселей дистанции, чтобы спрайт ложился в новые координаты без сдвига.
Допишем это в условии:
Необращаем внимание на получающийся спагетти код. Проверяем.
В общем и целом всё сработало, но появилось две проблемы:
1) Спрайт заметно обгоняет курсор.
2) После 360 градусов спрайт улетает куда то не понятно куда.
Первая проблема решается довольно просто
А вот со второй надо поработать )
Для начала уберем повторяющийся код который занимается сдвигом на 128 пикселей.
Понятно, что он должен применяться всякий раз, когда спрайт делает оборот на 90 градусов. Поэтому в качестве решения я заведу переменную chk, которая будет считать обороты, собственно количество этих оборотов я и буду умножать на 128.
Дальше очевидно, что после 360 градусов наш код теряется , потому что спрайт начинается вращаться дальше…до 400, 500 градусов.
И понятно, что расписывать каждые +90 градусов в «if - else» это глупость.
Поэтому заводим еще одну переменную c_angle, которая будет округляться после 360.
Её же и проставляем в условиях:
Результат :
А результат уже хорош !
Осталось только забороть вот эти «флики» на стыках поворотов.
Решается это просто : Нам надо в условиях добавить «больше или равно» вместо «больше»
В результате :
На этом пожалуй и всё. Надеюсь вам был полезен данный материал.
Ставь лайк, и удачи !
P.S.
Ну и чтобы совсем убрать спагетти, мы можем прибегнуть к массиву.
Складываем в него все наши позиции для оффсета. Заводим еще одну переменную которая будет считать обороты от 1 до 4.
И подключаем это дело в выборку.
Ставьте лайк, подписывайтесь на канал, вступайте в группу в ВК, и не забывайте что у нас есть дискорд сервер.
Удачи в изучении годо !