Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Problema al moverme  (Leído 212 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado elmmertonw

  • Habitual
  • *
  • Puntos: 81
  • Mensajes: 52
  • Agradecido: 6 veces
  • Sexo: Masculino
  • I'm brony :D Compositor,Artista,Programador...
    • Ver Perfil
    • Mi pequeño canal para aprender a programar
en: Agosto 09, 2018, 08:44:49 am
Hola a todos el condigo que ocupo esta diseñado para que mientra este en colicion con el objeto me pueda mover pero mientras no allá colicion no pueda moverse , es lo contrario el espacio libre es el muro, pero el problema es que me muevo, si pero solamente en 2 direcciones , abajo y derecha,izquierda y arriba no funcionan. no se mueve acá abajo le dejo el código

Código: [Seleccionar]
if(keyboard_check(vk_up)and !place_empty(x,y-19)){vspeed=-3;}else{vspeed=0;}
    if(keyboard_check(vk_down)and !place_empty(x,y+19)){vspeed=3}else{vspeed=0;}
    if(keyboard_check(vk_left)and !place_empty(x-19,y)){hspeed=-3}else{hspeed=0;}
    if(keyboard_check(vk_right)and !place_empty(x+19,y)){hspeed=3}else{hspeed=0;} 
    if(keyboard_check_released(vk_up)){vspeed=0;}
    if(keyboard_check_released(vk_down)){vspeed=0;}
    if(keyboard_check_released(vk_left)){hspeed=0;}
    if(keyboard_check_released(vk_right)){hspeed=0;}

:3 visita mi canal-cito de youtube :3
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Hezz

Respuesta #1 en: Agosto 10, 2018, 01:39:06 am
Hola elmmertonw! Lo que sucede es que se juntan los códigos y te da un mal resultado. Me explico:

Vamos a ver sólo esta parte del código:
if (keyboard_check(vk_up) and !place_empty(x,y-19)) {vspeed=-3;} else {vspeed=0;}
if (keyboard_check(vk_down) and !place_empty(x,y+19)) {vspeed=3} else {vspeed=0;}


Supongamos que presionas la flecha de arriba. El código que detecta esa tecla hace que tu personaje tenga una vspeed de -3, pero el que detecta la tecla hacia abajo lo cambia a 0, ya que al no presionarse la flecha de abajo se ejecuta el else.
Lo mismo acá:
if (keyboard_check(vk_left) and !place_empty(x-19,y)) {hspeed=-3} else {hspeed=0;}
if (keyboard_check(vk_right) and !place_empty(x+19,y)) {hspeed=3} else {hspeed=0;}


Podés cambia el código por esto:
//Direcciones
//Horizontales
hspeed = (keyboard_check(vk_right) - keyboard_check(vk_left)) * 3;
//Verticales
vspeed = (keyboard_check(vk_down) - keyboard_check(vk_up)) * 3;

//Comprobar que colisione contra el objeto
//Horizontalmente
if (place_empty(x+hspeed, y)) {hspeed = 0;}
//Verticalmente
if (place_empty(x, y+vspeed)) {vspeed = 0;}


En hspeed, el cálculo que hace es el siguiente:
Si se presiona una tecla es 1 y si no se presiona es 0. Por ejemplo, si se presiona la tecla derecha y no la izquierda sucede esto:
hspeed = (1 - 0) * 3;
Entonces queda hspeed = 3;

También al no presionar la derecha y si la izquierda:
hspeed = (0 - 1) * 3;
hspeed = -3;

Son muy importantes los paréntesis entre el "(keyboard_check(vk_down) - keyboard_check(vk_up))". Sin ellos queda así:
Izquierda:
hspeed = 0 - 1 * 3;
hspeed = -3;

Derecha:
hspeed = 1 - 0 * 3;
hspeed = 1;
Sucede lo mismo en el vspeed.

Y en las colisiones:
if (place_empty(x+hspeed, y)) {hspeed = 0;}
Si está vacío en x+hspeed pone la hspeed en 0. El x+hspeed funciona con las dos direcciones:
Derecha:
if (place_empty(x+3, y)) {hspeed = 0;}
Izquierda:
if (place_empty(x-3, y)) {hspeed = 0;}
Y lo mismo en las verticales.

Espero que te sirva! :D

 


 


Warning: Parameter 1 to spoiler_buffer() expected to be a reference, value given in Unknown on line 0

Warning: Parameter 1 to custom_report_ob() expected to be a reference, value given in Unknown on line 0