Pull to refresh
476.7
Karma
1
Rating

Довожу здравый смысл до абсурда

  • Followers 1.4K
  • Following 3

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

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

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

Так. А теперь следующий вопрос: если спрайт не зумится, то есть, размер прямоугольника отрисовки равен размеру прямоугольника спрайта, координаты плавающие, и включен анизо фильтр, как это всё выглядит?

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

Спасибо на добром слове. Спрайты рисовал сам, специально, чтобы не зависеть ни от кого. Лицензия общая на всё :)

Вообще я за то, чтобы отдавать подобное просто в public domain, так что даже MIT мне не очень подходит.

Если что, у меня где-то векторные черновики спрайтов остались ещё.

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

подождите, а если ширина целая, а координата нецелая? Тоже прыжками движется?

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

ух, а что это вертикальные волны на 1:29??

https://youtu.be/JJCuxeHgyrQ?t=89

У вас растительность на заднем плане - это один спрайт или тоже составлен из кусочков, как и земля? А табличка с черепом?

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

Как раз floor не надо, надо в сторону ближайшего целого, т.е. floor(val + 0.5). Первое видео не видно, оно private.

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

Да, я и хотел проверить постоянность расстояния между тайлами. Но ничего криминального не вижу в выводе. Что вас смущает? 76.79999 и 76.80005? Это совершенно нормально для float, это 76.8 с машинной точностью.

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

Вопрос: а почему субпиксельная точность, почему не целые SDL_Rect? Давайте попробуем передать округлённые значения координат?
_draw_rect.x = (float)((int)(point.X - (_draw_rect.w * transformTo.Achor.X) + 0.5));

Ну или как там в сишарпе округляют до ближайшего целого. Чисто чтобы исключить проблему с округлением ниже по трубам, уже в самом SDL.

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

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

Это абсолютно точно не вопросы алиасинга, и линейное сглаживание только заметёт пыль под коврик. У вас ресайзинг спрайтов есть где-то? Я не умею в сишарп :(

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

В целом график относительно приличный, но вопрос со 120мс из предыдущего скриншота остался. Но как бы то ни было, fps чуть-чуть да плавает. Используете ли вы эти настоящие значения для обновления координаты спрайта, или она вычисляется при помощи константы какой-нибудь?

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

Поправка: @besworland прислал первый пулл реквест, большое ему спасибо, now we are talking!

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

А, ну да, я считать разучился. 60 десятитысячных, если это десятитысячные. Но тогда вопрос @EduardGuschin: если смотреть на список, который вы привели под графиком (давайте возьмём конец):

53:30:99

53:30:99 <- перерисовка меньше чем за одну сотую секунды

53:31:00 <- перерисовка меньше чем за одну сотую секунды

53:31:00 <- перерисовка меньше чем за одну сотую секунды

51:31:12 <- сто двадцать миллисекунд при цели в шесть??

А можете теперь построить ещё второй график (прямо по тому же csv, что у вас есть), где будет в миллисекундах время между двумя отрисовками спрайта? По оси абсцисс номер отрисовки спрайта, по оси ординат время между отрисовками.

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

Подождите, 59 - это минуты, 21 - секунды, а ещё четыре цифры потом? Десятитысячные секунды? То есть, отрисовка раз в 60 миллисекунд?

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

Красиво, спасибо. А время как интерпретируется? Почему есть дубликаты меток времени?

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

А возьмите один "дрожащий" спрайт, и для каждой перерисовки выведите в файл метку времени с точностью до миллисекунды и его текущую координату, которую вы отправляете в SDL. А потом в экселе просто постройте график по этому .csv файлу. Насколько он гладкий? Просто ли там ступеньки? Если да, то насколько большие? А он точно монотонный?

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

Я имел в виду, насколько ровно у вас идут перерисовки экрана по времени.

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

А как от этого поможет добавление к параметру const?

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

В случае простого POD аргумента constне даёт ничего, кроме чувства удовлетворения :)

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

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

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

А что может быть готовое помимо LÖVE? Мне нужен ц/цпп, тут у меня вариантов нет (см. жёсткая программа, аккредитованная министерством).

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

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

Подскажите, пожалуйста, на какой вопрос я не ответил? У меня сложилось впечатление, что отвечал я сразу же и по пунктам :)

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

Про первый курс у меня прямо в первом предложении статьи написано ;)

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

Information

Rating
Does not participate
Registered
Activity