Как сделать кнопки (Corona SDK) из графики произвольной формы? - PullRequest
0 голосов
/ 12 января 2012

У меня есть профиль горы в моей игре, и мне нужна Corona, чтобы можно было различить нажатие пользователем (сенсорное событие) на гору и нажатие на долину между пиками (альфа-канал, используемый для создания формы) , Кажется, что Corona рассматривает экранный объект в этом смысле как прямоугольник, поэтому моя потребность не может быть удовлетворена каким-либо способом, который я нашел.

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

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 21 июня 2012

Не могли бы вы создать горные вершины с углом наклона 90 градусов. Затем, если вы разделите горные вершины вверх и поверните их на 45 градусов, они получат квадратную форму. После экспорта каждого из них вы импортируете их в Corona, а затем поворачиваете на 45 градусов. Я не проверял это, но я воображаю, что это может сработать:)

0 голосов
/ 13 января 2012

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

Проверьте местоположение касания в слушателе событий, проверив параметры event.x и event.y.Вы можете сделать это эффективным, создав таблицу, в которой есть значения для крайнего левого и крайнего правого значения x для каждой полосы, скажем, 10 пикселей от верха до низа вашего объекта.Например, рассмотрим эту гору:

enter image description here

Используйте координату y нижней части каждого светло-синего прямоугольника в качестве индекса в таблице и загрузите левые значения x и справа y вэту запись, например:

hitTable[120] = {245,260}
hitTable[130] = {230,275}

и т. д. *

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

Вы даже можете построить таблицу и назначить ее в качестве свойства самого изображения, например:

hitTable = {}
hitTable[120] = {245,260}
hitTable[130] = {230,275}
... and so on, then ...
myMountain.hitTable = hitTable

Как только вы это сделаете, выможет получить доступ к таблице в приемнике событий касания как event.target.hitTable.

...