Octubre 11, 2021, 03:28:58 AM Ultima modificación: Octubre 11, 2021, 03:38:22 AM por roy_focker
Hola, queria pedir su ayuda ya que me trabe en una parte, tengo un personaje principal que cuando presiona la tecla E agarra un arma, hasta ahi todo bien logre que dispare y todo pero tengo el inconveniente de que el arma se mueve y no mantiene la posicion que le di por que no puede seguir a la misma velocidad al personaje principal, por mas que le ponga la velocidad 100mil veces superior vuelve a su posicion cuando freno, la idea es que se mantenga siempre en la misma posicion, bueno eso es todo al que me de una mano con esto le estare agradecido





if object_exists(obj_player){
if activar = true

{


if balas >= 1{
if mouse_check_button(mb_left)
                                                  {
                                                  alarm[0]=1.49;
                                                  }   
}
if balas =0{
}
                                                 
                                             
                                                 
                                                  friction= false;
x=obj_alma.x;
y=obj_alma.y;
speed=100000000000;                                                 

}


if balas =0{
}

else {speed = 0;}




(el obj_alma no es el arma puse asi para que cuando el personaje principal muera los enemigos esten mirando ese objeto, el obj_alma si esta pegado al obj_player )

Que onda amigo! Hace tiempo me pasó un problema similar, la solución que le encontré fue poner los códigos de las coordenadas x, y en un end step, eso hizo más preciso el movimiento, intenta con eso y me cuentas, un saludo! :3

Hola, ahi probe eso pero aunque lo haga me sale el mismo error que en step,igualmente gracias por la respuesta para asi ir descartando

hmm, ya veo..
mira, pienso que la variable speed esta de mas en este código, has probado no usar speed?

Fue lo primero que hice, solo la agregue despues pero el resultado es el mismo

Prueba poniendo el código en los 3 eventos steps

#6 Octubre 18, 2021, 08:33:08 PM Ultima modificación: Octubre 18, 2021, 09:07:31 PM por Jeffrey Faper
a mi me pasaba algo parecido con la hitbox de mi personaje esta  lo seguía pero un poco atrasada a la posición indicada
mi solución fue re-posicionar los objetos en la carpeta objects ya que primero había creado el objetoHitbox y después al objetoJugador
cambiando el orden osea el jugador al inicio y después todo lo demás , fue como se soluciono el problema supongo que sera un bug de Game Maker
o literalmente hay que posicionar los objetos  en cierto orden 


Bueno, el código está complicado de leer  :-[ Tampoco entiendo cuál es el objetivo que quieres conseguir, pero de momento veo que según tu código el arma sólo sigue al jugador si la variable "activar" está en "true" ¿Es así?

Cita de: knd144 en Octubre 19, 2021, 11:25:53 PM
Bueno, el código está complicado de leer  :-[ Tampoco entiendo cuál es el objetivo que quieres conseguir, pero de momento veo que según tu código el arma sólo sigue al jugador si la variable "activar" está en "true" ¿Es así?

si esa esa linea de codigos pertenece al arma, que se activa cuando el objeto player se posiciona sobre el arma y se presiona la letra E y se activa, el problema es que tiene como un pequeño delay el arma cuando se mueve el player(no importa la velocidad que se le de al objeto arma o si no se le da una velocidad, siempre tiene ese delay para posicionarse )

Cita de: Jeffrey Faper en Octubre 18, 2021, 08:33:08 PM
a mi me pasaba algo parecido con la hitbox de mi personaje esta  lo seguía pero un poco atrasada a la posición indicada
mi solución fue re-posicionar los objetos en la carpeta objects ya que primero había creado el objetoHitbox y después al objetoJugador
cambiando el orden osea el jugador al inicio y después todo lo demás , fue como se soluciono el problema supongo que sera un bug de Game Maker
o literalmente hay que posicionar los objetos  en cierto orden


bueno en mi caso siempre creo el objeto player al principio y los mantengo ordenados en carpetas y el orden lo posiciona al player como prioritario, pero creo que esa posicion  debe ser de lectura al inicio no creo que de prioridad, aun asi voy a probar y despues te digo(aunque a la inversa en este caso)

Cita de: roy_focker en Octubre 24, 2021, 07:37:27 AM

bueno en mi caso siempre creo el objeto player al principio y los mantengo ordenados en carpetas y el orden lo posiciona al player como prioritario, pero creo que esa posicion  debe ser de lectura al inicio no creo que de prioridad, aun asi voy a probar y despues te digo(aunque a la inversa en este caso)

probe lo que dijiste(cambiando la escala de prioridades) pero el resultado es el mismo, aun asi gracias, me sirve para ir descartando distintas alternativas.

Cita de: roy_focker en Octubre 24, 2021, 08:36:50 AM
probe lo que dijiste(cambiando la escala de prioridades) pero el resultado es el mismo, aun asi gracias, me sirve para ir descartando distintas alternativas.

sabia que no funcionaria es que yo uso Game Maker Studio, parece que el problema esta en su codigo ya que anclar la posición de un objeto a otro es muy sencillo
a intentado poner su código de esta manera
[gml]
if object_exists(obj_player){
if activar = true
{
    x=obj_alma.x;
    y=obj_alma.y
   //Y DESPUES LO QUE SIGUE
[/gml]
otra solucion es que use items de powerUp estos contendrán el tipo de arma y munición  que el jugador obtendrá
al colisionar y presionar E  creara el arma en la posición deseada  el item de  powerUp se destruirá
de esa manera no tendrá que verificar si el arma esta activa, yo creo que esa parte del código es la causa de su problema


Es raro que haya ese delay, la verdad.

¿Y si lo intentas "al revés"? O sea, que sea en el evento del step del jugador donde se indique las coordenadas del objeto.

prácticamente puedes usar el mismo código si usas la sentencia "with":

[gml]
with(obj_arma)
{
    x = obj_alma.x; //Recuerda que dentro de la sentencia with, juegas con el scope del objeto con el que interactúas
    y = obj_alma.y;
}
[/gml]

O directamente agregas nuevo código sin usar la sentencia with

[gml]
if(instance_exists(obj_arma))
{
    obj_arma.x = x;
    obj_arma.y = y;
}
[/gml]


Yo intentaría algo así, poniéndolo en el "end_step" del jugador.  :-[ Ya dados a buscar parches...