Bien pues tras leerme no se cuantas veces el tuto de chime sobre las colisiones no se como aplicarlas...
function colision(obj1, obj2) -- esta función, verifica si hay colisión o no entre dos objetos, notar que, DENTRO de la función se usan los parámetros que recibe, más adelante, veremos como se usa if obj1.x+obj1.w>obj2.x -- borde derecho obj1 > borde izquierdo obj2 and obj1.x<obj2.x+obj2.w -- borde izquierdo obj1 < borde derecho obj2 and obj1.y+obj1.h>obj2.y -- borde inferior obj1 > borde superior obj2 and obj1.y<obj2.y+obj2.h then -- borde superior obj1 < borde inferior obj2 return true -- retorna verdadero si hay colisión end return false -- si el if no se cumple, viene a esta línea y retorna false, es decir, no hay colisión end
Alguien podría explicarme las colisiones de una forma sencilla??
------------------
Edito
Jajajaja ya lo tengo...
Aqui dejo mi codigo por si le sirve a alguien ;) Lo explico TODO con -- xDD
--Esta funcion es la base... Las colisiones... function colision(obj1, obj2) if obj1.x+obj1.w>obj2.x and obj1.x<obj2.x+obj2.w and obj1.y+obj1.h>obj2.y and obj1.y<obj2.y+obj2.h then return true end return false end --Color rojo rojo=color.new(255,0,0) --Arrays (Fijense que al final pone "oldx" y "oldy" eso se refiere a la antigua "x" e "y". personaje = {img = image.load("imagen.png"),x=100,y=100,w=0,h=0,vida=100,oldx=0,oldy=0} --Igual... (OJO en "w" y "h" pongo 0 porque seran las de la imagen... jer = {img = image.create(30,20,rojo),x=200,y=100,w=0,h=0,vida = 100,oldx=0,oldy=0} -- Y aqui igual pero no pongo old porque con este no me interesa... enemigo = {img= image.load("imagen2.png"),x=44,y=57,w=0,h=0} personaje.w = personaje.img:width() personaje.h = personaje.img:height() enemigo.w = enemigo.img:width() enemigo.h = enemigo.img:height() --Ya tenemos los personajes, vamos por lo interesante xDDD while true do --Jajajaj aqui decimos que la antigua posicion es igual a la verdadera... --Pronto entenderan esto personaje.oldx=personaje.x personaje.oldy=personaje.y jer.oldx=jer.x jer.oldy=jer.y controls.read() --Mostramos la vida screen.print(20,20,personaje.vida) --Mostramos la imagen (Siempre usamos la coordenada verdadera no la "old") personaje.img:blit(personaje.x, personaje.y) jer.img:blit(jer.x, jer.y) enemigo.img:blit(enemigo.x,enemigo.y) --Movemos el personaje (Siempre usamos la coordenada verdadera no la "old") if controls.press("down") then personaje.y=personaje.y+10 jer.y=jer.y+10 end if controls.press("left") then personaje.x=personaje.x-10 jer.x=jer.x-10 end if controls.press("up") then personaje.y=personaje.y-10 jer.y=jer.y-10 end if controls.press("right") then personaje.x=personaje.x+10 jer.x=jer.x+10 end --POR FIN: Si colisionan personaje y enemigo entonces las coordenadas del personaje --seran las anteriores, y por lo tanto no podra atravesar nunca eso... --E igual con las otras 2 if colision(personaje,enemigo) then personaje.x = personaje.oldx personaje.y = personaje.oldy --Aqui puedes decir que si colisionan vida=vida-"Lo que tu quieras" por ejemplo end if colision(jer,enemigo) then jer.x = jer.oldx jer.y = jer.oldy end if colision(jer,personaje) then jer.x = jer.oldx jer.y = jer.oldy end --Y ya esta...!!! Asi de sencillo
Gracias y Saludos
Como puedes ver esa función
Como puedes ver esa función necesita de parámetros dos tablas o arrays o matrices o vectores o arreglos, como le quieras llamar, que contengan cada una 4 variables, esas son la coordenada x donde se encuentra, la y, el ancho del "objeto" y el alto. Entonces esa función retorn true si se cumple la colisión entre dos objetos, para aplicarlo basta con un simple if y luego lo que quieres que haga si se cumple la colisión, por ejemplo, quieres que si colisione el jugadot contra el enemigo, la vida del jugar baje 10:
By jorge_97
Si pero obj1 y obj2 funcionan como cualquier variable???
Si es asi seria buenisimo
Claro, la funcion no la
Claro, la funcion no la tienes que tocar, es como si ya viniera de LuaDEV, el primer parámetro pasa a ser obj1 y el segundo ob2.
By jorge_97
Todo perfecto!! Muchas gracias xerpi excepto esto:
He puesto comentarios en el codigo --
Dos años en SCENEBETA
Click aquí para ver la Entrada de Bitácora.
Mmm...if
Mmm...
if colision(personaje,enemigo) then personaje.posicion=laposicsion end
Eso es lo que entendi, pero veo que disminuye 10 pixeles conforme vaya presionando, entonces se me ocurre...
if colision(personaje,enemigo) then personaje.x=personaje.x-10 end
By jorge_97
Eiii pues no he pensado eso... xDDDD podria funcionar...
Pues ya sabes, solo
Pues ya sabes, solo imaginación xD, prueba aver que tal.
By jorge_97
Ok y te cuento!!... Pero mañana xDDD que aqui en España ya son las 02:00
Saludos y gracias!
asi te funciona?
vaya...
No me se bien las colisiones xD