Hola nuevamente, muy a duras penas y con un esfuerzo titanico he conseguido entre ayuda de la gente de aquí ayuda de tutoriales y algo de ayuda divina, que mi player haga todos los movimientos y colisiones geniales escepto la de choque con el techo que se me queda trabado llevo desde esta mañana con este mismo problema y como os digo he revisado tutoriales y todo me falla si algún alma cándida quisiera echarme una pequeña manita....
PD : dejo un editable con el ejemplo en si de como tengo todo hasta ahora
Gracias de antemano a todos.
yo para que no se pegue con el techo suelo poner siempre únicamente if !place_free(x,y-1) y += 1;
nada no me funciona de ninguna manera eso kostra derrepente mi player empieza a rebotar..........
cómova a rebotar si con lo que te puse detecta lo de arriba, explicate :S representa que tienes gravedad
pues lo que te digo que se comporta de una manera algo rara XDXD seguramente sea porque mi organización de código es bastante mala y cualquiera de las cosas que haya hecho entre en conflicto de alguna manera con el código que me has dado así que como te digo rebota......XDXD
ya tardas en plasmar todo tu código aquí xD o quieres que te pase el engine platform que uso yo siempre?
he dejado un edítable si te vale???si no escribo todo el código XDXD jajaja obviamente también me encantaría tener tu engine ya que desgraciadamente en gml soy un poco lastimoso y en España hay pocos sitios en los que enseñen gml..... pero bueno XD
mejor sí, te paso lo ke uso, pk ando bebido y no soy capaz de ayudarte mirando tu engine ahora, para mí ahora, un libro de niños de 3 años es ilegible xD
[gml]///plat_create(spd,jmp,grv)
/*
0 velocidad
1 salto
2 gravity
ejemplo: plat_create(4,10,1);
*/
walksp = argument0;
jumpsp = argument1;
grav = argument2;
hsp = 0;
vsp = 0;
ground = 1;
[/gml]
[gml]///plat_step(mode,spr_stand,spr_walking,spr_in_air)
/*
0 mode (0 = flechas, 1 = WASD)
1 spr quieto
2 spr corriendo
3 spr en el aire
ejemplo: plat_step(1,spr_stand,spr_walk,spr_air);
*/
if argument0 <= 0
{
KEY_RIGHT=keyboard_check(vk_right);
KEY_LEFT=keyboard_check(vk_left);
KEY_JUMP=keyboard_check_pressed(vk_up);
KEY_FALL=keyboard_check_released(vk_up);
}
else
{
KEY_RIGHT=keyboard_check(ord('D'));
KEY_LEFT=keyboard_check(ord('A'));
KEY_JUMP=keyboard_check_pressed(ord('W'));
KEY_FALL=keyboard_check_released(ord('W'));
}
if (KEY_RIGHT)
{
hsp=walksp;
image_xscale=1;
}
if (KEY_LEFT)
{
hsp=-walksp;
image_xscale=-1;
}
if (!KEY_RIGHT and !KEY_LEFT) hsp=0;
if (!place_free(x+hsp,y))
{
if (hsp!=0)
while (place_free(x+sign(hsp),y))
x+=sign(hsp);
hsp=0;
}
x+=hsp;
if (!place_free(x,y+1)) grounded=1;
else grounded=0;
if (KEY_JUMP and grounded)
{
vsp=-jumpsp;
}
if (KEY_FALL and !grounded and vsp<-1) vsp=-1;
if (!grounded) vsp+=grav;
if (!place_free(x,y+vsp) && vsp<0)
{
while (place_free(x,y+sign(vsp))) y+=sign(vsp);
vsp=0;
}
if (!place_free(x,y+vsp) and vsp>0)
{
var cc;
cc=vsp+1;
while (place_free(x,y+1) and cc>=0) y+=1;
grounded=1;
vsp=0;
}
y+=vsp;
if (grounded)
{
if (hsp==0)
{
sprite_index=argument1;
}
else
{
if (sprite_index!=argument2)
sprite_index=argument2;
}
}
else
{
sprite_index=argument3;
}
[/gml]
te lo agradezco aunque creo que es algo complejo para mi tu sistema voy a intentar implementarlo con el que ya tengo a ver si doy con la solución a todos mis males XD
pero si tienes anotado hasta ejemplos xDD
es copypaste practicamente xd
Si jajajaaj pero el problema que aunque sea copy paste a veces al tener tanto lío en mi código interno luego no suelen quedar bien jajajaj
por eso te pasé SCRIPTS para que no se te mezcle con tus cosas xD, te has parado a prestarle una MÍNIMA atención a lo que te puse? xD
si pero querido kostra me temo que aun soy algo novato para entender el funcionamiento..... :(
Que esto no es un chat por Dios!
¿Van a escribir una frase por post?
XD :-[
1- crea un script llamado "plat_create" con el primer código
2- crea un script llamado "plat_step" con el segundo código
3- en el player, evento create escribe plat_create(velocidad,velocidad_de_salto,gravedad);
por ejemplo plate_create(5,15,1);
4- en el player, evento step escribe plat_step(modo,sprite_quieto,sprite_corriendo,sprite_en_el_aire);
por ejemplo plat_step(1,spr_quieto,spr_caminando,spr_salto);
siendo el modo, 0 para las flechas del teclado, 1 para W,S,A,D elije el que más te guste.
5- FIN disfruta de tu platformer del futuro xD
Vale, no había leído lo de los script....XDXD igualmente aunque es funcional tiene fallitos y luego cuando siga implementando mas opciones me va a ser muy difícil de ajustar creo yo XDXD ya que mi personaje tiene un argumento mas que seria walk with gun y ese no esta en tu engine..... XDXD
que no esté no significa que sea un error xD
dale, estúdiatelo con calma e implementa eso que dices :B
XDXD no me referia a eso como error eee..... XDXD lo del fallito es una cosa que ya pregunte en el foro que pasaba y es que cuando presionas por ejemplo der y le das a izq en vez de seguir hacia adelante se va a izq y con la izq por ejemplo no pasa eso ...XDXD igualmente estudiare lo que me has dejado y por supuesto agradecerte la ayuda.
eso solo pasa usando hspeed, usando incremento y decremento de la x, eso es imposible de que pase :/
Pues te aseguro que pasa......cuando voy a der obviamente pulso la tecla asignada a der en este caso es la flecha si mantengo pulsada der y mientras sigue pulsada pulso izq se va a la izq te lo aseguro ademas no hay conflicto con ningún codigo mio ya que lo borre todo.... y cuando dejo pulsado izq y pulso der no pasa nada que es como debería pasar con der
ejemplo:
tecla izq: x -= 4;
tecla der: x += 4;
1 step, x se le resta 4 y se le suma 4, x = x
ES COMPLETAMENTE IMPOSIBLE!!!
pues te lo puedo asegurar que asi sucede,solo cuando pulso primero der que izq si pulso primero izq y mientras tanto `pulso der sigue a izq pero si pulso der y mientras lo mantengo pulso izq se va a izq y no hay mas codigo que el que tu me has dado
pero ese código usa algo similar a hspeed, pero propia xD, pensé que decías otra cosa, en ese caso, asía ojo, cambia las lineas "hsp=walksp;" y "hsp=-walksp;" por "hsp+=walksp;" y "hsp-=walksp;" y por último borra la linea que dice "x+=hsp;"
si quito la ultima linea la de x+ hsp el player no se mueve a ningun lado dejandola arregla el problema solo que la velocidad se multiplica por step
disculpa,cambia las dos primeras que dije por x+=walksp y x-=walksp :B
pero ahora tampoco valdria XDXDXD ya que ahora se anulan ambas velocidades y si pulso der y pulso izq se queda parado cuando lo que deberia es sergui a der que se presiono primero......ademas ahora las colisiones tampoco funcionan bien XDXD
tio tengo sueño, mañana te ayudo xD, dile a Niu, que no duerme xD
jajaja no te preocupes muchas gracias igualmente :)
Ya revisé tu proyecto, creo que es mejor que lo re-escribas, porque el código está demasiado disperso y ademas las colisiones se detectan de un modo más complicado de lo que deberían. Sigue los consejos de kostra, también puedes encontrar varios ejemplos en la comunidad y otros lugares de internet.