2011-12-21 2 views
5

Я пытаюсь создать сетку для игры, используя SDK Moai. Каждая плитка в сетке должна обладать способностью наполняться цветом.Сетка Moai с цветами плитки

Так на самом деле у меня есть два вопроса:

  • Что является лучшим способом для создания сетки с помощью Моаи
  • Как я могу заполнить каждую плитку по отдельности с цветом

The grid

Thanks

ответ

5

Что является лучшим способом для создания сетки с помощью Моаи

У Moai есть объект для создания сетки: MOAIGrid. Используя фреймворк , вы создаете сетку и даете ей колоду. Затем вы прикрепляете его к опоре, а добавьте опору на слой. (Этот слой также нуждается в видовом экране, который прикреплен к окну.)

Как я могу заполнить каждую плитку по отдельности с цветом

Moai deck изображение или набор изображений. Если вы хотите, чтобы ваши плитки были разных цветов, тогда вы создадите колоду с изображениями квадрата в этих цветах.

Пример

Этот код будет создавать 4x4 сетки в окне:

-- Open the window and create a viewport 
MOAISim.openWindow("Example", 512, 512) 
viewport = MOAIViewport.new() 
viewport:setSize(512, 512) 
viewport:setScale(512, 512) 

-- Create a layer 
layer = MOAILayer2D.new() 
layer:setViewport(viewport) 
MOAISim.pushRenderPass(layer) 

-- Create a 4x4 grid of 64x64px squares 
grid = MOAIGrid.new() 
grid:initGrid(4, 4, 64) 
grid:setRow(1, 1, 1, 1, 1) 
grid:setRow(2, 1, 1, 1, 1) 
grid:setRow(3, 1, 1, 1, 1) 
grid:setRow(4, 1, 1, 1, 1) 

-- Load the image file 
deck = MOAITileDeck2D.new() 
deck:setTexture("squares.png") 
deck:setSize(2, 2) 

-- Make a prop with that grid and image set 
prop = MOAIProp2D.new() 
prop:setDeck(deck) 
prop:setGrid(grid) 
prop:setLoc(-256, -256) 

-- Add it to the layer so it will be rendered 
layer:insertProp(prop) 

После этого, если вы хотите изменить цвет конкретной ячейки, используйте метод setTile, чтобы выбрать в колоде, которую использует ячейка.

-- Change the color of cell 1,1 to the second item in the deck 
grid:setTile(1, 1, 2) 
+0

В v1.4p0 (точно не указано, в какой версии оно было изменено) строка 'grid: initGrid (4, 4, 64)' будет 'grid: initRectGrid (4, 4, 64, 64)' – devnate

2

Отредактировано для полного c ода.

MOAISim.openWindow ("test", 320, 480) 

viewport = MOAIViewport.new() 
viewport:setSize (320, 480) 
viewport:setScale (320, -480) 
viewport:setOffset(-1, 1) 

layer = MOAILayer2D.new() 
layer:setViewport (viewport) 
MOAISim.pushRenderPass (layer) 


function createRect(x1,y1,x2,y2, R,G,B) 
    local function onDraw() 
     MOAIGfxDevice.setPenColor(R,G,B) 
     MOAIDraw.fillRect(x1,y1,x1+x2,y1+y2) --This is the rect drawing line. 
    end 

    local gfxQuad = MOAIScriptDeck.new() 
    gfxQuad:setRect(x1,y1,x2,y2) 
    gfxQuad:setDrawCallback(onDraw) 

    local prop = MOAIProp2D.new() 
    prop:setDeck(gfxQuad) 
    layer:insertProp (prop) 
    return prop 
end 

mapmaxx = 10 
mapmaxy = 10 
map={} --array to store map 
for x = 1, mapmaxx do 
    map[x] ={} 
    for y = 1, mapmaxy do 
     map[x][y] = createRect(x*20, y*20, 10, 10, x,y,x/y) 
    end 
end` 

Вы должны проверить Rapanui, высокий уровень API для моаи (где я перефразировал этот код с)

1

Построение сетки действительно просто рисунок кучу квадратов в формировании сетки. Я не знаю api Moai; но я ожидаю, что вы можете просто drawSquare (х, у, ширина, высота, цвет)

поэтому у вас есть:

local width = 800 
local height = 600 
local color = { red=1, blue=1, green=1 } 
for x=1 , 100 do 
    for y=1, 100 do 
     screen:drawSquare((x-1)*width,(y-1)*height,width,height,color) 
    end 
end 
+0

Возможно, я не был ясно из моего вопроса. Я портирую свою игру «Корона» в Моай, поэтому логика есть, но я не могу найти правильную функцию (ы), чтобы нарисовать квадрат и заполнить его цветом. Кроме того, я не знаю, должен ли я создавать каждую плиту вручную или MOAIGrid будет вариантом. –

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