Saludos tenía tiempo que no posteaba y es porque estoy trabajando en Shell Files Explorer 4.01 y en un juego que pienso implementarle el cual me da un problemita que es...que al tratar de hacer que el objeto se mantenga en la plataforma sin atravesarla el objeto al tratar de hacer colision simplemente desaparece, el codigo es este:
--Creamos los Colores. verde=color.new(0,255,0) blanco = color.new(255,255,255) --Creamos el suelo. suelo = image.create(480,10) suelo:clear(verde) --Creamos el personaje. personaje1 = image.create(32,32) personaje1:clear(blanco) --Creamos la plataforma bloque2 = image.create(200,80) bloque2:clear(verde) --Array del personaje. personaje = {x=0,y=230,velocidadSalto=10,estadoSalto="suelo",gravedad=230,w=personaje1:width(),h=personaje1:height()} --Array de la plataforma plataforma = {x=400,y=190,h=bloque2:height(),w=bloque2:width()} function colision(obj1, obj2) 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 --Bucle principal while true do controls.read() screen:clear() if colision(personaje,plataforma) then personaje.y = plataforma.y - 40 --[Aqui lo que hace es que en X y Y coloque el personaje en la posicion X y Y de la plataforma, pero en vez de eso veo que el objeto desaparesca]] personaje.x = plataforma.x + 400 --plataforma.y = personaje.y + -40 --plataforma.x = personaje.x + 400 end if controls.left() then personaje.x = personaje.x - 2 end if controls.right() then personaje.x = personaje.x + 2 end if controls.cross() and personaje.estadoSalto == "suelo" then personaje.estadoSalto = "saltando" end if personaje.estadoSalto == "saltando" then personaje.velocidadSalto = personaje.velocidadSalto - 0.5 personaje.gravedad = personaje.gravedad - personaje.velocidadSalto end if personaje.velocidadSalto < 0 then personaje.estadoSalto = "cayendo" end if personaje.gravedad < 230 and personaje.estadoSalto == "cayendo" then personaje.velocidadSalto = personaje.velocidadSalto + 0.5 personaje.gravedad = personaje.gravedad + personaje.velocidadSalto end if personaje.gravedad == 230 then personaje.velocidadSalto = 10 personaje.estadoSalto = "suelo" end if personaje.gravedad > 230 then personaje.gravedad = 230 end if controls.press("select") then error("mentira",1) end personaje.y = personaje.gravedad image.blit(personaje.x,personaje.y,personaje1) image.blit(0,262,suelo) image.blit(plataforma.x,plataforma.y,bloque2) screen.flip()
No me muestra ningun mensaje de error solo que al hacer colision con la plataforma simplemente desaparece el objeto.
Gracias de antemano.
Edito: Gracias a ambos por su ayuda, ya he resuelto el problema agregando una simple linea que es:
personaje.gravedad = plataforma.y - 30
Y con eso se mantiene en la plataforma sin caerse, solo que no puedo brincar estando ella, pero ya pude hacer que se mantenga en la plataforma.
El problema es ésta
El problema es ésta línea:
Cuando colisiona mandas al personaje fuera de la pantalla (a x=800, más o menos xD).
Okey resolví eso, ahora puse
Okey resolví eso, ahora puse que la plataforma este en el aire con coordenada Y=150, X=200, y la imagen creada (que es un rectángulo coloreado de verde) tiene los valores (200,30) y cuando salto sobre la plataforma el objeto solo dura 2 segundo sobre ella y se cae solo aunque este en medio de la plataforma.
Y cambie pedazo de code de la colision y puse esto:
mmm, creo que es por la
mmm, creo que es por la funcion de salto que me imagino que solo se acaba cuando esta en el suelo y no en la plataforma, debes terminar el salto o mas bien la caida cuando estes en la plataforma
creo que el problema es que
creo que el problema es que le estas sumando las cordenadas de mas en X al personaje, cuanto mide la plataforma?, por que estas sumando, personaje.x = plataforma.x + 400, etonces supongo que el personaje queda fuera de la pantalla.