Patrocinadores

DSFlash.es

WeaponLib

AplicacionesLUA Playersrces

v3.0

Una nueva utilidad de programación se nos une a nuestra larga lista. Esta vez se trata de WeaponLib, una librería creada por xerpi, coder de nuestra comunidad, cuya función es realizar múltiples disparos hacia multiples direcciones con la imagen que queráis. Sin duda, esta fantástica librería será muy util para muchos coders que andan liados con este tema.

Autor: xerpi (Coder de la Comunidad).

Modo de uso:

Lo primero de todo tenemos que hacer un dofile a la libreria.

dofile("weaponlib.lua")

Luego cargamos la imagen de la bala ( DEBE DE ESTAR EN HORIZONTAL):

bala = image.load("bala.png")

Luego de eso creamos el "arma":

arma = (imagen_de_la_bala,tiempo)

El primer parámetro es la imagen de la bala previamente cargada/creada, y el segundo el tiempo en milisegundos entre disparo y disparo .

Ahora inicializamos el "arma":

weapon.action(tabla,accion)

En acción va "start" o "stop".

El siguiente paso será disparar:

weapon.shoot(arma,x,y,velocidad,ángulo)

  • arma: es el arma previamente creada
  • x: coordenada x de donde va a salir la bala
  • y: coordenada y de donde va a salir la bala
  • velocidad: la velocidad que irá la bala (recomendable entre 2 y 10)
  •  ángulo: el ángulo con que irá la bala ( 0 a la derecha, 90 abajo, -90 o 270 arriba y 180 izquierda)

Por último será blitear las balas:

weapon.blit(arma)  

Si quieremos comprobar una colisión tan solo debemos hacer esto:

weapon.collision(tabla,x,y,w,h,boolean)

"x","y","w" y "h" són las coordenadas y el ancho y alto del "sitio" donde queremos colisionar. En boolean va true si quieres que al colisionar la bala desaparezca o false o un espacio vacio si no.


Este es un script de ejemplo creado por xerpi para orientaros mejor en la utilización de WeaponLib:

--Dofile a la libreria
	dofile("weaponlib.lua")
--Cargamos la imagen de la bala (podemos hacer un image.create) NOTA: LA IMAGEN DEBE DE ESTAR EN HORIZONTAL
	bala =  image.load("bala.png") --image.create(20,5,color.new(255,0,0))
--Esa función devuelve un color sin alpha aleatorio
	function random_color()
		return color.new(math.random(0,255),math.random(0,255),math.random(0,255))
	end
--Array de los enemigos
	object = {}	 
--Creamos 10 enemigos
	for i = 1, 10 do
		table.insert(object,{x=math.random(20,460), y=math.random(20,252),w=math.random(15,90),h=math.random(15,90),color=random_color()})
	end
--Variables del "personaje"
	x=240
	y=136
	ang =0 
---CREAMOS UNA NUEVA "ARMA"
	disparo =  weapon.create(bala,100)
--LA INICIAMOS JUSTO ANTES DEL BUCLE
	weapon.action(disparo,"start")
 
while true do
--Limpiamos buffer de color blanco
	screen.clear(color.new(255,255,255))
--Leemos controles
	controls.read()
--Movemos el personaje con el joystick
	if math.abs(controls.analogx())>50 then x=x+controls.analogx()/50 end
	if math.abs(controls.analogy())>50 then y=y+controls.analogy()/50 end
--Dibuja un cuadrado verde donde está nuestro "personaje" y el cañón
	draw.fillrect(x-5,y-5,10,10,color.new(0,255,0))	
	draw.line(x,y,x+math.cos(math.rad(ang))*40,y+math.sin(math.rad(ang))*40,color.new(0,0,255))
--DISPARA CON LA ARMA PREVIAMENTE CREADA
	if controls.cross() then weapon.shoot(disparo,x,y,7,ang) end
--Rotamos el "cañón" del personaje
	if controls.r() then ang = ang+2 end
	if controls.l() then ang = ang-2 end
--Dibuja los enemigos y cambia su color si hay colision con las balas
	for i =1, 10 do	
		--Dibuja enemigos
			draw.fillrect(object[i].x,object[i].y,object[i].w,object[i].h,object[i].color)
		--COMPRUEBA LA COLISIÓN
			if weapon.collision(disparo,object[i].x,object[i].y,object[i].w,object[i].h,true) then
				object[i].color = random_color()	
			end
	end
--BLITEAMOS LAS BALAS	
	weapon.blit(disparo)
---------------------------------------------------------------------
screen.print(5,5,"JoyStick: Move - R/L: Change angle - X: Shoot",color.new(255,0,0))
screen.print(5,25,"WeaponLib sample by xerpi",color.new(0,255,0))
screen.print(5,45,"Bullets in the screen: "..#disparo.bullets,color.new(255,0,255))
screen.print(430,5,"@"..screen.fps(),color.new(0,0,255))
 
if controls.select() then make_an_error() end
screen.flip()
end

Está hecho especialmente para LuaDEV, pero puedes adaptarlo facilmente a otro interprete Lua.


Weaponlib v3.0

Mejoras:

  • Mejorado mucho el código.
  • Ahora puede disparar en cualquier ángulo
  • Cuando colisiona devuelve también las coordenadas.

Descargar WeaponLib v3.0   (Sólo Usuarios Registrados y Programadores).


Weaponlib v1.0

Descargar WeaponLib v1.0   (Sólo Usuarios Registrados y Programadores).

4.21905
Tu voto: Ninguno Votos totales: 4.2 (105 votos)

Anuncios

Comentarios

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 xerpi

Nueva versión

Nueva versión 4.0

  • Re-hecha de cero
  • Es un 50% más rápida
  • Está mucho más optimizada
  • Su uso es algo más sencillo

DESCARGA: http://pastebin.com/raw.php?i=K6hmt44j


USO:

Lo primero de todo tenemos que hacer un dofile a la libreria.

dofile("weaponlib.lua")

Luego cargamos la imagen de la bala ( DEBE DE ESTAR EN HORIZONTAL):

 bala = image.load("bala.png")

Luego de eso creamos el "arma":

disparo =  weapon:new(bala,50);

El primer parámetro es la imagen de la bala previamente cargada/creada, y el segundo el tiempo en milisegundos entre disparo y disparo .

Ahora inicializamos el "arma":

disparo:start();

El siguiente paso será disparar:

disparo:shoot(x,y,velocidad,ángulo)

  • disparo: es el arma previamente creada
  • x: coordenada x de donde va a salir la bala
  • y: coordenada y de donde va a salir la bala
  • velocidad: la velocidad que irá la bala (recomendable entre 2 y 10)
  •  ángulo: el ángulo con que irá la bala ( 0 a la derecha, 90 abajo, -90 o 270 arriba y 180 izquierda)

Por último será blitear las balas:

disparo:blit()

Si quieremos comprobar una colisión tan solo debemos hacer esto:

disparo:collision(x,y,w,h,boolean)

"x","y","w" y "h" són las coordenadas y el ancho y alto del "sitio" donde queremos colisionar. En boolean va true si quieres que al colisionar la bala desaparezca o false o un espacio vacio si no.

SNIPPET DE EJEMPLO:

--Dofile a la libreria
	dofile("weaponlib.lua")
--Cargamos la imagen de la bala (podemos hacer un image.create) NOTA: LA IMAGEN DEBE DE ESTAR EN HORIZONTAL
	bala =  image.load("bala.png") --image.create(20,5,color.new(255,0,0))
--Esa función devuelve un color sin alpha aleatorio
	function random_color()
		return color.new(math.random(0,255),math.random(0,255),math.random(0,255))
	end
--Array de los enemigos
	object = {}	 
--Creamos 10 enemigos
	for i = 1, 10 do
		table.insert(object,{x=math.random(20,460), y=math.random(20,252),w=math.random(15,90),h=math.random(15,90),color=random_color()})
	end
--Variables del "personaje"
	x=240
	y=136
	ang =0 
---CREAMOS UNA NUEVA "ARMA"
	disparo =  weapon:new(bala,50);
--LA INICIAMOS JUSTO ANTES DEL BUCLE
	disparo:start();
 
while true do
--Limpiamos buffer de color blanco
	screen.clear(color.new(255,255,255))
--Leemos controles
	controls.read()
--Movemos el personaje con el joystick
	if math.abs(controls.analogx())>50 then x=x+controls.analogx()/50 end
	if math.abs(controls.analogy())>50 then y=y+controls.analogy()/50 end
--Dibuja un cuadrado verde donde está nuestro "personaje" y el cañón
	draw.fillrect(x-5,y-5,10,10,color.new(0,255,0))	
	draw.line(x,y,x+math.cos(math.rad(ang))*40,y+math.sin(math.rad(ang))*40,color.new(0,0,255))
--DISPARA CON LA ARMA PREVIAMENTE CREADA
	if controls.cross() then disparo:shoot(x,y,7,ang) end
--Rotamos el "cañón" del personaje
	if controls.r() then ang = ang+2 end
	if controls.l() then ang = ang-2 end
--Dibuja los enemigos y cambia su color si hay colision con las balas
	for i =1, 10 do	
		--Dibuja enemigos
			draw.fillrect(object[i].x,object[i].y,object[i].w,object[i].h,object[i].color)
		--COMPRUEBA LA COLISIÓN
			if disparo:collision(object[i].x,object[i].y,object[i].w,object[i].h,true) then
				object[i].color = random_color()	
			end
	end
--BLITEAMOS LAS BALAS
	disparo:move();
	disparo:blit();
---------------------------------------------------------------------
screen.print(5,5,"JoyStick: Move - R/L: Change angle - X: Shoot",color.new(255,0,0))
screen.print(5,25,"WeaponLib sample by xerpi",color.new(0,255,0))
screen.print(5,45,"Bullets in the screen: "..#disparo.bullets,color.new(255,0,255))
screen.print(430,5,"@"..screen.fps(),color.new(0,0,255))
 
if controls.select() then make_an_error() end
screen.flip()
end

 


Be a pointer my friend… empty your memory, with a free()… like a pointer!

Imagen de xerpi

El link de descarga de la v3

El link de descarga de la v3 está mal, se descarga la 1.5.

Imagen de markef

Genial :D

Gran librería y gran coder ;)

Imagen de daniel252

gracias

esta bien pero no entendi en todo

Imagen de jorge_97

By Jorge_97

wtf:

Fecha en la que xerpi subio la V3: Sáb, 2011-07-30 12:47

Fecha en la que subieron esto a portada: Jue, 2011-08-11 11:43

Buen aporte!! Un salu2 a todos


Hoy camino por el agua,

que un día convertiste en vino,

enseñándome el camino

 

Ti amo!!!

Imagen de _-Viciuz-_

supongo

tu lo harias mejor no?

Imagen de jorge_97

By Jorge_97

La verdad nunca lo sabremos...

Solo digo que hace falta un poco mas de velocidad (Critica) Siento que este no sea el lugar adecuado para decir esto pero me da pereza crear otro tema...

PD: Cuando creas algo y ya tienes por ejemplo la version 2.0 y aun no han subido la V1.0 ... molesta mucho xD (Ej:Lethal Shot)

Salu2 espero no ofender a nadie


Hoy camino por el agua,

que un día convertiste en vino,

enseñándome el camino

 

Ti amo!!!

Imagen de Vic1717

Perdon Patron

Tambien tengo vida y otras prioridades.

Si prefieres ponlas en el foro aportes de usuarios.

PD: ahora me pongo a actualizar noticias...

Fin del off-topic.

Imagen de jorge_97

By Jorge_97

No eres el unico editor no te des por aludido...

Yo tambien soy humano

Salu2

Imagen de Vic1717

...

Y por eso te digo, si me lo mandas por MP solo yo puedo hacerlo, si lo pones en el foro de aportes cualquier editor lo hara.

Imagen de barney77

Si tanto te urge que vean tus

Si tanto te urge que vean tus creaciones, postealas en el foro mientras suban a Portada, o lo más justo de todo, postearla en el foro y que se gane la portada..
Salu2.

Imagen de jorge_97

By Jorge_97

Interesante... Muy interesante

 

Imagen de Dioni0396

Con solo decirte

que en cada noticia, tienes que tener una limpieza y orden extrictas.... Y renombrar los archivos, crear una cabezera "apetitosa", etc,etc,etc.

Ademas, yo tambien espero que publiquen lo mio. Pero tengo paciencia.


Hazte mi referido en get paid: http://www.get-paid.com/index.php?ref=Brigida0396

Clicka solo si quieres.

Imagen de jorge_97

By Jorge_97

Ya lo se xD y ademas realizan trabajos no remunerados que eso cuenta ;D

Salu2.

PD: Grandiosa esta Libreria sin duda es la mejor!!

Imagen de Nevado0

Si lo dices por la

Si lo dices por la tardanza:

Fecha en la que xerpi subio la V3: Sáb, 2011-07-30 12:47

Fecha en la que se actualizo la lib : Dom, 2011 -07 -31 16:26

Fecha en la que subieron esto a portada: Jue, 2011-08-11 11:43

Salu3!


 Click en la imagen si kieres un avatar o una firma tan espectacular como los mios =P.

Psp 2001 Gen d3 + Memory stick 4 gb

Ps3 Fat 60GB + CFW Rebug 3.55 + Disco duro externo 250 GB+ Multiman

Imagen de Dioni0396

Los editores

tienen bastante trabajo aunque no lo parezca, ademas de que una libreria de lua es menos urgente que una actualizacion de firmware.

Por eso la tardanza.


Hazte mi referido en get paid: http://www.get-paid.com/index.php?ref=Brigida0396

Clicka solo si quieres.

Imagen de jorge_97

by jorge_97

Ya, no quiero criticar el trabajo de nadie ni mucho menos ademas de que lo hacen sin animo de lucro...

Pero es cierto que llevan un poco de tardanza...

Salu4


Hoy camino por el agua,

que un día convertiste en vino,

enseñándome el camino

 

Ti amo!!!

Imagen de barney77

Más bien dicho yo diría que

Más bien dicho yo diría que fuerón rapidos, según la fecha que dá nevado, ya estaba actualizada un día despues de que Xerpi posteo la V3, recuerda, que cada noticia que pasa a portada, primero pasa por doscificación, y se queda ahí de acuerdo a su importancía.

Salu2!.

Imagen de anxoganso

Como si esperas 3 meses si te

Como si esperas 3 meses si te interesa miras la noticia de vez en cuando y listo y la gente tiene mas k hacer xd xd no es una critica solo un comentario


Si alquien me puede ayudar con esto :

http://psp.scenebeta.com/node/88305

Imagen de Dioni0396

Te repito

Que una lib tarda mas en actualizarse que un HB, aunque ya dijeron que se actualizo y no se publico. Asi que la espera era solo de esperar a la portada pero la lib ya estaba ahi.


Hazte mi referido en get paid: http://www.get-paid.com/index.php?ref=Brigida0396

Clicka solo si quieres.

Imagen de xerpi

Versión

Versión 3.

Mejoras:

  • Mejorado mucho el código.
  • Ahora puede disparar en cualquier ángulo
  • Cuando colisiona devuelve también las coordenadas.

Como usarlo:

Lo primero de todo tenemos que hacer un dofile a la libreria.

dofile("weaponlib.lua")

Luego cargamos la imagen de la bala ( DEBE DE ESTAR EN HORIZONTAL):

bala = image.load("bala.png")

Luego de eso creamos el "arma":

disparo =  weapon.create(imagen_de_la_bala, tiempo)

El primer parámetro es la imagen de la bala previamente cargada/creada, y el segundo el tiempo en milisegundos entre disparo y disparo .

Ahora inicializamos el "arma":

weapon.action(arma,accion)

En acción va "start" o "stop".

El siguiente paso será disparar:

weapon.shoot(arma, x, y, velocidad, ángulo)

  • arma: es el arma previamente creada
  • x: coordenada x de donde va a salir la bala
  • y: coordenada y de donde va a salir la bala
  • velocidad: la velocidad que irá la bala (recomendable entre 2 y 10)
  •  ángulo: el ángulo con que irá la bala ( 0 a la derecha, 90 abajo, -90 o 270 arriba y 180 izquierda)

Por último será blitear las balas:

 weapon.blit(arma)

Si quieremos comprobar una colisión tan solo debemos hacer esto:

weapon.collision(tabla,x,y,w,h,boolean)

"x","y","w" y "h" són las coordenadas y el ancho y alto del "sitio" donde queremos colisionar. En boolean va true si quieres que al colisionar la bala desaparezca o false o un espacio vacio si no.

 

Descarga weaponlib v3 + sample

 

NO RESPONDAIS EN ESE COMENTARIO

 


Be a pointer my friend… empty your memory, with a free()… like a pointer!

Imagen de bauldescargas

Lo mirare   

Lo mirare 

 

Imagen de xerpi

Si la vas a usar, usa la que

Si la vas a usar, usa la que hay unos comentarios mas abajo.

Imagen de NauTiluS1

Ya funciona con la libreria

Ya funciona con la libreria animlib? osea que la bala sea una animacion?

Imagen de NauTiluS1

Forma sencilla

--Creo mi unico disparo
dofile("weaponlib.lua")
nau = {img=image.create(xxxxx),xxxxxxxx}
 
disparo = weapon.create(nau,velocidad,tiempo)
 
weapon.action(disparo,"start")
 
--Hago una variable de direccion arriba
 
tilus = "arriba"
 
while true do
controls.read()
 
if tilus == "arriba" then
if controls.cross() then
weapon.shoot(disparo,direccion-donde-sale-el-disparo-en-la-parte-de-arriba,direccion-donde-sale-el-disparo-en-la-parte-de-arriba,"up")
end
end
 
if tilus == "abajo" then
if controls.cross() then
weapon.shoot(disparo,direccion-donde-sale-el-disparo-en-la-parte-de-abajo,direccion-donde-sale-el-disparo-en-la-parte-de-abajo,"down")
end
end
 
if controls.up() then
xxxx.y = xxxx.y - 1
tilus = "arriba"
end
 
if controls.down() then
xxx.y = xxxx.y + 1
tilus = "abajo"
end
weapon.blit(disparo)
screen.flip()
end

Yo use algo parecido en shooter soccer.

En teoria debe funcionar


Follow me twitter nautilus1_jmccu!!
Sony, ya a nadie le interesa tus UMD si alguien compra una psp es por nosotros los coders. Madura y has un FW que haga la diferencia y anime a las personas en comprar un PSP

Imagen de xerpi

Mira unos cuantos comentarios

Mira unos cuantos comentarios más abajo y verás una forma mucho más rápida y sencilla, por cierto os recomiendo no usar la lib de la noticia, es mejor la que he puesto unos comentarios más abajo.


Be a pointer my friend… empty your memory, with a free()… like a pointer!

Imagen de bauldescargas

Perodonen mi ignorancia pero

Perodonen mi ignorancia pero esk no entiendo para que sirve este hombrew y eso de disparar...

Explicarmelo .

Gracias por adelantao

Imagen de Dioni0396

No es un Hb

es una libreria, se usa para programar juegos

Muy........

...interesante esta biblioteca, cuando sepa mas de programacion me arriesgare a hacer un jueguito, jejejejejeje

Imagen de n3dexo

mmmmmmmmmmm te digo una

mmmmmmmmmmm te digo una mejora para la lib pero por msn xD deja conectarme

Imagen de xerpi

De momento ya la llevo

De momento ya la llevo bastante mejorada (posibilidad de disparar en ángulo y alguna cosa más), pero cualquier sugerencia es buena :)


Be a pointer my friend… empty your memory, with a free()… like a pointer!

Imagen de NauTiluS1

Sugerencia :D

Una mejora qué caería bien sería disparar con efecto de rotación como image.rotate(xD)

Imagen de xerpi

Necesito que deviante me

Necesito que deviante me acabe de dar unas funciones (math.poly) ya que las necesito, pero de momento llevo esto(hay cosas raras y comentarios porque hay no es el release de la v2) : http://pastebin.com/V9PjPvFt

Ahora funciona así:

arma_ya_creada = weapon.create(img,time)

weapon.action(arma_ya_creada,"start")

y para disparar, blitear y colisionar:

weapon.shoot(arma_ya_creada,x,y,velocidad,angulo)

weapon.blit(arma_ya_creada)

weapon.collision(arma_ya_creada,x,y,w,h,deadcollision)

 


Be a pointer my friend… empty your memory, with a free()… like a pointer!

Imagen de xerpi

Voy a mejorar bastante la

Voy a mejorar bastante la Lib.

Imagen de NauTiluS1

Hay una forma más simple para

Hay una forma más simple para poner los disparos up,left,right,down, mas tarde lo explico.

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.