Dudas y problemas con LUADEV[Solicito a los coders, programadores, y los que sepan LUADEV]

Bueno, esque tengo algunas dudas y unos problemas en un code de LUADEV y quiero saber si me ayudan.

Aprovecho para dar agradecimientos a: Barney77 por ayudarme a hacer casi todo el code :)

PD: Barney77, te tengo un balon estilo scenebeta para tu HB BallEsquive. Te lo paso por MP.

Dudas.

1.- Como pongo los limites de la pantalla para que no se salga un objeto.

2.- Como hagó para que cuando un objeto entre a una zona, salga algo(Yo se que poner aqui(os.message("XXXX"))

Problemas.

1.- Bliteo una imagen para que cuando el disco choque con el portero, se blitee, pero el portero, deja el disco(se va a la izquierda) y se deja de blitear la imagen.

2.- Pusé que cuando se blitee la imagen, presione X, se reinicie y si presiono O se quite, pero quiero que solo pase eso cuando se blitea la imagen,pero si presiono el que sea cuando no he movido nada, se reinicia o quita.

Code.

Mallet={}
Mallet[1]={jugador=image.load("Imagenes/jugador.png"),x=195,y=186,h=80,w=80}
Mallet[2]={portero=image.load("Imagenes/portero.png"),x=195,y=6,h=80,w=80}
Mallet[3]={disco=image.load("Imagenes/disco.png"),x=65,y=106,h=50,w=50}
 
function control(object)
if controls.right() then
	object.x=object.x+7
elseif controls.left() then
	object.x=object.x-7
elseif controls.down() then
	object.y=object.y+7
elseif controls.up() then
	object.y=object.y-7
end
end
 
function colision(ob1,ob2)
if controls.cross() then
if ob1.x+ob1.w>=ob2.x and
	ob1.y+ob1.h>=ob2.y and
	ob1.y<=ob2.y+ob2.h and
	ob1.x<=ob2.x+ob2.w then
		return true
else
		return false
end
end
end
 
function C2(ob1,ob2)
if ob1.x+ob1.w>=ob2.x and
	ob1.y+ob1.h>=ob2.y and
	ob1.y<=ob2.y+ob2.h and
	ob1.x<=ob2.x+ob2.w then
		return true
else
		return false
end
end
 
 
 
Asb=5
 
mesa=image.load("Imagenes/Base.jpg")
loss = image.load("Imagenes/loss.png")
 
while true do
	controls.read()
		mesa:blit(0,0)
		Mallet[1].jugador:blit(Mallet[1].x,Mallet[1].y)
		Mallet[2].portero:blit(Mallet[2].x,Mallet[2].y)
		Mallet[3].disco:blit(Mallet[3].x,Mallet[3].y)
		control(Mallet[1])
		Mallet[2].x=Mallet[2].x+Asb
		if Mallet[2].x>=480-80 then Asb=-5 elseif Mallet[2].x<=0 then Asb=5 end 
	    if colision(Mallet[1],Mallet[3]) then Mallet[3].y=Mallet[3].y-10 elseif C2(Mallet[3],Mallet[2]) then loss:blit(0,0) elseif colision(Mallet[1],Mallet[3]) then Mallet[3].x=Mallet[3].x-10 end
if controls.press("circle") then dofile("script.lua") end
if controls.press("cross") then dofile("jugar.lua") end
screen.flip()
end


HiderDEV 2.0: 100%  3D Images: 100%   American Run: 100%

 

 

 


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.

mmmm...

Muchas dudas... no creo poder contestarlas todas (no las comprendo bien, además xD)
Empecemos:

  1. Los límites de la pantalla se manejan de acuerdo a tus necesidades. Por ejemplo, para mover una imagen sin que se salga de la pantalla, es muy sencillo, usas condiciones dobles:
    img = image.load....   --Cargas imagen, como siempre
    x= 0 ---- Posición inicial de tu imagen, en x.
     
    while true do
    controls.read()
         if controls.right() and x<480 - img:width() then x = x + 5 end     --Si presiono derecha, y x vale menos que 480 (ancho de la pantalla) menos el ancho de la imagen que cargué (obtenido con image.width), le sumo 5 a x.
              if controls.left() and x>0 then x = x - 5 end     --Lo mismo, pero con la tecla izquierda
                   img:blit(x,50)    --bliteo en x, y doy un valor fijo de y.
    screen.flip()
    end

    Funciona para un eje... lo puedes hacer para ambos si quieres, es la misma lógica.
  2. Si ya sabes hacer que aparezcan os.messages en determinadas condiciones... ya sabes hacer cualquier cosa. Me explico con un poco de code:
    if bla, bla, bla then          --Tu condición, como siempre :P
    --Aquí va el code que quieras ejecutar
    --No importa cuánto sea, se ejecutará si se cumple la condición
    --Si no... ps no xD
    --Anda... q es mucho code que ejecutar, eh?
    --ufff... y no se acaba...
    --Ah! por fin... xDD
    end

    La conclusión es: el if no tiene por qué ir en una sola línea. Puedes englobar todo el code que quieras :P

Para hacer lo que mencionas en el punto 2 del apartado problemas, yo acostumbro usar una variable de control. Por ejemplo, veo que tu imagen la bliteas bajo ciertas condiciones, eso está perfecto. Puedes agregar una línea más, con una variable de tipo booleano, y después comprobar con una condición, para ajecutar el código que deseas. Predico con el ejemplo:

if bla, bla, bla then
     img.blit
          status = true
else
     status = false
end
 
if controls.press("cross") and status then
--Todo el código que necesites
end

Como puedes ver, si está bliteada la imagen, y presiono x se ejecutará el código (porque status es verdadero). Pero si no está bliteada, no importa cuantás veces le dé a la X, no se ejecutará nada (porque status vale false)

Imagen de NauTiluS1

1-Chimecho tiene un tutorial

1-Chimecho tiene un tutorial 2-Colisión, hice un tutorial

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.