2011-12-21 21 views
5

Intento crear una grilla para un juego usando el SDK de Moai. Cada azulejo en la cuadrícula debe tener la capacidad de llenarse con un color.Rejilla Moai con colores de azulejos

Así que en realidad tengo dos preguntas:

  • Cuál es la mejor manera de construir una red usando Moai
  • ¿Cómo puedo llenar cada baldosa de forma individual con un color

The grid

Gracias

Respuesta

5

¿Cuál es la mejor manera de construir una red usando Moai

Moai tiene un objeto para crear cuadrículas: MOAIGrid. Usando la jerga del marco, se crea una grilla y se le da un mazo. Luego lo adjunta a un puntal y agrega el puntal a una capa. (Esa capa también necesita una ventana gráfica que se adjunta a una ventana.)

¿Cómo puedo llenar cada baldosa de forma individual con un color

Un Moai deck es una imagen o colección de imágenes. Si quería que sus mosaicos fueran de diferentes colores, entonces crearía un mazo con imágenes del cuadrado en esos colores.

Ejemplo

Este código va a crear una cuadrícula de 4x4 en una ventana:

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

Después de eso, si usted quiere cambiar el color de una celda específica, utilice el método setTile para elegir qué elemento en el mazo que usa la celda.

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

En v1.4p0 (no estoy seguro exactamente en qué versión fue cambiado) la línea 'grid: initGrid (4, 4, 64)' sería 'grid: initRectGrid (4, 4, 64, 64)' – devnate

2

Editado para toda c oda.

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` 

Debe retirar Rapanui, una API de alto nivel para los Moai (donde parafraseé este código de)

1

La construcción de una rejilla es realmente sólo dibujando un montón de cuadrados en forma de cuadrícula. No sé la API de Moai; pero espero que pueda simplemente drawSquare (x, y, ancho, altura, color)

por lo que tienen:

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

Quizás no estaba claro en mi pregunta. Estoy portando mi juego Corona a Moai, entonces la lógica está ahí, pero no puedo encontrar la función correcta para dibujar un cuadrado y llenarlo con un color. Además, no sé si debería crear cada tesela manualmente o si MOAIGrid sería una opción. –