Цитата:
Сообщение от Wolsh
Я вижу что скругляются только внешние углы. А что с внутренними?
Простой пример: как будет выглядеть дырка
1 1 1
1 0 1
1 1 1
|
Внутренние углы не скругленные. Главное, чтобы вокруг дырки образовалась обводка.
На первый взгляд задача кажетя очень простой, но что-о ни одного решения в гугле найти не удалось.
Я делал следющим образом:проверял все восемь тайлов вокруг и выбирал нужный тайл, соответственно получилась огромная куча if`ов типа

Код AS3:
if(topLeft && top && topRight && right && left && bottomLeft && top && bottomTight)
{
return тайл без обводки каких либо обводок
} else if(!topLeft && top && topRight && right && left && bottomLeft && top && bottomTight)
{
return еще какой-то тайл
} else if(!topLeft && !top && topRight && right && left && bottomLeft && top && bottomTight)
{
return еще какой-то тайл
} else
{
throw new Error("такой случай не определен - допиши новый if")
}
Сначала я думал, что смогу написать if`ы для всех возможных случаев, но потом убедился, что их может быть очень и очень много. Поэтому и ищу какой-нибудь хитрый алгоритм для этого.
Цитата:
Сообщение от Akopalipsis
А почему Вы говорите о ста ифоф, если нужно проверять только четыре или пять.
Сначала я подумал, что Вы хотите рамку сделать, а причитался и мне кажется, что тут алгоритм поиска путей подойдет. Проверять нужно только значения окружающих ячеек, которых только четыре может быть.
|
Нужно проверять все 8 иначе гарантированно попадается ситуация, в которой тайл оказывается не там, где он должен быть.
Причем здесь алгоритм поиска путей? Я не ищу путь, от одной ячейки к другой, я на основе анализа окружающих ячеек пытаюсь выяснить какой тайл поставить на определенную позицию. То что это можно сделать проверяю значения окружающих ячеек - это очень и очень очевидно, только их может быть не только 4, а всегда 8. И из этих восьми какие-то могут быть пустые. Поэтому в случае с пустыми надо понять - отрисовывать прямоугольник со кругленными краями или простой без обводки или еще какой другой.