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

1
Cita de: Jeffrey Faper en Abril 11, 2022, 04:49:42 AM
si no planea crear un menu de configuraciones de pantalla, entonces puede usar las funciones
display_get_width(),  display_get_heigth(),  display_get_dpi_x() y display_get_dpi_y() 
pero igualmente tiene que cambiar el tamaño de la surface y ventana al iniciar su juego ya que en Game Maker
usted tiene que adaptar sus juegos a diferentes monitores, Game Maker no lo hace automaticamente


aqui le dejo este tutorial explicacion sobre camaras y resoluciones zoom tal vez le ayude
es para GM2 pero las camaras no han cambiado mucho la verdad,  esta en ingles ya que no logre encontrar la version en español
https://www.yoyogames.com/es/tutorials/cameras-and-views

No si el problema no es cambiar de resolucion... el problema es que al cambiar la resolucion... no se adapta mi juego a ese cambio ya que el juego esta creado en una resolucion alta y al cambiarla a una menor... pues las cosas se mueven de sitio y nada esta igual que antes.

Creo que lo mejor es modificar mi juego cambiando la resolucion a una generica por ejemplo 1280x1024 que casi todo el mundo tiene. Pero aun asi estamos en las mismas... cada vez que alguien ejecute el juego en una resolucion que no sea esa, las cosas del juego se moveran de sitio descolocandose y no entiendo el porque.

Si yo por ejemplo a un texto le digo "draw_text(400, 400, "Hola, " + global.Name + "como estas?");"
No entiendo porque al cambiar a otra resolucion, ese texto me aparece o mas arriba o mas abajo o incluso fuera de la pantalla... ese es el fallo.
2
Esto tampoco me sirve :(
Con esto tendria que especificar muchas resoluciones para evitar problemas en cualquier pantalla... y lo que yo busco es que se adapte a todos los sitios, algo que deberia hacer por defecto con la opcion Scale que trae Gmae maker... pero no lo hace.

Bueno supongo que no hay una solucion generica para todo... Asi uqe pondre en mi juego (Para jugar correctamente usar resolucion XXXXX) y ya esta
3
Cita de: Jeffrey Faper en Abril 09, 2022, 10:39:08 PM
podria poner, el codigo con el que re.escala su juego y que resoluciones usa

No uso ningun codigo para escalar mi juego ya que no he encontrado ninguno que me funcione. Lo unico que uso son las opciones que vienen por defecto en Game Maker.
La opcion Star in fullscreen mode, interpolate color between pixels, keep aspect ratio y allow switching to fullscreen.
Tengo esas activadas.
Las rooms las tengo todas a 1920x1080.
4
Gracias pero esta opcion tampoco me sirve... se sigue moviendo todo de sitio al cambiar la resolucion.

Menos mal que solo lo probe con 1 texto antes de liarme a cambiar todo los textos de mi juego...

Lo que no entiendo es porque las opciones de Game Maker, de escalado y tal para windows... no funcionan bien.
5
No uso sprites para los textos... directamente los dibujo con la funcion draw_text... son muchos textos para usar sprites ya que es una aventura grafica.

¿De que manera se hace eso que dices?
6
Preguntas y respuestas / Problema con la resolucion
Abril 09, 2022, 09:39:22 AM
Hola amigos!

Tengo el problema de que mi juego no se ve igual en todas las pantallas... y he leido mucho sobre este tema intentando coger solucion de varios sitios, pero nada parece funcionarme.

Mi juego esta con rooms a 1920x1080 y cuando alguien con una pantalla menor o mayor a esto... se descoloca mi juego moviendome las cosas a otro lugar en vez de adaptarse a la pantalla.

Actualmente solo me pasa con los textos hechos en Draw... los backgrounds de las rooms se adaptan a todo haciendose mas pequeñas o mas grandes.

¿Como puedo solucionar esto para que sea cual sea la pantalla que lo abra... se ejecute todo en su sitio?
7
Como siempre Void, muchisimas gracias!
De nuevo vuelves a salvarme.

No se que habria hecho sin toda tu ayuda la verdad.
8
Hola de nuevo Void!

Me funciona todo correctamente... con tus enseñanzas he podido lograr nuevas mecanicas en el juego.
Pero me gustaria añadir una pequeña mejora al inputbox y no se hacerla...
Resuta que ahora puedes escribir infinito en la ventana de comandos y quiero poner un minimo de caracteres, por ejemplo 50 caracteres maximos...
¿Se podria hacer esto?
El codigo del inputbox es este:
[gml]if keyboard_check_pressed(vk_enter){
    Unlock = keyboard_string;
    switch (Unlock){
        case ("sur"): String = ""; controlsur(); break;
       default: String = "No Comprendo, si necesitas ayuda escribe: ayuda o ayuda comandos"; break;
    }
    keyboard_string = "";
}
draw_text(550,880,String);[/gml]
9
Una duda mas... he intentado hacer algo por mi cuenta pero no entiendo muy bien como hacerlo.

Queria aprovechar el script "array_find" para buscar un objeto dentro del inventario del PJ y de tenerlo pues activar variables o funciones a parte para interectuar con ellos.

He creado otro script llamado "compruebalinterna":
[gml]var Pos = array_find(global.invpj,argument0);
if Pos == argument0 {
    String = "Linterna encendida" global.Elinterna = 1;
}else{
    String = "No tengo " + argument0 + " que pueda encender";
}[/gml]
Lo que pretendo con eso es que me busque en el inventario global.invpj el argumento0 "en este caso seria la linterna (ya he creado el comando "enciende linterna").
Entonces le dicho al if que si Pos es igual que el argumento0 que estaba buscando que me active la variable de la linterna y en caso contrario me diga que no la tengo.
Pero me tira este error:
[gml]Push :: Execution Error - Variable Get 100001.linterna(100010, -2147483648)
at gml_Script_compruebalinterna (line 1) - var Pos = array_find(global.invpj,linterna);
[/gml]
10
Perfecto!! Eres un maquina amigo!!

¿Te puedo dar creditos en mi juego poniendo tu nombre o poner alguna referencia tuya como programador?

La verdad me has ayudado muchisimo... y seria un placer que tu nombre apareciera en el juego.

Todo esto me lo estudiare para aprender todo lo que me has enseñado.

Aun queda alguna tonteria por hacer... pero ya no quiero molestarte mas.

Muchisimas gracias otra vez!! Eres un verdadero crack.
11
Genial!! Ahora si funciona, me daba un error de argumentos en el array "array find y le añadi de nuevo el argumento del obj_inventario_room:"
[gml]array_find(argument0),0,1);[/gml]
Yo lo agrege de nuevo:
[gml]array_find(obj_inventario_room.inv,argument0),1)[/gml]

Pero me falla este codigo:
[gml]var Length = array_length_1d(argument0);
for(var i=0;i<Length;++i){
    if argument0 == argument1 return i;
}
return -1;[/gml]
Dandome el error este:
[gml]DoSet :: Invalid comparison type
at gml_Script_array_find (line 3) -     if argument0 == argument1 return i;[/gml]

Aver si me se explicar en el momento que pasa...

Resulta que te vas a una room donde hay objetos... yo lo he probado en la 4 con 2 objetos. El error ocurre cuando coges esos 2 objetos, los dejas de nuevo en el suelo y de nuevo los vuelves a coger... es justo cuando los coges de nuevo cuando salta ese error.

Igual es porque al coger, dejar y volver a coger los argumentos cambian y no los lee bien?
12

El ciego soy yo... tranquilo... que a estas alturas estoy super perdido y tengo tanto codigo que no se ya ni que tocar... jeje

Ahora hay un fallo en el juego...

Si estas en una room donde no hay objetos... y escribes "coge (objeto)" lo coge y te dice que lo a cojido... aun no habiendo objetos en la room.

En las rooms donde no hay objetos puse este codigo en el creation code:
[gml]var Inst = instance_create(0,0,obj_inventario_room);[/gml]
Y en las rooms que si hay objetos puse este:
[gml]var Inst = instance_create(0,0,obj_inventario_room);
with Inst {
    inv[0] = "linterna";
    inv[1] = "pedernal";
}[/gml]

No entiendo muy bien el porque te coge un objeto de la room 4 estando en la 1
13
Me habia fijado en eso y probe tambien poner los "||" y tambien probe de poner "or"... pero con esa modificacion me tira este error:

[gml]Push :: Execution Error - Variable Index [0,1] out of range [1,1] - -7.temp_array(100008,1)
at gml_Script_array_delete (line 7) -     temp_array[c] = temp_array;[/gml]

Tambien tengo un error al escribir el comando "coge (objeto)" en una room donde no hay objetos:
[gml]DoSet :: Invalid comparison type
at gml_Script_array_find (line 3) -     if argument0 == argument1 return i;[/gml]
Refiriendose al script array_find:
[gml]var Length = array_length_1d(argument0);
for(var i=0;i<Length;++i){
    if argument0 == argument1 return i;
}
return -1;[/gml]
14
Muchas gracias de nuevo amigo.

Entiendo que lo mismo que has hecho en este codigo:
[gml]var Pos = array_find(global.invpj,"")
if  Pos != -1 {
obj_inventario_room.inv = array_delete(obj_inventario_room.inv,array_find(obj_inventario_room.inv,argument0),1)
global.invpj[Pos] = argument0
String = "Cojo " + argument0
}
else String = "No tengo espacio para coger " + argument0[/gml]
Lo he de hacer igual en el "dejaobjeto" quedando asi:
[gml]var Pos = array_find(global.invpj,argument0)
if  Pos != -1 {
obj_inventario_room.inv = array_push(obj_inventario_room.inv,argument0)
global.invpj[Pos] = ""
String = "Dejo " + argument0
}
else String = "No tengo " + argument0;[/gml]

Ahora parece que no falla, pero sigo teniendo el error de que cuando estoy en una room con varios items... al coger 1 los demas los borra de la room.
¿Es posible que el fallo este aqui?
[gml]var temp_array,
    Length = array_length_1d(argument0)
    c = 0;
    temp_array[0]="";
for (var i = 0; i<Length;++i){
    if i<argument1 && i > argument1+argument2-1
    temp_array[c] = temp_array;
    c++;
}
return temp_array;[/gml]
Que le estemos diciendo argument1 y 2 y por eso coge 2 items?
15
Cita de: Void en Marzo 31, 2022, 02:39:29 AM
No crees un código adicional por item, en su lugar usa un solo script al que se le pueda pasar el nombre del item como argumento.
No se hacer esto, he intentado hacer un script con switch agregando en cada case un objeto y luego pasarle ese script al codigo de coger y dejar objetos pero no me aclaro.
CitarNo, como te dije, lo que le falta es el nombre del array, obj_inventario_room.inv. No pongas argumentos al azar, solo porque deja de tirar error no significa que esta funcionando. Si tienes que adivinar un argumento estudia el código primero para al menos tener alguna idea de lo que pide.
No se a que te refieres con el array del obj_inventario_room.inv porque ya esta puesto eso.
[gml]var Pos = array_find(global.invpj,"")
if  Pos != -1 {
obj_inventario_room.inv = array_delete(obj_inventario_room.inv,array_find("linterna"),0,1)
global.invpj[Pos] = "linterna"
String = "Cojo " + "linterna"
}
else String = "No tengo espacio para coger " + "linterna"[/gml]

CitarEl error que te da con array_delete es el mismo de antes, temp_array debe ser inicializado como un array con una cadena vacía, el problema fue que no anticipe que pasaría con arrays que tienen solo un elemento.
En un script si me deja inicializar el temp_array como un array vacio pero en otros me da error de escritura y no me deja guardarlo con ese error.
Aporto imagen:
https://ibb.co/rbMQnF8
CitarSin ver el código me imagino que el problema es que, como dijiste al principio, incluiste más código para el resto de los items en el mismo script, y sin nada que lo detenga el código sigue corriendo para todos los items que encuentre en el room.
En el codigo del inputbox cada comando esta cerrado por un break con lo que deberia detenerse ahi.
[gml]if keyboard_check_pressed(vk_enter){
    Unlock = keyboard_string;
    switch (Unlock){
        case ("inventario"): String = "Tengo " + mirarinventariopj(); break;
        case ("mirar"): String = "Veo " + mirarinventarioroom(); break;
        case ("coge linterna"):cogeobjeto(); break;
        case ("deja linterna"):dejaobjeto(); break;
        default: String = ">No Comprendo"; break;
    }
    keyboard_string = "";
}
draw_text(550,900,String);[/gml]
Yo creo que el fallo de que me coja un objeto y los demas los borre de la room esta en este otro codigo:
[gml]var Pos = array_find(global.invpj,"")
if  Pos != -1 {
obj_inventario_room.inv = array_delete(obj_inventario_room.inv,array_find("linterna"),0,1)
global.invpj[Pos] = "linterna"
String = "Cojo " + "linterna"
}
else String = "No tengo espacio para coger " + "linterna"[/gml]