2013-10-09 6 views
5

Я пытаюсь написать игровой движок в js (canvas). Все идет нормально. Но у меня одна проблема, мой мир имеет форму бриллианта, и я рисую плитки сверху донизу.Изометрический чертеж двигателя

Проблема заключается в том, когда у меня есть плитка, что это больше, чем 1 плитка (так 2х2 в качестве примера), это будет происходить:

Example rendering

Дом определяется на плитке (2,1). Левая скала размещена на (1,0)

Плитка (1,0) отображается первым, а следующая плитка (2,1), потому что она находится в том же ряду и справа.

Как вы можете это решить?

+0

Невозможно сортировать свою графику по их позиции на экране (игнорируя плитку на мгновение, измеренную от нижней центральной точки графика) и рисуйте их в этом порядке. – Marty

+0

Ну, позиция y точно такая же для рока и дома, и даже когда y-позиция скалы ниже (так больше на вершине), она должна перекрывать дом. Также должно быть возможно иметь построитель карт, чтобы вы могли размещать свои дома везде, где хотите. было бы довольно сложно определить, какие спрайты следует отрисовать до предыдущего. –

+2

Было бы намного сложнее, если бы вы разбили свой дом на две части. Таким образом, раздел, который разветвляется, будет считаться его собственной графикой и отстанет. – Marty

ответ

3

Вы должны быть в состоянии избежать этой проблемы, разбивая графику на более мелкие куски - один кусок за плитку на сетке. Хороший способ подумать об этом выглядит так: если вы можете просматривать сетку непосредственно сверху, каждый спрайт не должен переполнять края ячейки, на которую они выделены.

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

enter image description here

В какой-то момент вам может понадобиться также микроуровне несколько спрайтов в одной камере , но это та же концепция в меньшем пространстве.

+0

Один кусок на плитку будет 4 плитки. Что также возможно: возьмите левую половину плитки (2,0) и возьмите ее на всю высоту изображения, чем кусок для (2,1) и правую половину (3,1). Или это 4 плитки подход лучше? –

+1

@SanderVisser Я бы пошел с одним на плитку, если бы вы были готовы. Я считаю, что это даст лучшие и самые последовательные результаты. – Marty

+0

Было бы трудно отрезать дымоход, плитка - это просто файл png и квадрат. разрезание его на 3 вертикальных куска будет проще, чем больше. или я что-то упускаю –

0

Я думаю, что лучшим решением здесь является разделить графику с использованием заранее определенной метрики (например, ширины плитки). Система на основе плитки широко используется для 2D-игры, включая изометрические игры.

Пример: http://www.spriters-resource.com/pc_computer/fallouttactics/

0

Мои решения (Также спасибо Марти Уоллес!)

можно разрезать спрайтов в 3-х штук, показанных на изображении ниже

Первая часть получает нарисовали на коорд (2, 0)

Вторая часть получает нарисовали на коорд (2, 1)

Третья часть получает нарисовали на кООРД (3, 1)

Таким образом, мы нарезать его вертикально на нижней плитки (то нарисовали плитки, как форма V) Это должно работать для каждого размера плитки, как 4x4

Мы можем забывали о плитке (3, 0)

Синие: Фактический PNG Красных: рубленые линии

Линии откусила, но об идее и мне нужно сон (что последний 2 3 конечно)

enter image description here

Это также дает нам простой расчет:

sizeX - 1 = The number of sides on the right of the middle section (the big one) 
sizeY - 1 = The number of sides on the left side of the middle section 

И каждый кусочек составляет половину ширины плитки, а средний срез - полная ширина плитки. Правые фрагменты содержат только самую правую часть плитки, а слева - самую левую сторону.

Мы можем легко использовать плитку, как 3x1 или 1x4 и т.д.

1

Для этого конкретного примера, есть более простое решение.

Сейчас дом занимает эти места: 2x0, 3x0, 2x1, 3x1 И вы рисуете дом из позиции 2х1

Если вместо этого привлек дом из положения 2x0 (и до сих пор занимают один и тот же оригинал 4 плитки) все плитки будут рисоваться в правильном порядке.

До тех пор пока вы рисуете плитки сверху (назад) донизу (спереди) в строках экрана, вы можете без проблем нарезать плитки размером 2x2, 3x3, 4x4 или любого квадратного размера. Просто нарисуйте эти большие плитки вдоль их среднего ряда. Я часто использую левый угол в качестве привязки сетки для этих больших плиток. Это имеет смысл в моей голове таким образом, потому что, как только вы нарисуете крайний левый (или правый) угол большой изометрической площади, вы отделите все, что уже было за ней, от того, что перед ним.

Прямоугольные негабаритные плитки (например, 2x1, 2x3, 2x4, 3x4, 4x5) обычно требуют более сложного алгоритма рисования, чем просто строки строк сверху вниз. Я предпочитаю нарезать их на квадратные плитки.

Обратите внимание, что средневековая плитка дома уже имеет оригинальные части, разделенные на вертикальные кусочки, если вы хотите пройти этот маршрут (мои оригиналы находятся на OpenGameArt).

Смежные вопросы