Суббота, 05 Октября 2024, 04:22

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Неправильное отражение спрайта?
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
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг