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 - Tylag

1
Preguntas y respuestas / Re:colisión con la pista
Agosto 09, 2020, 05:10:53 PM
Hola, te cambio un poco el código que has puesto y te comento

[gml]

//evento step
if (var_movimiento) {
   if keyboard_check(vk_left) {
      hspeed = -8
      image_angle=180;
   }
   if keyboard_check(vk_right) {
      hspeed = 8;
      image_angle = 0
   }
   if keyboard_check(vk_up) {
      vspeed = -8
      image_angle=90;
   }
   if keyboard_check(vk_down) {
      vspeed = 8
      image_angle=270;
   }
   if keyboard_check(vk_nokey) {
      vspeed = 0
      hspeed = 0;
   }

}
if (!place_meeting(x,y,rainbow_road_colision)) {
   hspeed=0;
   vspeed=0;
   var_movimiento = false;
}
[/gml]

El problema estaba en que no estabas incluyendo bien las lineas de código dentro de los if statement, si no encapsulas todo  con corchetes {}  el if cogera unicamente la siguiente linea a continuacion.
El resto de lineas se estaban ejecutando siempre.

Edit: Te dejo por aqui otra version del movimiento de tu nave con el código más compacto, un saludo!

[gml]
hspeed = place_meeting(x,y,rainbow_road_colision) ? (keyboard_check(vk_right) - keyboard_check(vk_left))*8 : 0;
vspeed = place_meeting(x,y,rainbow_road_colision) ? (keyboard_check(vk_down) - keyboard_check(vk_up))*8 : 0;
if (keyboard_check(vk_anykey) && place_meeting(x,y,rainbow_road_colision))
image_angle = point_direction(x,y,x+hspeed,y+vspeed);

[/gml]
2
Prueba con algo asi:

[gml]
//Evento Draw de la vida
if (view_current ==0)
   //Dibujar la vida
[/gml]

En lugar de 0 tendras que poner el numero de vista en el quieras mostrar la vida.
Un saludo.
3
Preguntas y respuestas / Re:variables con memoria
Agosto 09, 2020, 09:26:49 AM
Buenas,
Lo primero de todo ten cuidado con llamar a tus variables igual que algunas palabras reservadas del Game Maker, en este caso score es una variable built-in, si intentas llamar a tu variable de esta forma: global.score ,al intentar compilar el proyecto deberia darte un error.

Te recomiendo no usar una variable global por cada score que quieras guardar, yo usaría un array, lista, mapa, lo que sea para almacenarlo. en lugar de tener global.score_congelado, global.score_congelado2, global.score_congelado3, etc, etc...

Algo así:


[gml]
//CREATE
global.my_score = 0;
global.scores_congelados = ds_list_create();
[/gml]


[gml]
//STEP
if (global.my_score >=500 && is_undefined(global.scores_congelados [| 0])) {
   ds_list_add(global.scores_congelados , 500);
}

if (global.my_score >=700 && is_undefined(global.scores_congelados [| 1])) {
   ds_list_add(global.scores_congelados , 700);
}
[/gml]

De este modo tendrias almacenado en la posicion 0 y 1 de tu lista los valores 500 y 700, pudiendo ampliar la lista lo que quieras.
Luego si quieres mostrar u operar con estos valores solo tendrias que acceder a la posicion de la lista que quieras.

Por cierto, ¿puede ser que no te estuviese funcionando porque estabas pisando continuamente el valor de global.score_congelado?
Si tenías algo así:

[gml]
if (global.score >500)
global.score_congelado= global.score;
[/gml]

global.score_congelado se estaría actualizando constantemente al valor de global.score

Espero que te sirva, un saludo.

4
Preguntas y respuestas / Re:colisión con la pista
Agosto 09, 2020, 08:40:32 AM
Hmmm, ¿puede que estes volviendo a actualizar el hspeed/vspeed aunque lo hayas puesto a valor 0?
Es decir si tu código es algo así

[gml]
if (!place_meeting(x,y,obj_pista)) {
hspeed = 0;
}
if keyboard_check(vk_left) hspeed = -2;
if keyboard_check(vk_right) hspeed = 2;
[/gml]

Tu hspeed volverá a tomar valores independientemente de si toca la pista o no, tendrás que meterle una condicion extra a tu movimiento de que solo se realice si está tocando la pista.
[gml]
hspeed = place_meeting(x,y,obj_pista) ? (keyboard_check(vk_right) - keyboard_check(vk_left))*tuvelocidadhorizontal : 0
[/gml]
Algo parecido a esto, tendrías que permitir el movimiento unicamente si la nave toca la pista.

Hay muchas otras formas de hacerlo, podrias meter una variable boolean que permita el movimiento pero se actualice a false al no tocar la pista y bloquee el movimiento de la nave, por ejemplo ( no lo veo lo más elegante pero valdría)

[gml]
//Esto en el create
var_movimiento = true;

//Esto ya en el step
if (var_movimiento) {
if keyboard_check(vk_left) hspeed = -2;
if keyboard_check(vk_right) hspeed = 2;
}

if (!place_meeting(x,y,obj_pista)) {
hspeed = 0;
var_movimiento = false
}
[/gml]

Espero que puedas solucionarlo amigo
5
Preguntas y respuestas / Re:colisión con la pista
Agosto 08, 2020, 05:30:18 PM
Hola,
No, doble slash te permite poner comentarios a tu codigo (muy recomendable tener el codigo bien documentado) en este caso dentro del if statement tendrias que meter la logica para que la nave se pare ( esto ya dependiendo de como lo vayas a querer implementar, si se para en seco, si pierde velocidad gradualmente, etc...)

6
Preguntas y respuestas / Re:colisión con la pista
Agosto 08, 2020, 04:26:15 PM
Hola,
Si optas por tu idea de que la pista sea un objeto puedes hacerlo con place_meeting(), esto iria en tu objeto nave:
[gml]
if (!place_meeting(x,y,obj_pista)) {
// Ejecutar codigo de pararse
}
[/gml]

De todos modos tienes muchas maneras de hacerlo, si la pista está estática en un punto y es rectangular puedes usar point_in_rectangle ( https://docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/collisions/point_in_rectangle.html ) o rectangle_in_rectangle ( https://docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/collisions/rectangle_in_rectangle.html ) si quieres que use todo el bounding box o el alto/ancho del sprite de la nave.

Edit: tambien podrías usar collision_rectangle
https://docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/collisions/collision_rectangle.html


[gml]if (!collision_rectangle( x superior izda de tu pista, y superior izda de tu pista, x inferior derecha de tu pista, y inferior derecha de tu pista, obj_nave, 0, 0)) {
// Ejecutar codigo de pararse
}[/gml]


Un saludo.
7
Hola,
Para tu caso una posible solución es usar un shader, hay un shader gartuito en el market de yoyogames que te permite configurar el hue de sprites/backgrounds, etc.. https://marketplace.yoyogames.com/assets/2482/hue-shader

Por lo contrario si no quieres complicarte con shaders o usas una version antigua otra posible opción es usar:

[gml]image_blend = make_color_hsv(0,0,value);[/gml]
http://docs.yoyogames.com/source/dadiospice/002_reference/drawing/colour%20and%20blending/make_colour_hsv.html

En este caso el 0,0,0 (Tono, Saturacion, Valor) corresponde al negro, si juegas con el value puedes hacer que vaya transicionando en la escala de grises.
Edit: el valor tendras que moverlo entre el 0 y el 255.
El resultado seria algo asi:


Hay otras opciones un poco mas espartanas, como dibujar encima del propio sprite uno igual e irle sumando y bajando el alfa, etc.. pero no lo veo muy aconsejable.

Un saludo!