2011-12-21 11 views
5

Sto provando a creare una griglia per un gioco utilizzando l'SDK Moai. Ogni tessera nella griglia dovrebbe avere la capacità di essere riempita con un colore.Griglia Moai con colori di piastrella

Quindi, in realtà ho due domande:

  • Qual è il modo migliore per costruire una griglia utilizzando Moai
  • Come posso riempire ogni piastrella individualmente con un colore

The grid

Grazie

risposta

5

Qual è il modo migliore per costruire una griglia utilizzando Moai

Moai ha un oggetto per la creazione di griglie: MOAIGrid. Usando il gergo del framework, crei una griglia e assegnagli un mazzo. Quindi lo si attacca a un sostegno e aggiungi il sostegno a un livello. (Questo strato ha bisogno anche di una finestra che è attaccato a una finestra.)

Come posso riempire ogni piastrella individualmente con un colore

Un Moai deck è un'immagine o una raccolta di immagini. Se vuoi che le tue tessere siano di colori diversi, devi creare un mazzo con le immagini del quadrato in quei colori.

Esempio

Questo codice crea una griglia 4x4 in una finestra:

-- 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) 

Dopo di che, se si desidera cambiare il colore di una cella specifica, utilizzare il metodo setTile di scegliere quale elemento nel mazzo che utilizza la cella.

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

Nella v1.4p0 (non sono sicuro di quale versione sia stata modificata) la riga 'grid: initGrid (4, 4, 64)' sarebbe 'grid: initRectGrid (4, 4, 64, 64)' – devnate

2

Modificato per l'intero c ode.

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` 

Si dovrebbe verificare Rapanui, un'API di alto livello per Moai (dove ho parafrasato questo codice da)

1

Costruire una griglia è in realtà solo disegnando un mucchio di quadrati in una formazione griglia. Non conosco l'api di Moai; ma mi aspetto che si può solo drawSquare (x, y, larghezza, altezza, colore)

in modo da avere:

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

Forse non ero chiaro sulla mia domanda. Sto trasferendo il mio gioco Corona a Moai, quindi la logica è lì, ma non riesco a trovare la funzione corretta per disegnare un quadrato e riempirlo con un colore. Inoltre, non so se dovrei creare ogni tessera manualmente o se MOAIGrid sarebbe un'opzione. –