Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - woolf7

16
Preguntas y respuestas / colgarse de liana
Junio 18, 2015, 08:45:02 PM
Una de mis prioridades de a corto o mediano plazo al aprender a usar el GML era lograr el efecto de que el player se colgara en una liana y se moviera junto con ella, he intentado tratar de lograr esto por mi propia cuenta pero siempre termino quedando corto, y la cosa es que en teoría yo este problema lo veo de esta forma:

Hallar la coordenada de un punto(osea el player) sobre una recta(la liana) independientemente del angulo de dicha recta(osea que el player se mantenga en la misma posición en la recta sin importar el angulo de esta).
No se si sea la forma correcta de interpretarlo, pues supongo que depende de la trigonométria para resolver este tipo de problemas.
El punto es que no he encontrado ningún ejemplo en la Internet, por lo que me da a pensar que no es algo tan sencillo de hacer...
Si alguien alguna vez a hecho esto o sabe como hacerlo, agradecería que me pudieran dar alguna pista o decirme que funciones podría utilizar...

En mi ejemplo la liana se mueve sola(con image_angle) es por eso que me interesaría hallar la posición del player independientemente del angulo de la liana.

17
Cita de: knd144 en Junio 15, 2015, 07:21:28 PM
Concuerdo con lo que dice clamud, debes posicionar la view en un punto intermedio de ambos jugadores. Deberás estar calculando ese punto intermedio a cada paso.
Una forma sería:
Citar
intermedio=(jugador1.x + jugador2.x) / 2

La variable "intermedio" sería la coordenada x en la cual se posicionaría la vista; supongo que la altura del cuarto será el mismo.
También debes de poner la restricción a ambos jugadores de que no se puedan salir de la vista.
Ok, este codigo es mucho mejor, ahora la vista se mueve con los dos personajes ya que constantemente cambia la posicion del punto medio, pero tengo un problema al tratar de bloquear el paso al salir de la view...
todo funciona bien al moverse hacia el lado izquierdo pero hacia el lado derecho se bloquea el paso de los personajes en cierto punto y nisiquiera esta ningun personaje fuera de la view, no se porque..
Este es el código que puse en el evento step de un obj_control:
var coordenada;                               //guardara el punto medio
coordenada = (obj_Perro.x + obj_gato.x)/2;   //obtiene el punto medio
coordenada -= 320;                        //como la view mide 640 en x, le resto 320 a la coordenada para que los personajes aparezcan en el centro
view_xview[0]= coordenada;    //view es igual al punto medio menos 320 pixeles
view_yview[0]= 0;


Y en ambos personajes puse en los codigos de movimiento:
if (x+5*argument0 <= (view_xview[0] +32) || x+5*argument0 >= (view_wview[0] -32))    //(argument0 es: 1(derecha) -1(izquierda))
  {;}   //si el personaje esta a 32 pixeles de la view_xview o la view_wview no pasara nada
  else{   //si no, el personaje ejecutara su código de movimiento


No se si se vera pero en la imagen 1, es la imagen principal en la que comienza el juego(los personajes están centrados)
En la imagen 2 la view no se mueve si los personajes toman lados contrarios, y se bloquea su paso al tratar de hacerlo(un punto a favor).
En la imagen 3 esta el error, los personajes se bloquean al moverse a la derecha incluso estando estos cerca uno del otro, (esto no pasa hacia la izquierda)
18
Preguntas y respuestas / View Que siga a 2 jugadores
Junio 14, 2015, 10:48:06 PM
Estoy haciendo un juego para 2 jugadores tipo "Contra" y no he podido lograr que la vista siga a los 2 jugadores, es decir, el juego es de plataformas, y quiero que la vista no siga a los personajes si esta uno fuera de ella, quiero lograr ese efecto que si un personaje esta en un extremo y el otro en el otro extremo de la view, la camara no siga a ninguno hasta que uno de los dos se despegue y se acerque al otro, en pocas palabras que los personajes tienen que estar en la view, como si la condicion fuera que siga a ambos personajes...
He estado intentando con las funciones de la view, pero igual no obtengo un efecto deseado:

if (obj_Perro.x > view_xview[0] && obj_Perro.x < view_wview[0])  //si el perro esta en la view
{
  if (obj_gato.x > view_xview[0] && obj_gato.x < view_wview[0]){  //y el gato también
     view_object[0] = obj_Perro;     //la view seguira al perro
     }
  else
     view_object[0] = noone;   //si el perro esta a la vista y el gato no, entonces la view no seguirá a nadie
}
else
  view_object[0] = noone; //si el perro no esta ala vista, la view no seguirá  nadie
             

la view en room es de 640x480 al igual que el port.
Al ejecutar este código empieza bien, pero cuando el perro se sale del área en que apareció la view  ya no lo sigue, y lo que quiero es que mientras este el gato a la vista lo siga a donde sea.
usando port en lugar de view en el código pasa lo mismo.

¿En que estoy mal o que me hace falta agregar?
¿Hay otra forma de hacerlo mejor?

Gracias
19
Pero si es una sola instrucción, no son necesarios los llaves.
20
Bueno iré al  punto:
Un objeto clavo cae del techo cada ves que el personaje pasa por debajo de este, y se detiene en el objeto solido con el que colisiono, vibra unas cuantas veces se hace invisible y en 5 segundos se restaura en su posición de origen, cuando colisiona con objetos sólidos inertes no hay problemas con esto, pero con las plataformas(que también son solidas) que se mueven horizontalmente se producen dos errores..

El primero: si el personaje colisiona con el clavo en la plataforma, el clavo deja de vibrar hasta que el personaje se quite, en pocas palabras pausa la alarma que hace que vibre el clavo ???
El segundo: cuando el clavo se hace invisible (cuando su alpha es "0"), en 5 segundos se restaurara a su lugar de origen, pero si el personaje colisiona con el clavo mientras este es invisible, este se hace visible de nuevo ???

Ojo esto solo pasa en el objeto solido plataforma, con los sólidos inertes no hay problemas...

códigos del clavo:
End step
if (vspeed != 0){    //si el clavo esta callendo
   var bloque;
   bloque = collision_rectangle(x-4,y+16,x+4,y+16+vspeed,obj_ParentSolid,0,0);    //guarda la instancia solida con la que colisiono
   
   if (bloque && vspeed > 0){
      y = bloque.y-20;   //posiciona al clavo encima del solido
      vspeed = 0;
      gravity = 0;
      image_alpha = 0.5;
      alarm[0]=room_speed*1/3;
   }
}

alarma 0
if (comp != 100){   //comp en CREATE tien el valor de "0"
if (image_alpha == 0.2){
   image_alpha = 0.5;
   comp += 1;
   }
else if (image_alpha == 0.5){
   image_alpha = 0.2;
   comp += 1;
   }
if (comp <= 15)             //se repite mientras comp no alcance el valor de 16
   alarm[0]=room_speed*1/3;
else {                        //de lo contrario la variable de control toma el valor de 100
   image_alpha = 0;
   comp = 100;
   alarm[0]=room_speed*5;
}
}
else if (comp == 100){  //se restaura en pocas palabras el clavo
   x = xstart;
   y = ystart;
   image_alpha = 1;
   comp = 0;
}

step
var play, play2;
play = collision_rectangle(x-3,y+16,x+3,scr_Dictance(),obj_Perro,0,0);  //detecta colision con obj_perro entre la posición de origen y el primer solido hacia abajo
play2 = collision_rectangle(x-3,y+16,x+3,scr_Dictance(),obj_gato,0,0);    //lo mismo con el gato


if ((play || play2) && vspeed == 0){                    //establece cuando caerá la trampa (cuando pase nuestro personaje)
   vspeed = 1;
   gravity = 0.5;
   gravity_direction = 270;
}
////////////////////////////////////////////////////////////////////
if (collision_rectangle(x-5,y+16,x+5,y+20,obj_plataforma,0,0)){            //si la trampa colisiona con una plataforma
   var plata = collision_rectangle(x-5,y+16,x+5,y+20,obj_plataforma,0,0);
   if (plata){
   if (plata.dir == "Hor")   //el clavo se mueve junto con la plataforma                                                     
      x += 2;
   else if (plata.dir == "-Hor")   //igual aqui
      x -= 2;
      }
}

Tiene que ser un error de la alarma[0], pero no me lo explico, solo me pasa con las plataformas, y pues en estas solo tengo código de movimiento, y el personaje no tiene ningún código referente al clavo..
Cual podría ser el causante de este problema?
21
Cita de: penumbra en Abril 27, 2015, 05:37:42 AM
Por el código que pones, me parece que estás usando rectángulos de colisión muy grandes, por ejemplo, en el primer script, estás usando room_height*argument0 como la altura del rectángulo. Si otra cosa no se me escapa, eso es DEMASIADO

¿Por qué? Según el manual:

CitarIt should also be noted that the return value of the function can be the id of any one of the instances considered to be in collision.

Entonces, si el rectángulo definido en la función colision_rectangle contacta con más de un objeto hijo de obj_solidparent (como seria el caso, ya que es MUY GRANDE), el id devuelto puede ser el de CUALQUIERA de esos objetos, es decir, no hay ninguna garantía de que siempre devuelva el del objeto sólido más cercano a la trampa.

Yo recomendaría usar un método alternativo para activar la trampa y detectar el primer objeto sólido.
Gracias es bueno saberlo, por el momento lo dejare como lo tengo ya que es un error que se puede solucionar con tan solo poner el objeto con el que colisionara la trampa antes que los demás sólidos en el área de colisión, y pues no he tenido fallas desde entonces.
Ademas no he digerido muy bien este código como para probar otras formas, la función return aun se me complica un poco, en este caso me da a entender que reduce el area de colisión rectangular a la distancia entre el solido y la trampa, por lo que al final el valor del script seria la distancia existente entre el solido y la trampa o mas bien en este caso 32 pixeles mas hacia arriba del bloque de colisión.
Por lo que tengo unas dudas:
Por ejemplo ¿Al asignar dist = scr_Distance le asigno la coordenada bloque.y-32 a dist?.
¿Si este return no estuviera lo que se guardaría en esta variable seria la pura instancia del bloque?
¿El return en pocas palabras le da un nuevo valor al argument0, es decir, establece un nuevo punto partiendo de la variable bloque, por lo que al final el valor de scr_Distance seria este punto?
Probablemente sean preguntas muy básicas pero aun no domino muy bien los scripts.
22
Pues puedes hacerlo de esta forma en el step de tu personaje:

if (keyboard_check(vk_right)){
   x+=2;
}


if (keyboard_check(vk_left)){          //los movimientos hacia los lados tienen que ser lentos por obvias razones XD
   x-=2;
}
if (keyboard_check_pressed(vk_space)){  //puedes modificar la velocidad del salto a tu gusto
   vspeed = -8;
}


y en el evento end step
if (place_free(x,y+1)){      //si el personaje esta en el aire
  if (vspeed < 0){      //si esta saltando se activa la gravedad para que se frene
  gravity = 0.2;
  gravity_direction = 270;}
  else vspeed = 2;        //de lo contrario si estas cayendo estableces una velocidad fija de caida
}


Puedes modificar las constantes a como se te acomode mejor a lo que quieres.
En el efecto de inestabilidad se me ocurre que modifiques el angulo de tu sprite cuando este en el aire con image_angle y tratar de darle el efecto deseado o bien haciendo un sprite para este.
Probablemente existen mejores formas de lograr un efecto mucho mas pulido, yo solo te doy una manera sencilla.
Saludos...
23
Viendo los vídeos de Jucarave me surgió un pequeño problema y aunque lo resolví, no he logrado entender el porque de este.
Verán estoy en la parte en la que unos picos(obj_trampa) caen de arriba si mi personaje pasa por debajo de esté y colisionan con el primer objeto solido que se encuentra en su camino, para esto use un pequeño script que verifica si hay un objeto solido por debajo de esté:
var bloque;
bloque = collision_rectangle(x-14,y+16,x+14,room_height*argument0,obj_solidparent,0,0);
if (bloque){return bloque.y-32;} //si hay objeto solido debajo

Ahora, este código se supone que guardara la id del primer objeto solido
que se encuentra de arriba hacia abajo, como tambien la distancia existente entre la trampa y el solido.
Luego en el obj_trampa en step guardo la distancia(el script) en una variable:
dist = scr_Distance(1);
Acto seguido:
var play;
play = collision_rectangle(x-14,y+16,x+14,dist,obj_Hero,0,0);

se verificara si mi personaje esta por debajo de la trampa en el rectángulo de colisión acordado.
(dist = distancia entre la trampa y el primer objeto solido de abajo)
Ahora el problema que tengo es que el código funciona bien a la primera, pero si pongo un solido mas arriba, la trampa sigue cayendo en el mismo cuadro, ahora si borro este cuadro (el que esta mas hacia abajo)y lo vuelvo a poner el código se respeta y cae en el cuadro de arriba, en pocas palabras no importa cuantos sólidos estén por debajo de la trampa siempre va a caer sobre el solido mas viejo, es decir, sobre el que puse primero antes que todos en esa área de colisión.
Entonces esa es mi duda ¿la collision_rectangle no debería de guardar a la primera id que se encuentra en el camino?
Espero que halla sido entendible mi duda.
24
He instalado y borrado 4 veces la versión gratis de game maker studio, porque siempre me sale algo como esto...
The following modules could not be downloaded:
Windows8
Mac"
siempre que le doy a aceptar se carga de nuevo un pequeño cuadro y me devuelve el mismo mensaje, de tal modo que tengo que iniciar el administrador de tareas para finalizar proceso.
Tengo a parte el game maker 8.1, no se si tenga algo que ver con el problema.
Decidí descargar game maker studio porque obtuve un código de licencia profesional y me dijeron que solo funcionaria con el game maker studio, pero la verdad es que estoy teniendo problemas con esto, cuando le doy a update professional now se abre una pagina que no responde y luego se cierra.
No se si el game maker estará dañado o algo si lo baje de la pagina oficial?
25
Preguntas y respuestas / Re:game_restart (duda)
Marzo 27, 2015, 10:31:24 PM
Osea que timeline_delete borra el timeline permanentemente?
26
Preguntas y respuestas / game_restart (duda)
Marzo 27, 2015, 05:01:19 AM
Tengo una duda con esta función, hace poco tuve problemas con el uso de los timeline, porque luego de pasar un nivel borraba el timeline y una vez que me acaba el juego usaba game_restart para reiniciar el juego, pero si lo volvía a jugar, me marcaba que el timeline no existia, entonces me entro la duda, pues yo creía que esta función reiniciaba todos los datos por defecto y el timeline tendría que volver a existir pero no fue asi...

Ahora me paso lo mismo, pero con los sonidos, yo en el evento game start puse: sound_loop(snd_musica);
y todo bien pero al acabarme el juego vuelvo a usar game_restart para reiniciar el juego y ahora se escucha 2 veces la misma música en diferente tiempo.
?
?
27
Preguntas y respuestas / Re:LIMITE DE TECLAS?
Marzo 07, 2015, 12:34:09 AM
intenta poner una condición que evalué que se estén presionando las 3 teclas
28
En el evento step:
if (image_index = 7){
  image_index = 8;
}
if (image_index = 8){
  image_sprite = 7;
}
if (image_index != 7 && image_index != 8){
  image_speed = 1;
}

Por ejemplo tengo un sprite de 9 frames, en la que los primeros 7 se reproducirán y después el ciclo se hará infinito entre el frame 7 y 8.
Pero ¿Como le hago para establecer un tiempo de cambio?
Porque al llegar a los frames 7 y 8, todo pasa tan rápido que solo se aprecia el frame 7.
Intente con image_speed, pero hizo que se repitieran de nuevo todos los frames del sprite.
Y a mi lo que me interesa es que los primeros frames se reproduzcan solo una vez, y que luego solo cambie del frame 8 al 9 y viceversa, a una velocidad que se puedan apreciar ambas.
No se si me explique?
29
Hola, tengo un objeto al que le he agregado un path en el evento create:
path_start(path0,4,2,1);
Pero quisiera que cuando el objeto halla recibido cierto daño, cambie de path.
Es decir, mi objeto tiene 200 de vida, y quiero que cuando la vida se menor o igual a 100, se detenga el path principal, e inicie un nuevo path.
intente hacer esto en el evento step, pero no me sirvio debido a que este evento se repite indefinidamente y el path nunca comenzaria.
¿Hay una forma de hacer un cambio de path en un objeto?. Gracias!
30
Si, ya habia intentado cambiarlas a ".y" pero me daba el mismo resultado.
Supongo que las ultimas 2 estructuras no se pueden cumplir, ya que siempre una de las dos primeras va a ser verdadera, creo..
En fin solo tengo una ultima duda:
¿el ".y" y el ".x" toman como referencia el origen del objeto?