Изометрическая глубина Java (не алмаз)

Итак, у меня был быстрый вопрос. В настоящее время я делаю небольшую игру на java, и я хотел поэкспериментировать с тем, чтобы скрыть игрока за фальшивыми 3D-объектами на экране (изометрический рисунок). К сожалению, я не могу опубликовать изображение (недостаточно репутации). По сути, это трехмерный блок размером 32 на 48, который создает иллюзию того, что он трехмерный, поскольку половина его имеет более светлый цвет, а другая половина - более темный. Игрок имеет тот же размер, что и блок, и может свободно перемещаться по карте этих «блоков». Если игрок движется за блоком, его нижняя часть скрывается за ним. Наоборот, когда он движется вперед, закрывая неигровой блок. Теперь я сделал пример программы в GameMaker Studio, чтобы проверить ее. Чтобы это работало в GM, я сделал сценарий для каждого спрайта, который состоял из одной строки кода:

depth = y * -1

Это приводит к тому, что нижняя часть игрока «прячется» за блоками, когда он движется за ними. Я немного изучил это на вики GM, и это в значительной степени меняет «глубину» экземпляров. Теперь мой вопрос: как мне сделать что-то подобное на Java?

P.S. Это не в ромбе. Он находится в прямом 2D-мире (смотрим на объекты спереди под углом 45°).

РЕДАКТИРОВАТЬ: Вот несколько фотографий версии GameMaker:

Игрок снаружи

Игрок внутри


person moltom26    schedule 16.06.2015    source источник


Ответы (2)


Прочтите о рисовании изометрических миров. Прочтите о Java и изометрической разработке.

person Verhagen    schedule 16.06.2015
comment
Не совсем то, что я искал... То есть алмазный изометрический дизайн. Я больше искал прямоугольный дизайн (см. мои изображения). - person moltom26; 16.06.2015
comment
Да я вижу. Изометрическое ключевое слово было небольшим промахом. - person Verhagen; 16.06.2015
comment
Вам нужно будет проверить в своем Java-коде, что место, где находится человек, имеет блок с южной стороны от него. Если это так, следует показывать только верхнюю часть, в противном случае следует показывать весь блок лиц. Или всегда рисуйте весь блок сверху вниз. Таким образом, нижний ряд блоков скроет нижние части блоков, нарисованных предыдущим рядом. - person Verhagen; 16.06.2015
comment
@Verhagen Или просто рисуйте блоки сверху вниз. - person Kayaman; 16.06.2015
comment
@Kayaman, но как это будет работать, когда игрок уходит за блоки? Игрок по-прежнему будет выше верхней части блока. Это решило бы только проблему с блоками на экране. - person moltom26; 16.06.2015
comment
@Verhagen Но как мне нарисовать только его часть, когда он идет за ним? Например, когда игрок находится на полпути позади него. - person moltom26; 16.06.2015
comment
Я думаю, что мне нужно нарисовать игрока как два отдельных изображения (верхнее и нижнее), и сначала нарисовать на карте все нижние части, а затем все верхние. Таким образом, когда java отображает их, верхние части перекрывают нижние. В результате скрытые днища. Осталось придумать, как рисовать игрока одновременно с миром... - person moltom26; 16.06.2015
comment
@moltom26 все должно быть частью карты, поэтому вам просто нужно написать то, что находится на карте. - person Verhagen; 16.06.2015
comment
@Verhagen, за исключением того, что мой плеер отделен от фона. - person moltom26; 16.06.2015
comment
@moltom26 Если вы сначала нарисуете своего игрока, а затем стену в квартале к югу от него, верхняя половина стены будет маскировать нижнюю половину игрока. Так что нет, вам не нужно рисовать половинки отдельно. Это, конечно, означает, что вам нужно рисовать игрока одновременно с картой, поэтому вы не можете сначала нарисовать карту, а затем игрока. - person Kayaman; 17.06.2015

Спасибо Kayaman за решение проблемы:

Если вы сначала нарисуете своего игрока, а затем стену в блоке к югу от него, верхняя половина стены будет маскировать нижнюю половину игрока. Так что нет, вам не нужно рисовать половинки отдельно. Это, конечно, означает, что вам нужно рисовать игрока одновременно с картой, поэтому вы не можете сначала нарисовать карту, а затем игрока.

Просто для будущего использования изображения слоев в java определяются порядком, в котором они добавляются. Это был точный ответ, который я искал. Код GM был способом GameMaker установить порядок, в котором изображения добавлялись на экран.

Спасибо всем за помощь!

person moltom26    schedule 17.06.2015