2015-09-19 3 views
1

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

Так что, я думаю, мой единственный вариант - создать объекты с использованием полигонов. Вот код с сайта corona sdk:

local halfW = display.contentWidth * 0.5 
local halfH = display.contentHeight * 0.5 

local vertices = { 0,-110, 27,-35, 105,-35, 43,16, 65,90, 0,45, -65,90, -43,15, -105,-35, -27,-35, } 

local o = display.newPolygon(halfW, halfH, vertices) 
o.fill = { type="image", filename="mountains.png" } 
o.strokeWidth = 10 
o:setStrokeColor(1, 0, 0) 

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

ответ

1

Попробуйте создать массив вершин:

local R = 45 
local N = 6 
local vertices = {} 
local i = 0 
for t = 0, 2*math.pi, 2*math.pi/N do 
    i=i+1; vertices[i]= R*math.cos(t) 
    i=i+1; vertices[i]= R*math.sin(t) 
end 

И это нарисовать шестиугольник:

local halfW = display.contentWidth * 0.5 
local halfH = display.contentHeight * 0.5 

local hexagon = display.newPolygon(halfW, halfH, vertices) 
hexagon.fill = { type="image", filename="mountains.png" } 
hexagon.strokeWidth = 10 
hexagon:setStrokeColor(1, 0, 0) 

Я выбрал R=45 произвести многоугольник того же размера вашей звезды.

+0

Просто отметив: чтобы использовать это с библиотекой физики, цикл for должен будет идти по часовой стрелке. 'для t = 0, -2 * math.pi, -2 * math.pi/N do' – ryanpattison

0

Вы всегда можете использовать graphics.newMask(), чтобы применить маску к каждому шестнадцатому изображению, что сделало бы внешнюю область нечувствительной.

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