Anuncios Google

duda sobre draw.line() [LUADev]

Hola Muchachos nuevamente yo esta vez con una duda sobre como hacer que un draw.line() empieze a dibujarse desde el centro de un cuadrado.

 

supongo que empiezo asi:

--creo la imagen , los colores ya estarian instanciados

cuadrado=image.create(32,32)

cuadrado:clear(rojo)

--tabla del cuadrado

Cuadrado={x,y,img}

Cuadrado.x=20

Cuadrado.y=40

Cuadrado.img=cuadrado

--funcion para manejar los controles del cuadrado

function controles()

if controls.right() then Cuadrado.x=Cuadrado.x+1

end

if controls.left() then Cuadrado.x=Cuadrado.x-1

end

--funcion para dibujar mientras presionamos x

function dibujaAlPresionar()

if controls.cross() then

draw.line(Cuadrado.x,Cuadrado.y,Cuadrado.x+1,Cuadrado.y+1)

end

--instanciamos el bucle principal

While true do

controls.read()

screen.clear()

image.blit(Cuadrado.img,Cuadrado.x,Cuadrado.y)

controles()

dibujaAlPresionar()

screen.waitvblankstart()

screen.flip

end

 

Aun haciendo esto no hace lo que quiero. Esto seria que el drawline se dibuje desde el centro de la figura  y que no se borre la linea cuando suelto x.

Alguien podra ayudarme con este codigo?

 


http://pixelperfectgames.blogspot.com mi blog de programador amateur, mis proyectos, mis avances

http://thegameisntover.blogspot.com mi blog de videojuegos en general, opiniones y visiones del mundo del videojuego


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de incpdo

Muchisimas Gracias

Muchas gracias a Todos , voy a probar lo que dicen y luego les cuento si lo pude resolver al final , es cierto lo del codigo redundante  o medio inutil creo que empezare a revisar mas eso ya que lo hago con frecuencia.


http://pixelperfectgames.blogspot.com mi blog de programador amateur, mis proyectos, mis avances

http://thegameisntover.blogspot.com mi blog de videojuegos en general, opiniones y visiones del mundo del videojuego

Dibujar la línea desde el

Dibujar la línea desde el centro de la figura es sencillo, hacen falta sólo un poco de matemáticas:

--El truco es tomar las coordenadas del cuadrado, y sumarles la mitad del tamaño del mismo
draw.line(cuadrado.x+36/2,cuadrado.y+36/2,destinoX,destinoY,color)
 
--O más universal...
draw.line(cuadrado.x+cuadrado.img:width()/2,cuadrado.y+cuadrado.img:height()/2,destinoX,destinoY,color)
--Y así ya no te preocupas si cambias las dimensiones de la imagen, igual funcionará

Deberías considerar también eliminar code redundante, por ejemplo...

--esto...
cuadrado=image.create(32,32)
 
cuadrado:clear(rojo)
 
--tabla del cuadrado
 
Cuadrado={x,y,img}
 
Cuadrado.x=20
 
Cuadrado.y=40
 
Cuadrado.img=cuadrado
 
--Lo puedes cambiar por..
Cuadrado={
x=20,
y=40,
img=image.create(32,32,rojo)
}

Y por último, por favor usa la herramienta Insertar Código (1er botón del editor de coments, desde la derecha) cuando vayas a pegar code, así resulta más fácil leerlo ;)

Imagen de Mills

Pues

Soy muy novato pero creo que quieres que la línea se dibuje al pulsar x y luego se mantenga despues de soltar el botón, no?

Pues tienes que crear otra variable por ejemplo

Dibujar = 0
 
function dibujarlinea()
 
 if controls.press("cross") and Dibujar == 0 then Dibujar = 1 end
 if controls.press("cross") and Dibujar == 1 then Dibujar = 0 end
 
 if Dibujar == 1 then 
  draw.line(Cuadrado.x,Cuadrado.y,Cuadrado.x+1,Cuadrado.y+1)
 end
 
end

Así cuando pulses x cambiará la variable "Dibujar" al valor 1 (activado) y mientras valga 1 se dibujará la línea, y si vuelves a pulsar x, el valor cambiara a 0 y dejará de dibujarse. 

No se para que lo quieres pero puedes poner que se desactive pulsando otro botón, eso ya lo que quieras.

 

Saludos


Pobre PSP

Imagen de Dioni0396

entonces al dibujar

la segunda linea se borrara la primera.

Segun el code que has puesto.

Imagen de Mills

claro

por si quiere borrarla y dibujarla otra vez, no se jeje

Imagen de NEKERAFA

Mmm...

A lo que Dioni se refiere es que al pulsar (X) ejecutará el primer código dando dibujar == 1, y después ejecutará el segundo código por lo que quedará igual...

 

Prueba esto:

Dibujar = false
 
function dibujarlinea()
 
 if controls.press("cross") then Dibujar = not Dibujar end-- Si se pulsa (X), Dibujar se establecerá como lo contrario:
 
 if Dibujar then -- Si Dibujar es verdadero, se dibuja la linea
  draw.line(Cuadrado.x,Cuadrado.y,Cuadrado.x+1,Cuadrado.y+1)
 end
 
end


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).

Imagen de Mills

A cierto perdon

Es que soy muy novato, yo lo habria puesto así.. ya tengo la duda de lo que pasaría, pero si lo pones de esta otra manera, también vale, aunque sea estilo novato jeje:

Dibujar = 0
 
function dibujarlinea()
 
 if controls.press("cross") and Dibujar == 0 then Dibujar = 1 end
 if controls.press("circle") and Dibujar == 1 then Dibujar = 0 end
 
 if Dibujar == 1 then 
  draw.line(Cuadrado.x,Cuadrado.y,Cuadrado.x+1,Cuadrado.y+1)
 end
 
end


Pobre PSP

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.