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.

Temas - Dublan

21
Hola de nuevo makeros!!

En mi juego, estoy creando una IA para que funcione como un bot, es decir, no como enemigo.

Los enemigos son los "mineros". El bot tiene que recoger oro, y cuando estén los mineros cerca de él, pues que intente escabullirse de ellos. Para ello he creado el siguiente código, con la intención de que se esconda detrás de muros si existen y si no, pues que vaya donde está el player, pero evitando en el camino a los mineros (suele haber en la room más de uno):


Step event


if distance_to_object(obj_minero_AI)<=128{target=obj_minero_AI}
else
if distance_to_object(obj_minero_AD)<=128{target=obj_minero_AD}
else
if distance_to_object(obj_minero_ArD)<=128{target=obj_minero_ArD}
else
if distance_to_object(obj_minero)<=128{target=obj_minero}
else
if distance_to_object(obj_minero_creado)<=128{target=obj_minero_creado}
else
target=-1
   
    if target=-1{scr_buscar_tesoro()}//Es el script para buscar oro
    else
    {
       
        if instance_exists(obj_muro)
        {
        var1 = instance_nearest(x,y,obj_muro)
        var2 = point_direction(target.x,target.y,var1.x+32,var1.y+32)
       
            mp_potential_step_object(var1.x+lengthdir_x(64,var2),var1.y+lengthdir_y(64,var2),8,obj_muro)//Para esconderse detras de muros
            mp_potential_step_object(var1.x+lengthdir_x(64,var2),var1.y+lengthdir_y(64,var2),0.1,target)//Si ademas le esta siguiendo el minero, para huir de el
                         
         }
         else
         {
           
                var1 = instance_nearest(x,y,obj_player)//Ir a donde está el player
                var2 = point_direction(target.x,target.y,var1.x+16,var1.y+16)
                    if room=room_level2
                    {
                    mp_potential_step_object(var1.x+lengthdir_x(64,var2),var1.y+lengthdir_y(64,var2),0.1,obj_morir)//Evitar el objeto morir (acantilado)
                    mp_potential_step_object(var1.x+lengthdir_x(64,var2),var1.y+lengthdir_y(64,var2),0.1,target)//Evitar ademas lo mineros
                    }
                    if room=room_level5
                    {
                    mp_potential_step_object(var1.x+lengthdir_x(64,var2),var1.y+lengthdir_y(64,var2),0.1,obj_morir_lvl5)//Evitar el objeto morir (acantilado_1)
                    mp_potential_step_object(var1.x+lengthdir_x(64,var2),var1.y+lengthdir_y(64,var2),0.1,target)//Evitar ademas lo minero
                    }
                    else{mp_potential_step_object(var1.x+lengthdir_x(64,var2),var1.y+lengthdir_y(64,var2),0.1,target)}//Evitar a los mineros
               
                }
        }


Con este código, hay veces que el bot hace lo que debería, pero hay veces que se atasca cerca de los muros y no hace nada.

¿Qué estoy haciendo mal?

Grax!!!
22
Hola Makeros,

Llevo un rato dándole vueltas a por qué este código no funciona, pero no lo entiendo. Haciendo pruebas, si quito el alarm[2]=90 el enemigo se mueve pero cambiando el random en cada step. Lo que yo quiero es que cambie la dirección cada 90 steps. Este es el código que tengo en el step event:

Step event


if alarm[2]==-1
                    {                           
                    var x1=irandom_range(0,1280)
                    var y1=irandom_range(0,768)
                    if room!=room_level2{mp_potential_step(x1,y1, 10, false)}
                    else{mp_potential_step_object(x1,y1, 10, obj_morir)}
                    alarm[2]=90
                    }


Alarm 2
           
                    var x1=irandom_range(0,1280)
                    var y1=irandom_range(0,768)
                    if room!=room_level2{mp_potential_step(x1,y1, 10, false)}
                    else{mp_potential_step_object(x1,y1, 10, obj_morir)}
                    alarm[2]=90


¿¿¿Que estoy haciendo mal????

GRACIAS!
23
Hola Makeros,

A ver si me podéis ayudar a identificar el id de objetos creados.

El objetivo de este código es crear un objeto "muro" cuando el player pulsa un botón y que este muro tenga el mismo ángulo al que está mirando el player. Para ello, tengo puesto el código:

Step event

//Angulo 180
    if (obj_player.image_angle = 180 and position_empty(obj_player.x, obj_player.y+64)and position_empty(obj_player.x+32, obj_player.y+64)and position_empty(obj_player.x-32, obj_player.y+64))
                {
                muro_creado=instance_create (obj_player.x, obj_player.y+64, obj_muro)
                image_index-=1
                sprite_index=spr_boton_muro_Rec1
                image_index=0
               
                }
    //Angulo 225         
    if (obj_player.image_angle = 225 and position_empty(obj_player.x+32, obj_player.y+64)and position_empty(obj_player.x+64, obj_player.y+64)and position_empty(obj_player.x+96, obj_player.y+64))
                {
                muro_creado=instance_create (obj_player.x+64, obj_player.y+64, obj_muro)
                image_index-=1
                sprite_index=spr_boton_muro_Rec1
                image_index=0
                }
               
                with(muro_creado)
                    {
                    image_index=0
                    image_angle=obj_player.image_angle
                    sprite_index=spr_muro
                    }
                    }


El problema es que si creo más de un objeto muro, todos los ya creados cambian su angle al último creado. Esto ocurre porque no tengo bien seleccionado el id de los objetos, pero no sé como podría seleccionar el id recién creado y cuando cree otro objeto, usar solo el nuevo id para cambiar su ángulo. ¿qué estoy haciendo mal?

GRAXX!!
24
Preguntas y respuestas / Anuncio Intersticial
Mayo 24, 2017, 08:32:27 PM
Hola makeros!

A ver si me podéis ayudar con algo que no logro solucionar en android.

Tengo el tipico boton de premio, que despues de que una cuenta atras llegue a 0, si le das click te da un premio y luego sale el anuncio intersticial.

Pues bien, el código que tengo funciona perfectamente. Al darle click se ve el anuncio. El problema viene en que tengo 2 de esos botones en la room, y cuando para ambos botones la cuenta atras ha terminado y voy a darles para ver el anuncio, veo bien 1 anuncion pero el otro no me lo llega a mostrar. ¿Sabeis si existe alguna limitacion de tiempo por parte de google play para mostrar 2 anuncios seguidos?

GRAX!
25
Preguntas y respuestas / Liberar RAM-Particulas
Mayo 07, 2017, 10:02:32 PM
Hola Makeros!

Tras mucho investigar, he detectado qué objeto me saca del juego android tras estar usándolo por un tiempo, y es uno que genera partículas para imitar el fuego de una antorcha. Mirando en windows, he visto que la memoria se va a las nubes conforme pasa el tiempo. Este es el código que uso:

Create event

//Particle System
partFire_sys = part_system_create();

//Fire Particle
partFire = part_type_create();
part_type_sprite(partFire,pt_shape_pixel,0,0,1);
part_type_size(partFire,1,2,0,0);
part_type_color2(partFire,c_orange,c_red);
part_type_alpha3(partFire,1,1,0);
part_type_speed(partFire,4,10,0,0);
part_type_direction(partFire,85,95,0,5);
part_type_orientation(partFire,0,359,0,0,0);
part_type_blend(partFire,1);
part_type_life(partFire,20,40);

//Cinder Particle
partCinder = part_type_create();
part_type_shape(partCinder,pt_shape_flare);
part_type_size(partCinder,0.5,1,0,0);
part_type_color2(partCinder,c_orange,c_red);
part_type_alpha3(partCinder,1,1,0);
part_type_speed(partCinder,1,2,0,0);
part_type_direction(partCinder,85,95,0,0);
part_type_blend(partCinder,1);
part_type_life(partCinder,240,320);

//Particle Emitter
partFire_emit = part_emitter_create(partFire_sys);
part_emitter_region(partFire_sys,partFire_emit,x-10,x+10,y-2,y+2,ps_shape_ellipse,ps_distr_linear);


Step event

///particulas + aura
part_emitter_burst(partFire_sys,partFire_emit,partFire,5);
part_emitter_burst(partFire_sys,partFire_emit,partCinder,-10);


Room End event

///Destruir particulas
part_emitter_destroy_all(partFire_sys);
part_system_destroy(partFire_sys);
part_particles_clear(partFire_sys);
instance_destroy()


¿Cómo podría reducir el consumo de memoria con este código o similar? ¿Existe alguna función para ver el consumo de memoria en android?

PD: en el objeto controlador además tengo puesto en el room star el draw_texture_flush().

Mil graciasl
26
General / Server hispano sobre videojuegos
Mayo 02, 2017, 11:31:34 PM
Hola makeros!

Solamente comentaros que hoy descubrí esta página www.gamedev.es, es un server en directo donde charlar sobre videojuegos, Game makeros, etc.

Os recomiendo uniros, esta bastante animado!!
27
Hola Makeros!

En android, para el chat y textbox, uso el get_string_async de la siguiente manera:

Left released event

msg = get_string_async("CHAT","");
click_chat_guar=1


Dialog event

if click_chat_guar==1
{
var i_d = ds_map_find_value(async_load, "id");
if i_d == msg
    {
    if ds_map_find_value(async_load, "status")
       {
       if ds_map_find_value(async_load, "result") != ""
          {
          global.chat = ds_map_find_value(async_load, "result");
          gms_chat(global.chat,c_orange)//Funcion de game maker server para el chat
          }
       }
    }
click_chat_guar=0
}


El código funciona bien, pero en cuanto uso ese objeto varias veces, o varios objetos con código similar en la misma room, el juego se empieza a ralentizar y se acaba saliendo del juego.

He probado a utilizar alguna extension del marketplace y funciona bien, aunque no me termina de gustar. Con esto quiero decir, que el problema está en el código y no en game maker server.

¿Qué puede estar pasándo?  :'(

GRAX