Pull to refresh

Comments 6

Срасибо за статью. Можно ли в monogame сделать из изображения прямого отрезка дороги отрезок дуги дороги с указанным в качестве параметра радиусом?

Спасибо за отзыв!
Напрямую, насколько я знаю, нет. Можно просто самому написать алгоритм, который бы из кусков дороги составлял картинку произвольной формы, можно попробовать сделать нечто похожее через шейдер:
https://habr.com/ru/post/128349/

Другие решения мне, к сожалению, неизвестны.

Пилил я 2D пиксельную игру на моногейме, в целом поначалу устраивало, для старта вполне годная штука. Но как только появились не примитивные требования, моногейм стал проблемой. Например потребовалось у спрайта две текстуры вместо одной, и такой возможности нет. Для не квадратных фигур пришлось писать свой код и вызывать какие-то внутренние методы, потому что моногейм рисует только прямоугольники. Не хватило также умных сортировок спрайтов, а не только мгновенной или по текстуре. И не понравилась постоянная возня со утилитами для ресурсов и какие-то промежуточные форматы для всего. А сейчас они уже месяц не могут выкатить минорную версию, где обновлена версия сишарпа, без новых фич, которая якобы готова. И OpenGL уже устарел, а Vulkan-а в моногейме нет. В общем плюнул я на это всё, и делаю на вулкане теперь. Сложно и времени на всё много уходит, но доступно всё API, а не урезанная абстракция.

Ну, да, Monogame простой, это и плюс, и минус. И практически для всего надо свой код писать - все-таки это не полноценный движок. Это вопрос к тому, что человеку нужно. Для меня ближайшим аналогом является pygame.
Что касается нескольких текстур - я просто делаю список текстур на объекте, а в Draw к нему обращаюсь. Или вы что-то другое имели в виду?
PS. Для Vulkan надо еще больше самому писать, разве нет? Это же как "писать на OpenGL". Я делаю для себя, мне интересен процесс, но если хочется полноценно создавать игры, лучше уж готовый движок взять.

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

На Vulkan писать сложнее, чем на OpenGL. И C# не совсем предназначен для таких целей, там приходится со всякими указателями работать и выделять память без сборщика мусора. Но в итоге в моём случае всё это стоит усилий, потому что удаётся сделать что хочешь. Готовый движок не подходит, потому что есть особенности физики, генерация мира как в террарии, но многослойная, и движки обычно с 2D плохо работают, или игрушечные весьма.

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

Sign up to leave a comment.

Articles