2012-01-12 2 views
0

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

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

Любые идеи?

ответ

0

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

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

enter image description here

Используйте у координаты нижней части каждого светло-голубого прямоугольника в качестве индекса в таблицу, и загрузить левые х и правый 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.

+0

Спасибо за предложение JeffK. Однако я надеялся избежать такого решения, поскольку для создания таблиц было бы ручным трудом. Цель состоит в том, чтобы где-то рядом с 40 горными хребтами, такими как выше, с существенным размером в моем приложении. Я боюсь, что это может быть еще одна из тех функций, которые нужны для Ansca. Но я уверен, что они слышали это раньше. – Amoxus

0

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

+1

Это может сработать. Однако мне также нужны плоские участки (равнины/гребни), поэтому проблема остается. – Amoxus