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

91
Raro, ahora que he tenido un momento he probado el código del manual, y haciendo la corrección en Draw GUI funciona correctamente. Asegúrate de que la view está bien configurada y de que no haya ningún código que pueda interferir con la superficie.

Quizás quieras hacer un proyecto nuevo con un room y algunos objetos que dibujen sprites en él, algo básico, y probar el código ahí para asegurarte de que no haya nada que pueda afectar el resultado. Si igual no te funciona quizás tengas una versión donde este bugeado, para comparación yo tengo la 1.3.307.

Por cierto, si de casualidad esa es la versión que usas acabo de recordar que todo este asunto probablemente se vuelve innecesario, ahora la variable application_surface contiene la superficie principal que se usa para dibujar normalmente el juego, y puedes usarla para crear sprites como con cualquier otra superficie:

sprite_create_from_surface(application_surface,0,0,64,64,1,0,0,0)
92
Cancerbero666 compara las coordenadas actuales del objeto con las anteriores, preferiblemente después del código que puse anteriormente:

if x>xprevious sprite_index = spr_Derecha;
if x<xprevious sprite_index = spr_Izquierda;
if y>yprevious sprite_index = spr_Abajo;
if y<yprevious sprite_index = spr_Arriba;

93
El código que he puesto hace que el objeto se detenga por completo si no se están presionando las teclas de dirección, si contigo no lo hace probablemente estas usando directa o indirectamente alguna de las variables speed en alguna parte.

Para evitar que el objeto se mueva con el sprite equivocado haz que el cambio de sprites dependa del movimiento, no de las teclas presionadas.
94
Momento, ese es el código del manual? La última parte no tiene sentido, básicamente esta poniendo en el evento Draw GUI "si no existe la superficie dibuja la superficie."

Trata modificando el if en Draw GUI para que sea si la superficie existe.
95
Prueba con esto:

var key_right,key_left,key_up,key_down,keys;

key_right = keyboard_check(vk_right);
key_left = keyboard_check(vk_left);
key_up = keyboard_check(vk_up);
key_down = keyboard_check(vk_down);

keys = key_right + key_left + key_up + key_down;

if (keys == 1){
  x += (key_right - key_left) * 5;
  y += (key_down - key_up) * 5;
}


Usando keyboard_check el código asigna el estado de cada tecla a una variable, siendo el estado 0 si no está presionada y 1 si lo está, luego suma todas las variables en otra variable de control. Con un if se verifica si dicha variable contiene un 1, que significa que solo una tecla se está presionando, para ejecutar el código de movimiento.
96
Lo del fondo es facíl, simplemente debes usar un fondo que encaje a los lados, cuando los pones en el editor de room estarán las opciones Tile Hor y Tile Ver, que harán que el fondo se repita indefinidamente horizontal y verticalmente, respectivamente.

Que objetos aparescan al azar es un tanto más complejo, dependiendo de su importancia puede usarse una alarma para hacer que aparescan o un algoritmo simple para hacer que aparescan con cierta distancia entre ellos, pero la parte realmente compleja sería balancear el juego de manera que los elementos al azar no frustren al jugador.

Dejo un ejemplo básico, en el notarás que de vez en cuando un cuervo aparece justo cuando hay un salto grande, de manera que es imposible no caer de las plataformas:
97
Preguntas y respuestas / Re:Eliminar objetos
Abril 26, 2014, 05:11:12 PM
Puedes usar collision_point desde un objeto de control para adquirir la ID de una instancia en las coordenadas del mouse, en el caso de que haya varias instancias bajo el mouse con la misma profundidad la función tomará la ID de la instancia del frente, luego puedes usar dicha ID para eliminar la instancia:

if mouse_check_button_pressed(mb_left){
  var Ins = collision_point(mouse_x,mouse_y,obj_PadrePelota,1,1);
  if instance_exists(Ins){
    with(Ins) instance_destroy();
    }
}
98
Desde cuando es GameMaker 8.1 superior a Studio? Desde cuando es Studio obsoleto? El no pago por GameMaker 1.2, pago por GameMaker Studio 1.2, las versiones inferiores a 8.1 nisiquiera se pueden descargar del sitio de Yoyo, mucho menos comprar.
99
view_surface_id[n] desactiva el dibujado de la view elegida, por eso si lo usas con la view 0, que es la view usada por defecto para dibujar la pantalla y tratas de dibujarlo en un evento draw normal solo aparece un cuadro negro, mientras que Draw GUI no depende de views para dibujarse.
100
La versión estable más nueva de GM es GameMaker Studio 1.2, la más nueva en general es Game Maker Studio 1.3 (beta) o Game Maker Studio Early Access 1.99, dependiendo de las caracteristicas que quieras, pero eventualmente todo se juntará cuando saquen la versión estable de 1.3.

Ciertamente entre GM 8.1 y GMS varias funciones fueron marcadas como obsoletas, esto debido a que suponian riesgos de seguridad, solo eran compatibles con el módulo de windows o no eran compatibles con el nuevo engine.

El engine de GMS ahora es compilado, contrario a GM 8.1 donde era interpretado, esto ha permitido un gran aumento en el rendimiento del engine. A parte de eso ahora es sandboxed, que significa que solo puede modificar archivos en el espacio que el OS le ha asignado.

Por supuesto, el mayor cambio y principal atractivo de GMS es que ahora se pueden exportar juegos para otras plataformas a parte de Windows, como Android, iOS, HTML5 y algunos más. Para hacerlo se deben comprar los módulos apropiados por aparte, o comprar la versión Master, que trae todos los módulos actuales y futuros de GMS 1.x.

Te recomendaria que le des un vistazo a lo que Studio ofrece para ver si te sirve para lo que quieres hacer, si aún asi deseas comprar GM 8.1 ve a http://www.yoyogames.com/legacy y haz click en Buy GameMaker for Windows
101
Puedes tomar la salida fácil y agregar un objeto en la room inicial que use current_time en su evento create para enviarte a la room del menú:


if current_time > 5000 room_goto(room_Menú)


Con ese código, por ejemplo, si el juego lleva más de 5 segundos corriendo se saltará el room inicial.

Aún así, sería bueno que averigües porque los niveles del juego se mantienen iguales cuando los abandonas, tienes el room persistente? estas abusando de variables globales? La mejor manera de aprender es experimentar, buscar donde es que está fallando tu código y tratar de arreglarlo tratando algo distinto.
102
Keep aspect ratio para android esta en la versión más reciente de GMS EA, actualiza.
103
La versión de GM para Mac solo puede exportar aplicaciones para Mac, con GM Studio tienes la opción de comprar el módulo de HTML5, sin embargo Studio solo corre en Windows.

Puedes instalar software de máquina virtual para tener una instancia de Windows en tu Mac y poder correr desde ahí Studio.

Otra cosa a tener en cuenta es que el cambio de precio es considerable, la licencia de GM para Mac te costaría $20, la licencia de GM Studio junto al Módulo HTML5 te costaría $200.
104
Preguntas y respuestas / Re:screen shot especifico
Abril 13, 2014, 03:23:09 AM
GameMaker Studio solo puede modificar archivos en la carpeta asignada por el OS, o en el caso de windows, carpetas donde se ha pedido permiso con get_save_filename o get_save_filename_ext.
105
Preguntas y respuestas / Re:Ayuda con este código
Abril 13, 2014, 03:18:54 AM
Como lo estás haciendo en este momento cada objeto tiene alrededor de un 14% de probabilidad de ser elegido, puedes hacer un segundo choose donde se elija entre los objetos normales o el valor elegido en el choose anterior, lo que disminuirá la probabilidad del bonus a alrededor de 2% mientras los otros objetos quedan con 16%:

var Obj;
randomize()
Obj = choose(obj_amarillo,obj_rojo,obj_verde,obj_celeste,obj_gris,obj_rosa,obj_bonus)
Obj = choose(obj_amarillo,obj_rojo,obj_verde,obj_celeste,obj_gris,obj_rosa,Obj)
instance_create(274,0,Obj)


Otra manera seria elegir tu mismo la probabilidad de que un objeto sea elegido usando random en lugar de choose:

randomize()
var Val = random(100);
if Val >= 0 && Val < 16{
  instance_create(274,0,obj_amarillo)
}
else if Val >= 16 && Val < 32{
  instance_create(274,0,obj_rojo)
}
else if Val >= 32 && Val < 48{
  instance_create(274,0,obj_verde)
}
else if Val >= 48 && Val < 64{
  instance_create(274,0,obj_celeste)
}
else if Val >= 64 && Val < 80{
  instance_create(274,0,obj_gris)
}
else if Val >= 80 && Val < 96{
  instance_create(274,0,obj_rosa)
}
else if Val >= 96 && Val <= 100{
  instance_create(274,0,obj_bonus)
}


Como ves este método es más largo, pero tiene la ventaja de que te deja decidir la probabilidad que tiene cada objeto para ser elegido.