Можно ли сделать ограничивающий прямоугольник? - PullRequest
1 голос
/ 22 марта 2011

(во-первых, чтобы быть уверенным, шестиугольник - это многоугольник с 6 точками, подумайте о сотах или Цивилизация 5)

Я делаю игру, в которой используется гексагональная сетка, но я не могу правильно понять ограничивающую рамку, Javas API говорит мне только о прямоугольной "BB" (getBounds и getBounds2D).

Я нарисовал фигуры и выровнял их так, как они должны быть, но я хочу, чтобы ячейки были точно смежны друг с другом, либо чтобы края переходили друг в друга, либо чтобы они были рядом друг с другом, но никогда даже на 1 пиксель между ними. Это невозможно сделать прямо сейчас, когда ВВ прямоугольный.

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

Спасибо <3 </p>

1 Ответ

3 голосов
/ 22 марта 2011

Ограничивающий прямоугольник по определению - прямоугольник (он же прямоугольник). Поэтому нет, невозможно создать прямоугольник, ограничивающий прямоугольник.

Можно создать не прямоугольное окно, область отсечения, ... но прямоугольник, ограничивающий такую ​​вещь, всегда будет "прямоугольником". Это связано с тем, что многие подпрограммы выполняют пелиминарные проверки (перекрытия и т. Д.) На ограничительной рамке, а затем выполняют точные проверки фактических фигур. Мелкозернистые проверки являются дорогостоящими в вычислительном отношении, поэтому быстрая проверка (перекрываются ли эти прямоугольники?) Может служить фильтром, для которого кандидаты заслуживают дополнительных тактов.

Тем не менее, то, что вы собираетесь делать с ограничительной рамкой, - это совсем другое:

  1. Если вы собираетесь использовать координаты ограничивающего прямоугольника, чтобы определить, нужно ли что-то рисовать на экране, нарисуйте его, если хотя бы часть ограничивающего прямоугольника видна. Затем используйте подпрограммы отсечения (которые могут обрезать любую форму), чтобы обеспечить отображение только тех битов, которые вы хотите видеть.

  2. Если вы собираетесь использовать координаты ограничительной рамки, чтобы назначить прослушиватель щелчков, то сделайте это. Реализуйте в слушателе шестиугольника дополнительный код, чтобы определить, был ли щелчок внутри шестнадцатеричного или только внутри ограничивающей рамки. Если это вне гекса, тогда отбросьте.

По сути, не зная немного больше о том, что вы пытаетесь достичь, невозможно предложить разумное решение; однако многие подпрограммы выполняют проверки ограничивающего прямоугольника сначала как быстрое и грязное средство уменьшения количества вызовов, а затем проводят более подробные проверки, чтобы выяснить, было ли решение ограничивающего прямоугольника ложноположительным (например, столкновение объектов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...