Неправильное отражение спрайта?
| |
StarLLaythe | Дата: Понедельник, 17 Декабря 2018, 10:30 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Приветик, у меня возникла первая за игру проблемка, и очень не понятная. Вкратце, суть: У меня есть персонаж, персонаж, как и положено отражается влево и вправо, то есть image_xsclae = 1 или -1. Но вот только отражается он не ровно, я попробовал взять спрайт 9x30, не тот что был на персе, поставил центр на 4 пиксель (если считать первый нулевым то 4 - 5 или же середина), центр соответствует центру спрайта, рисунка и колижн модели(ну или маски), то есть всё вообще ровнее некуда.
//Все спрайты одинаковые сделанные с одно спрайта "стоя" (точнее он дублирован и каждый раз перерисован)
Как я понял, если идти например влево с image_xscale = 1 (глядя вправо), то я могу подойти "задом" вплотную к стене, как и положено. Но когда я подойду и развернусь, то я не разворачиваюсь не по центру, а немного криво и часть колижн маски оказывается дальше, внутри стены. Соответственно я не могу прыгать или, если падаю, глядя в сторону от стены и вплотную а потом поворачиваюсь - застряю.
Столкновение у меня проверяется на расстоянии скорости, у меня ещё есть ускорение и замедление (пока что крайне костыльно написанное), я проверял на устойчивой скорости, и убедился что сама скорость вроде как не влияет, и окончательно убедился когда проверил с другим спрайтом на месте, том самом 9x30, у которого колижн маска - всё изображение, в итоге она криво крутится вместе со спрайтом? В новом объекте с тестовым спрайтом вообще была написана только гравитация и перемещение и ничего более.
Сообщение отредактировал StarLLaythe - Понедельник, 17 Декабря 2018, 10:36 |
|
| |
Raven84 | Дата: Понедельник, 17 Декабря 2018, 13:21 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Похоже на то, что у тебя сама маска на разных спрайтах разная, возможно даже включена точная проверка. Надеюсь ширина спрайта покоя и ширина спрайта ходьбы одинаковые? В общем тебе нужно войти в настройку спрайта и включить маску столкновения на всю ширину и высоту спрайта просто. P.S. Ну это при учете конечно что ты с кодом там костылей не наделал ))
Super Knight Story (в разработке) Idolzzz - игра доступна в Steam и Play Market Oliver's Adventures in the Fairyland
|
|
| |
StarLLaythe | Дата: Понедельник, 17 Декабря 2018, 14:00 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Дело в том, что это происходит и с одним спрайтом, в покое причём. То есть я стою и кручусь в стороны, ну и спрайт дёргается, раз он равен маске, я как бы могу смотреть где она находится по нему, и она не много перемещается при смене x скейла, не важно что это за спрайт.
Спрайты оригинальные все одинаковые, маска в одних координатах у всех, центр тоже, и всё это соответствует рисунку, так как я скопировал спрайт покоя и перерисовал, настройки маски и центра сохранились.
|
|
| |
AlexanderBekker | Дата: Понедельник, 17 Декабря 2018, 14:24 | Сообщение # 4 |
BekkerDev Studio
Сейчас нет на сайте
| StarLLaythe, нарисуй прямоугольный спрайт и поставь его в качестве маски. Дело в том, что image_xscale отражает и маску, поэтому персонаж и застревает в стене. Тебе нужно создать свою переменную (xScale, например) и работать уже с ней. А в функции отрисовки спрайта, где нужно передавать image_xscale, передаёшь xScale.
Разработчик, композитор и издатель инди-игр в Steam. Редактор карт: BekkerDev Level Editor 4 Страница разработчика в Steam Паблик ВК: BekkerDev Studio
|
|
| |
StarLLaythe | Дата: Понедельник, 17 Декабря 2018, 15:19 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Ну ладно я если сделаю по маске персонажа отдельный спрайт и поставлю как маску в настройках, то я заменю ему маску в принципе в любом случае и она будет отражаться ровно, если центр в середине?
Но вот что касательно своего скейла, я не совсем понял зачем...Добавлено (17 Декабря 2018, 15:58) --------------------------------------------- Вообще не пойму, по сути я должен относительно центра и спрайт и маску отразить ровно, но нет, нашёл случайный способ решения:
Нужно проверить столкновение на расстоянии скорости +- 2 пикселя, но я думаю что костыли - это не оч хорошо, правда у меня некий дедлайн в среду так что оставлю пока вот так, но если решения найдутся то я костыль сменю))
|
|
| |
AlexanderBekker | Дата: Понедельник, 17 Декабря 2018, 19:20 | Сообщение # 6 |
BekkerDev Studio
Сейчас нет на сайте
| StarLLaythe, просто сделай так, как я написал, и проблема решится вмиг. image_xscale влияет не только на визуальное отражение спрайта, но отражает и саму маску. Тебе нужно только визуальное отражение, вот и создай свою переменную, которая будет хранить это значение, и используй её при отрисовке спрайта. А image_xscale не трогай.
Разработчик, композитор и издатель инди-игр в Steam. Редактор карт: BekkerDev Level Editor 4 Страница разработчика в Steam Паблик ВК: BekkerDev Studio
|
|
| |
StarLLaythe | Дата: Понедельник, 17 Декабря 2018, 21:53 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| Каким образом можно отражать только сам спрайт?)
Просто дело в том, что я как бы продвинулся в разработке довольно сильно, особенно относительно своих первых наработок, но я всё не затрагивал в этом процессе, и не знаю что привязать к такой переменной)) (это если честно, ну я такие штуки уже делал, но что привязывать в качестве данных отражения я не знаю, где их взять то?)
|
|
| |
ss87ss | Дата: Понедельник, 17 Декабря 2018, 22:43 | Сообщение # 8 |
частый гость
Сейчас нет на сайте
| StarLLaythe, записываем в событие рисование эту строчку и делаем со своим спайтом что душе угодно draw_sprite_ext(название_спрайта,порядковый_номер_спрайта,(координата_x),(координата_y),(размер_по_ширине),(размер_по_высоте),(градус_вращения),смешиваем_цвет(c_white),прозрачность(0-1)); //как стандартный пример draw_sprite_ext(ris_unit,0,x,y,1,1,0,c_white,1); //если надо развернуть то draw_sprite_ext(ris_unit,0,x,y,razvorot,1,0,c_white,1); //где razvorot=1(смотрит вправо) или -1(смотрит влево)
|
|
| |
StarLLaythe | Дата: Вторник, 18 Декабря 2018, 00:24 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| Шож, попробую. Надо будет поработать с draw_sprite вообще, но возможно переработка затянется, хотя вариант крайне годный.
Пока что не разобрался но анимации нет в таком случае.
При чём если я двинусь спрайт нереально ускоряет анимацию (по приколу сунул в номер image_index), вообще я спрайты для изменения персонажа ещё не отрисовывал, но сейчас масштаб, видимо, требует.
Есть мысль, как это поправить но пока пробовать, наверное, не буду.
Сообщение отредактировал StarLLaythe - Вторник, 18 Декабря 2018, 09:43 |
|
| |
|