Anuncios Google

Como hacer que un objeto se mantenga en una plataforma? [Solucionado]

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.



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.

El problema es ésta

El problema es ésta línea:

personaje.x = plataforma.x + 400

Cuando colisiona mandas al personaje fuera de la pantalla (a x=800, más o menos xD).

Imagen de -DjB

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:

if colision(personaje,plataforma) then --el queda bien arriba, pero después de 2 segundos se cae solo
	personaje.y = plataforma.y - 35
end


Imagen de Jepte

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

Imagen de Jepte

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.

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.