Noticias

¡Ayuda a la Comunidad GM, haz una donación!

* 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!.

Mostrar Mensajes

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


Mensajes - dixon

Páginas: 1 2 3
1
Desarrollo de Scripts / ajuste_canvas_html5(width,height);
« en: Junio 24, 2021, 06:28:11 am »
Nombre del autor : Reyes Dávila.
Breve descripción de su función : Ajusta el canvas (el área de juego) en exploradores web, manteniendo la proporcion aunque se cambie la orientacion del dispositivo movil.
Versión GM utilizada : Game Maker studio.

Código del script:
ajuste_canvas_html5(width,height);




///ajuste_canvas_html5(width,height);
//Este script deberá ser llamado "ajuste_canvas_html5"
//Colocar en evento create: ajuste_canvas_html5("create");
//Colocar en evento step : ajuste_canvas_html5("step");

if(argument0="create")
{
    ///////////////////////////////////Datos a modificar
    Ancho00=room_width;
    Alto00=room_height;
    intervalo_ajuste=20;
    //////////////////////////Fin de datos a modificar

    ajuste_canvas_html5_step_time=0;
    proporcion_browser_previa=0;
    modulo="otro";
    if(string_length(string(self))>2){modulo="html5";alarm[0]=20};
}

if(argument0="step")
{
    ajuste_canvas_html5_step_time+=1;
    if(ajuste_canvas_html5_step_time=intervalo_ajuste)
    {
        ajuste_canvas_html5_step_time=0;
       
        proporcion00=Ancho00/Alto00;
        proporcion_browser00=browser_width/browser_height;

        if(modulo="html5")
        {
            if(proporcion_browser00!=proporcion_browser_previa)
            {
                anchox100=90*browser_width/100;
                altoy100=90*browser_height/100;
                altoy00=anchox100/proporcion00;

                while(altoy00>altoy100)
                {
                    anchox100-=1;
                    altoy00=anchox100/proporcion00;
                }

                window_set_size(anchox100,altoy00);
                window_set_position((browser_width-anchox100)/2,0);

            }//fin if(proporcion_browser00!=proporcion_browser_previa)

            proporcion_browser_previa=proporcion00;
        }
    }
}









Modo de uso

1. Crear un script llamado: ajuste_canvas_html5 con el código anterior.

2. En el evento create colocar:
 ajuste_canvas_html5("create");

3. En el evento step colocar:
 ajuste_canvas_html5("step");

2
Preguntas y respuestas / Re: camara estilo mario bros
« en: Mayo 31, 2021, 05:54:40 am »
Hola fedex2020.

1.   La cámara se llama view.
2.   La view tiene una posición x en la room, la cual se almacena en una variable o función.
3.   Creo que la función que almacena la posición de la view se llama view_xview[0...7].
4.   En otras versiones de gmk la función se llama view_left[0..7].
5.   Si tienes una sola view, el índice de la view es cero, ejemplo: view_xview[0].
6.   Existen varios métodos para que la view siga a un objeto.
7.   Uno de tantos métodos permite que la view no se devuelva.
8.   Los métodos dependen del ingenio del programador.
9.   Los métodos no son más que scripts donde se combinan las funciones de la view.
10.   No necesariamente tienes que comprender todo lo que se ha dicho.


Recomendaciones para lograr que una view siga a un objeto y no se devuelva.

1.   Especifica tu versión de game maker.
2.   Crea una view con un tamaño adecuado en la view.
3.   Importante: No le actives el seguidor automático de objeto.
4.   En el objeto coloca el siguiente script, en un evento step o paso.

Limite=100;
while(x>(view_xview[0]+limite)){view_xview[0]+=1}

5.   La variable limite indica la posición máxima que debe alcanzar el objeto para que se mueva la view.

6.   En game maker 4 y 5 se usaría:

Limite=100;
while(x>(view_left [0]+limite)){ view_left [0]+=1}

   Suerte, explora y has pruebas, hasta que obtengas lo que necesites.

3
Preguntas y respuestas / Re: tengo un error al hacer mi enemigo
« en: Mayo 24, 2021, 01:32:18 am »
Jajajaja, no te preocupes.

Creo que era más fácil que me pasaras un editable jejejeje., pero no tengo game maker studio disponible, solo tengo una pc vieja que no sé si valla a soportarlo.

Estoy en tu web
https://bird-sick-games.blogspot.com/

4
Preguntas y respuestas / Re: Fuentes Borrosas
« en: Mayo 18, 2021, 08:22:28 pm »
Hola, saludos a todos.

A mí pe pasó algo como eso en game maker studio al exportar a html5, aún no he encontrado la solución ideal, pero hice varios experimentos e inclusive traté de crear mi propia fuente. Estos son algunos de mis hallazgos:

1.   Los píxeles de distorcionan cuando la view o room es menor a 256x256.
2.   Al parecer game maker hace una escala automática cuando se exporta en algunas plataformas lo que hace que desaparezcan algunos píxeles.
3.   El problema persiste solo al esportar en html5 y no present problemas al exportar a Windows.
4.   Esto afecta a imágenes y textos, pero gravemente a textos.
5.   Hay que experimentar con texto grueso, oscurecido con la función “negrita”, Quizás se corrija un poco la falla.
6.   Las imágenes lograron corregirse al ser aumentadas al doble es decir que si median 256x256 ahora miden 512x512, lo que cada pixel está representado con 4 píxeles, esto evitará que todos los pixeles sean borrados.



5
Hola, saludos

Bueno, recomiendo:

1. Que ambos usen la 1.
2. Que no se exijan mucho.
3. Que se repartan los niveles.
4. Que creen niveles identificando correctamente los sprites y objetos.
5. Que cada nivel sea absolutamente independiente del juego para evitar una confusión de objetos.
6. Primer paso: has un nivel, y dile a tu camarada que haga otro, luego une todo poco a poco.
7.Cada nivel debe ser un proyecto independiente
8. Cada nivel debe entregarse en estado funcional
9. Previamente definan la plataforma final: windows
10. Acepten las imperfecciones del otro compañero. No piensen en proyectos perfectos.


Un ejemplo:

Decido crear un nivel 1 para un juego x, entonces produzco un editable completo con solo el nivel 1 y lo mando a integrar al juego final. El encargado de integrar (que puede ser cualquiera porque todos tendrán una copia de cana nivel) integrara todo y luego creara una room dedicada a la portada.


Consejo: preferiblemente cada nivel debe estar compuesto por una sola room. Y si su intención es crear algo parecido a un rpg hay si van a tener problemas porque tendrán que organizarse muy bien para que todo encaje sin dificultades.

6
Preguntas y respuestas / Re:SCRIPT en 2.3 version
« en: Enero 21, 2021, 01:53:53 pm »
Hola, Buenos dias, saludos. Espero que Estes bien.

Si puedes envia una copia del manual of line que trade ESA version. Deberia estar end LA carpeta de instalacion y es de tipo .HTML. So pieces publica LA carpeta complete para verla y analizarla. No puedo her el nuevo manual end LA version online.

7
Lo que puedo imaginar es que no se está ejecutando instance_destroy(); porque como es una copia del objeto no está mandándose a destruir ella misma sino que está mandando a destruir al objeto original.

Puedes intentar cambiando esa fracción de código agragandole id.
 id.instance_destroy();
a ver si no te da error.
o con with
with (id){instance_destroy()}
queria algo asi

Cambiando a id.instance_destroy()
/// @description  preciona enter y cambia de dialogo
if keyboard_check_pressed(ord("X")) and indice <= referencia.final{
   if (mensaje == referencia.msg[indice]){
       indice += 1;
       global.mensaje += 1;
       if (indice > referencia.final) { obj_prota.stop = false; id.instance_destroy(); }
       mensaje = "";
       }else{
             mensaje = referencia.msg[indice];
       }
}

///coloca el cuadro de texto en la parte inferior de la pantalla
x = __view_get( e__VW.XView, 0 )+0;
y = __view_get( e__VW.YView, 0 )+176;


Y con with (id){instance_destroy()}

/// @description  preciona enter y cambia de dialogo
if keyboard_check_pressed(ord("X")) and indice <= referencia.final{
   if (mensaje == referencia.msg[indice]){
       indice += 1;
       global.mensaje += 1;
       if (indice > referencia.final) { obj_prota.stop = false; with(id){instance_destroy();} }
       mensaje = "";
       }else{
             mensaje = referencia.msg[indice];
       }
}

///coloca el cuadro de texto en la parte inferior de la pantalla
x = __view_get( e__VW.XView, 0 )+0;
y = __view_get( e__VW.YView, 0 )+176;

Tienes estos dos códigos para seguir probando.   
De no funcionar ahora emplea  esto: otro show_message("") de esta manera
show_message("si se ejecuta y obj_prota.stop es: "+string(obj_prota.stop))

Recueda que estamos utilizando el código original.
/// @description  preciona enter y cambia de dialogo
if keyboard_check_pressed(ord("X")) and indice <= referencia.final{
   if (mensaje == referencia.msg[indice]){
       indice += 1;
       global.mensaje += 1;
       if (indice > referencia.final) { obj_prota.stop = false;  instance_destroy(); show_message("si se ejecuta y obj_prota.stop es: "+string(obj_prota.stop)) }
       mensaje = "";
       }else{
             mensaje = referencia.msg[indice];
       }
}

///coloca el cuadro de texto en la parte inferior de la pantalla
x = __view_get( e__VW.XView, 0 )+0;
y = __view_get( e__VW.YView, 0 )+176;


Si ejecutas el ultimo código podrás tener dos respuestas:

1.   Que si aparezca el mensaje "si estas ejecutando y prota stop es: true o false"
2.   Y el otro caso que no te aparezca el mensaje y se vuelva a iniciar el mensaje.
Ahora

1.Si te apare el mensaje: el código  anterior esta bueno y instance_destroy(); no se esta ejecutando adecuadamente.
2. Si no te aparece el mensaje entonces el código anterior original debe ser cambiado denuevo.
Vamos a intentar esta otra cosa si aparece el mensaje, pues se supone que no se esta ejecutando el instance_destroy();
Vamos a introducir instance_destroy() en otro momento, cuando el índice sea 5, de la siguiente manera.

/// @description  preciona enter y cambia de dialogo
if keyboard_check_pressed(ord("X")) and indice <= referencia.final{
   if (mensaje == referencia.msg[indice]){
       indice += 1;
       global.mensaje += 1;
    if(indice = 5)
    {
    show_message("índice: "+string(indice)+"; si se ejecuta la destruccion")
    instance_destroy()
    }
       if (indice > referencia.final) { obj_prota.stop = false; id.instance_destroy(); }
       mensaje = "";
       }else{
             mensaje = referencia.msg[indice];
       }
}

///coloca el cuadro de texto en la parte inferior de la pantalla
x = __view_get( e__VW.XView, 0 )+0;
y = __view_get( e__VW.YView, 0 )+176;

Si aparece el mensaje y no se destruye la instancia, tienes que colocar instance_destroy() en esta otra posición para verificar que no se destruye.

/// @description  preciona enter y cambia de dialogo
if keyboard_check_pressed(ord("X")) and indice <= referencia.final{
   if (mensaje == referencia.msg[indice]){
    instance_destroy()//aqui es colocado instance destroy
       indice += 1;
       global.mensaje += 1;
       if (indice > referencia.final) { obj_prota.stop = false; instance_destroy(); }
       mensaje = "";
       }else{
             mensaje = referencia.msg[indice];
       }
}

///coloca el cuadro de texto en la parte inferior de la pantalla
x = __view_get( e__VW.XView, 0 )+0;
y = __view_get( e__VW.YView, 0 )+176;

Si se destruye la instancia, el problema puede estar en otro código, pero si no se destruye entonces simplemente no será destruida nunca de esa manera.

Tienes que tomar notas de todos estos experimentos para que me indiques como va evolucionando el problema. De esta forma podré entender mejo el sistema y lograremos hallar la solución, pero toma notas, muchos datos e informa paso a paso.

Si de ningún modo es destruida la instancia, entonces tendras que destruirla desde otro objeto, mandando su id y la orden de destrucción en una variable global, el objeto que la destruirá debe recibir la id y la orden de destrucción y ejecutar la destrucción de la instancia por medio de su  id.

¿Por qué puede estar sucediendo esto? A medida que game maker ha evolucionado ha aparecido errores e incongruencias en los códigos, no hay que asombrarse cuando se presentan estos errores, muchas veces pueden aparecer, ya he visto problemas similares entre códigos que parecen buenos pero que game maker no puede interpretar correctamente, estos casos los he visto cuando exporto a html5 con game maker html5 o studio 1.4. hay otros errores mas fuertes que no te permiten seguir ejecutando el juego y no te reportan el error, por lo tanto te dejan a ciegas y no se puede entender fácilmente lo que esta pasando. Por lo tanto para estos y los casos más difíciles hay que utilizar mucho el show_message(“”) e ir verificando los valores de las variables una por una para poder entender el origen del problema, y aun asi muchas veces he encontrado que el origen se escapa de mis manos y pertenece a un problema de game maker, entonces no me ha quedado otra que emplear otros codigos que logren el mismo objetivo.


8
Hola

Creo engender que el objeto original textbox no esta fallando, solo esta fallando una copia que has creado del mismo. ???

Los cambis entonces se los haras a LA copia y no al original. ESO es lo que entiendo.

Ai LA instancia debe destruirse cuando el induce sea mayor que LA referencia entonces pieces extraer ESE pequeño codio y hacerlo independiente del conjunto completo.. Dejame explicar..

1. LA instancia debe destruirse cuando el indice sea mayor a la referencia final.
2. Eso es esto: if (indice > referencia.final) { obj_prota.stop = false; instance_destroy(); }
3. El indice no esta llegando a ser superior o no she esta ejecutando el codigo completo.
4. ESA linear de codigo puede estar sola end el even to step y no deberia afectar end Nada.
5. Es decir fuera del conjunto del codigo.

Vamos a USAR el show_message("indice: "+string()) para que nos indique si el indice esta llegando a see igual a la referencia

 /// @description  preciona enter y cambia de dialogo
if keyboard_check_pressed(ord("X")) and indice <= referencia.final+1{
   if (mensaje == referencia.msg[indice]){
       indice += 1;
       global.mensaje += 1;
if (indice = referencia.final) {show_message("indice: "+string(indice))}
       if (indice > referencia.final-1) { obj_prota.stop = false; instance_destroy(); }
       mensaje = "";
       }else{
             mensaje = referencia.msg[indice];
       }
}

///coloca el cuadro de texto en la parte inferior de la pantalla
x = __view_get( e__VW.XView, 0 )+0;
y = __view_get( e__VW.YView, 0 )+176;  



Este codigo es para la copia del textbox. Con esto verificaremos so indice llega a ser igual a la referencia...

So aparece el mensaje entonces ai llega a ser igual... Entonces debes modificarlo por
Indice>referencia.final para comprobar que este no she esta ejecutando..

Pero si en la modificacion llega a aparecer el mensaje, entonces el problems puede see que seesta mandando a destruir all objeto original. Quizas.




9

Segun lo que entiendo, el problema es que no se destruyen las instancias... Y las cuatro líneas que destruyen instancias son las siguientes:

Evento step:
if (indice > referencia.final) { obj_prota.stop = false; instance_destroy(); }

Evento step de textbox...
if ((indice > 3) && (canskip = true) && (obj_arbol_de_navidad.Aregalo = 0) && (obj_arbol_de_navidad.Txtarb = 0)) { obj_prota.stop = false; instance_destroy(); canskip = false}
if (indice > 6) { obj_prota.stop = false; instance_destroy(); canskip = false;  obj_arbol_de_navidad.Aregalo = 1}   
if ((indice > 0) && (obj_arbol_de_navidad.Aregalo = 1)) {obj_prota.stop = false; instance_destroy();}
     
Crea una copia del proyecto e intenta con esta modificadcion

Para el step: lo modificado es el if indice > referencia.final-1

/// @description  preciona enter y cambia de dialogo
if keyboard_check_pressed(ord("X")) and indice <= referencia.final+1{
   if (mensaje == referencia.msg[indice]){
       indice += 1;
       global.mensaje += 1;
       if (indice > referencia.final-1) { obj_prota.stop = false; instance_destroy(); }
       mensaje = "";
       }else{
             mensaje = referencia.msg[indice];
       }
}

///coloca el cuadro de texto en la parte inferior de la pantalla
x = __view_get( e__VW.XView, 0 )+0;
y = __view_get( e__VW.YView, 0 )+176;

De no funcionar responde a estas preguntas:

1.¿cuando debe destruirse la instancia? creo que hay muchas causas diferentes.
2.¿cuando falla?, y cual de las lineas de destruccion si esta funcionando. Con esto descartamos líneas.



10
Hola saludos cordiales

En el evento step tienes un problema visible, dices que la condicion se cumple si induce<=Referencia final. Y ESO impide que indice supere a LA referencia final para poder destruir LA inatancia.. Intents con indice<=referencia.final+1.…

Bueno' intents e informa

11
Preguntas y respuestas / Re:ayuda, no puedo hacer girar bien un abanico
« en: Diciembre 21, 2020, 04:03:38 am »
Hola, saludos cordiales.



Saludos 3dgeminis, discúlpeme por interrumpir, perdóname esta.  :-[ , le dejo la version html5 que puede ejecutar desde aquí, para que vea el resultado directamente.

https://ndika3y7yuiuyd81pfplkq-on.drv.tw/www.dixonweb.dx/games/ventilador_html5/


Ahora continuamos con el post





¿Tienes un problema con tu ventilador (abanico)?, no te preocupes, hoy estas de suerte, afortunadamente me dedico a la reparación de computadoras, ventiladores y lavadoras (no automáticas) y en mis tiempos libres programo en game maker. Para continuar, tendremos presente que se le llamará “ventilador” al abanico, porque así lo llamamos en Venezuela.





Viendo bien el código de tu ventilador, “no me gusta su aspecto”, al parecer le ha entrado polvo, hay que hacerle mantenimiento, comprarle los rodamientos (bocinas, rolines) nuevos, y echarle buena grasa, pero para eso hay que destaparlo por completo, es por eso que la mano de obra (mi trabajo técnico) te sale más o menos (te cuesta aproximadamente, te costará alrededor de, tendrá un precio aproximado de) 10 dólares americanos incluyendo el costo de los repuestos (refacciones). XD.
La global.fan_on es el interruptor de encendido. Debería llamarse global.fan_ switch, ya que es incorrecto llamar a los interruptores de corriente “apagadores o encendedores”, su nombre técnico es “interruptores” porque interrumpen el paso de la corriente eléctrica. Ahora bien, en el script que presentas no me indicaste la función que enciende al ventilador, es decir: me entregastes un ventilador sin el interruptor. Pero no te preocupes porque aunque lo encendí en el evento CREATE me di cuenta que no arrancaba, luego se recalentó (aumentó su temperatura, se puso caliente) y comenzó a echar mucho humo, entonces lo apagué antes de que se terminara de dañar.





La variable global.spins_number, no está haciendo absolutamente nada, es un cable que está demás, no tengo idea porque el técnico anterior lo dejó hay, pero no te preocupes que tengo fé de que te lo voy a reparar, he trabajado con ventiladores en condiciones más desfavorables.

El script approach representa el capacitor (condensador o filtro) el cual le da el primer impulso de corriente al embobinado produciendo un fuerte campo magnético. No he trabajado con ese modelo de script que me presenta, pero estuve investigando bastante y descubrí que es correcto usar este tipo de script para acelerar ventiladores, entre otras cosas. Es decir tu script está bueno.

Estuve trabajando por aproximadamente 3 horas para hallarle la solución a tu ventilador (abanico) y logré repararlo.
Descubrí que estabas usando el script approach de manera incorrecta, así es como debe usarse:
Este es el script:
scr_approach(variable a sumar, valor maximo, aceleracion)

El primer argumento (el argumento0), llamado “variable a sumar”, es la variable que va a cambiar de valor o que va a ser incrementada, no es una variable fija, el segundo argumento (valor máximo), es el valor máximo que tendrá  la variable del primer argumento, y el tercer argumento es la velocidad o el factor de aceleración que tendrá la variable, en otras palabras será el valor que se le sumará variable por cada paso o step. Es un poco confuso entender todo esto, pero con la práctica se domina el tema.

El ángulo también presentaba problemas, ya que no estaba recibiendo correctamente el valor solicitado.
Esto fue lo que hice:

1.   Modifiqué el script, permitiendo que el ventilador girara, y que su inicio fuera acelerado como los ventiladores reales.
2.   Agregué un evento del teclado para apagar y encender el ventilador el presionar ENTER.
3.   Agregué otro pequeño script, para que el ángulo se mantenga dentro de los 360 grados y no salga de ahí.
4.   Anexé otro pequeño script approach para la disminución del giro a la hora de apagar el ventilador (abanico), para que también se disminuyera su aceleración al apagar.
5.   Agregué un pequeño código muy útil, el cual permite visualizar fácilmente el estado de las variables cuando está en ejecución, lo he llamado draw_text_super2.  Este código es necesario para todos los programadores del game maquer, ya que facilita en gran manera el desarrollo al permitir visualizar las variables de la manera más rápida y cómoda que estar usando la variable draw_text por cada variable.

El script quedó de la siguiente manera:
//[create]
angle=0
fan_power=0;
fan_power_min = 0;
fan_power_max = 10;

aceleracion=1
friccion=1

global.fan_on=false;

//variable de texto
zzz=""

///[Alar0]
global.spins_number+=1;

//instance_create_depth(x,y,depth-999,obj_auto_guardar)


//[STEP]
 
if (global.fan_on=true) and (alarm[0]==-1) {alarm[0]=room_speed/2}
if (global.fan_on=false) alarm[0]=-1


if (global.fan_on=true)
{
   angle=angle+fan_power
   fan_power=scr_approach(fan_power,fan_power_max,aceleracion)
}
else
{
    angle=angle+fan_power
   fan_power=scr_approach(fan_power,0,aceleracion)
}

//Para mantener el ángulo dentro de los 60 grados
if(angle>360){angle=angle-360}
if(angle<0){angle=angle+360}



//[DRAW]
draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,angle,c_white,1)

draw_text(x,y,string(angle))


////texto para visualizar variables
dx=0;
dy=0;
fuente_size=20;
fuente_espacio=fuente_size+fuente_size/2;

draw_text(dx,dy,"global.fan_on: "+string(global.fan_on));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"fan_power: "+string(fan_power));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"angle: "+string(angle));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"zzz: "+string(zzz));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"zzz: "+string(zzz));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"zzz: "+string(zzz));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"zzz: "+string(zzz));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}



///EVENTO PRESS <ENTER>
//Para encender y apagar el ventilador.

if(global.fan_on=true)
{
global.fan_on=false;
}
else
{
global.fan_on=true;
}


 


Realmente no estoy cobrando, pero si usted cree que sería conveniente darme una donación, se la aceptaré con gusto, pero si no puede no importa, seguiremos siendo amigos. XD  8). Aqui le dejo el gmz para game maker studio 1.4 el cual puede ser importado a game maker studio 2.

https://drive.google.com/u/0/uc?id=1w1tjGL7H2cj4_5-apYhGCX2rSFrIYGZK&export=download



 

12
Preguntas y respuestas / Re:Acceso a datos de objetos inactivos
« en: Diciembre 11, 2020, 07:49:26 pm »
Tube que recurrir al manual y estas indicaciones encontré:

1)   Tenga en cuenta también que la activación y desactivación no son instantáneas,
2)   Una instancia desactivada efectivamente deja de existir en el juego, pero las instancias individuales aún pueden tener acceso a sus variables.
3)   Sin embargo, no puede usar con (objeto) o con (instancia) , sino que debe acceder a la instancia directamente usando su identificación única en la siguiente forma
val = inst.variable;
Ejemplo
val=object1.variable;
4)   NOTA: Si desactiva una instancia al iniciar la sala (es decir, desde el código de creación de la sala o desde un evento de creación de instancia de una instancia dentro de la sala), todas las instancias que se colocan dentro de la sala desde el editor de sala seguirán ejecutando su evento de creación antes de ser desactivado.

Opiniones:
Creo que el problema no es obtener la variable del objeto inactivo, el problema es obtener su id.
Lo que se puede hacer para obtener el id de las instancias inactivas es crear una lista que contenga todas las id con sus respectivas posiciones (x,y) de las instancias. Para luego evaluar si la distancia a algún objeto coincide con las posiciones y si se devuelve o no el id. Es decir, buscaremos un punto en el plano donde se encuentre la instancia, pero este punto será previamente almacenado en una lista. Ahora bien el objeto inactivo, luego de seguro volverá a activarse y su posición tendrá que actualizarse en la lista para que cuando se vuelva a desactivar se pueda acceder a él.

Hice una prueba pequeña  pero sin la dslits,
El objeto inactivo tiene en su evento créate:

aleatorio=random(10)
global.id_inactivo=id

El objeto que desactiva instancias ejecutó:
instance_deactivate_object(object1)

Luego este objeto solicitó la variable de la instancia inactiva de esta forma:
inst=global.id_inactivo
numero=inst.aleatorio;

Luego la instancia inactiva, volvió a activarse y el valor de la variable aleatoria era el mismo, confirmando de que no se vuelve a ejecutar el evento create.

Este experimento funcionó correctamente, ahora solo quedaría utilizar las dslist para administrar a un número x de instancias.

Nota extra: nunca he usado la desactivación de instancias pero siempre la he necesitado y de ahora en adelante creo que la voy a usar. Antes, cuando el objeto salía de la view lo que hacía eliminarlo y luego creaba otro que servía de guía.

 :-[

13
Juegos completos / El pan de nuestra familia
« en: Septiembre 25, 2020, 03:32:22 am »


El pan de nuestra familia


Otro


GM: Studio

Es un Juego corto con una breve historia basada en hechos reales (con algunas modificaciones), donde intentaré contarles una pequeña vivencia familiar.


Descarga:
Puede jugarse en cualquier sistema, pero presenta problemas con la adaptación de pantalla (el canvas del html5)  :(, lo programé cuando no sabia mucho sobre canvas, ahora para arreglarlo tengo que volver a crearlo de cero.

Se juega diretamente en esta web:
https://dixonysusjuegoseducativos.000webhostapp.com/juegos_completos/el_pan_de_nuestra_familia/index.html

14
Preguntas y respuestas / Re:No entiendo este pedazo de codigo ¡Ayuda!
« en: Abril 18, 2020, 06:58:56 pm »
Hola, gusto en saludarles.

Código a analizar:
if (place_meeting(x,y+vsp,oWall))
{   while (!place_meeting(x,y+sign(vsp),oWall))
 {    y = y + sign(vsp);  }
 vsp = 0;
}

if(place_meeting(x,y+vsp,owall))
{
De existir un obejto llamado "owall" a una distancia de vsp entonces:

while (!place_meeting(x,y+sign(vsp),owall))
mientras no exista el objeto "owall" a una distancia de un pixel

{
y=y+sign(vsp)
}
Sumarle a su posición Y un pixel

vsp=0
La velocidad debe volverse cero
}



En otras palabras:
Si el player se encuentra verticalmente cerca de un objeto "owall" acércalo a él y vuelve su velocidad cero.

Otras palabras
Si el player tiene un objeto cerca de sus pies, acércalo a él hasta encontrar el objeto.

En otras palabras:
Si el player está a punto de tocar el suelo, que se pegue al suelo y se vuelva la velocidad cero.

Este código al parecer funciona también con las colisiones con el techo, porque está tomando el signo de la vspeed. Por lo tanto está diciendo
 Si el objeto player está saltando y sobre su cabeza se encuentra un techo entonces pégalo al techo pero detén la velocidad.

Este código se esta usando para corregir las colisiones verticales y evitar dos cosas:
1. Evitar que el player traspase los objetos "owall"
2. Evitar que la colisión vertical con los objetos "owall" se vea mal.

El código está correcto y funciona como un imán magnético. Donde el objeto owall atrae con su magnetismo al player, pero esto no quiere decir que se va a quedar pegado sino que antes que el player colisione con el objeto owall se va a pegar a el y su velocidad será cero.

1. El código no hace nada si la distancia es superior a la vsp: Si dos objetos de distinta polaridad están muy separados no se percibirá a simple vista su atracción magnética.
2. El código funciona solo cuando el player está cerca del objeto owall: Si dos objetos magnéticos con carga distinta están cerca entonces existirá atracción magnética.

¿Por qué el código es así?
Cuando colisionamos con un objeto solo necesitamos decirle al player que su velocidad sea cero pero esto no se ve bien porque queda una distancia entre el suelo y el player, entonces surge este código para corregir la distancia.

Código sin corrección de distancia: El player queda en el aire o traspasa la owall
if (place_meeting(x,y+vsp,oWall))
{   
 vsp = 0;
}

Código corregido: el player no traspasa la owall
if (place_meeting(x,y+vsp,oWall))
{   while (!place_meeting(x,y+sign(vsp),oWall))
 {    y = y + sign(vsp);  }
 vsp = 0;
}

¿Porqué vsp y sign(vsp)?
Porque vsp normalmente es mayor que sign(vsp).  La vsp es la velocidad de movimiento y también es la distancia que se recorrerá en el próximo paso. Si el objeto player está saltando la vsp será negativa y el sign(vsp) será -1. Si el player está cayendo entonces la vsp será positiva y el sign(vsp) será 1.

¿Podría presentar fallas este código?
Sí, pero solo cuando la vsp es muy alta. En ese caso el objeto player puede que  no detecte el objeto owall y lo traspase. Para evitar eso se usa otro código.

Todavía hay mucho que explicar de este código pero por ahora solo dejo las imágenes:













15
Hola

Experimenta con esto: Crea un proyecto nuevo, creale un objeto y en un evento draw o dibujo colocale este código.

Código: [Seleccionar]
//simulando el evento create con la variable score
repeat(!score)
{
cuadricula_ancho=32
cuadricula_alto=32
columnas_totales=floor(room_width/cuadricula_ancho)
filas_totales=floor(room_height/cuadricula_alto)
x2=0
y2=0
score=1
}

//botones
if(keyboard_check(113)){game_restart()}
b1=keyboard_check(vk_left)
b2=keyboard_check(vk_up)
b3=keyboard_check(vk_right)
b4=keyboard_check(vk_down)

x2+=(b3-b1)*5
y2+=(b4-b2)*5

if(x2<0){x2=0}
if(x2>room_width-cuadricula_ancho*6){x2=room_width-cuadricula_ancho*6}
if(y2<0){y2=0}
if(y2>room_height-cuadricula_alto*9){y2=room_height-cuadricula_alto*9}

x=floor(x2/columnas_totales)*cuadricula_ancho
y=floor(y2/filas_totales)*cuadricula_alto

//dibujo
draw_rectangle(x,y,x+cuadricula_ancho,y+cuadricula_alto)
dy=0

texto=x2
draw_text(0,dy,texto)
dy+=12


Puedes modificar las variables cuadricula_ancho y cuadricula_alto.

Páginas: 1 2 3