Noviembre 08, 2017, 09:31:20 AM Ultima modificación: Noviembre 08, 2017, 10:04:07 PM por Naitsabes0
 Siguiendo un tutorial de escuela de video juegos he armado su código de defensa de la torre.

obj_Jugador
CREATE////////////////////////
[gml]
/// Variables
disparar = true;
victoria = room_speed * 30;
alarm[1] = 5;  // Crear primer enemigo en...
[/gml]
ALARM0//////////////////////////
[gml]
/// Disparar de nuevo
disparar = true;
[/gml]
ALARM1//////////////////////////
[gml]
/// Crear enemigo
enemigo = instance_create(850,455,obj_Enemigo);
enemigo.hspeed = random_range(-2,-0.5);

// Siguiente enemigo en...
alarm[1] = random_range(1,2.5)*room_speed;
[/gml]
GLOBAL LEFT BUTTON (NO EXISTE ESTE EVENTO EN  :GMS: 2)//////////////////////////
[gml]
/// Procesar disparo
if (mouse_x > x+25 and disparar){

    // http://gmc.yoyogames.com/index.php?showtopic=523427
   
    direccion = point_direction(x,y,mouse_x,mouse_y); // Dirección de la flecha
    distancia = point_distance(x,y,mouse_x,mouse_y); // Distancia hasta destino
   
    flecha = instance_create(x,y,obj_Flecha);
    flecha.speed = distancia/room_speed; // Velocidad en base distancia/steps de vida
    flecha.direction = direccion+random_range(-5,5); 
    flecha.gravity_direction = 270;
    flecha.gravity = 0.05;
   
    disparar = false;
    alarm[0] = room_speed*0.75; // siguiente disparo en...
}
[/gml]
DRAW//////////////////////////
[gml]
/// Jugador, dirección de ataque y marcador
draw_self();

// Dirección de la flecha
var dir = point_direction(x,y,mouse_x,mouse_y);
if (mouse_x > x+25){
    draw_sprite_ext(spr_Jugador_Direccion,0,x,y,1,1,dir,c_white,1);
} else {
    draw_sprite_ext(spr_Jugador_Direccion,1,x,y,1,1,dir,c_white,1);
}

/// Marcador y victoria
if (victoria<=0) {
    show_message("Has ganado!");
    game_restart();   
} else {
    victoria--;
    draw_set_color(c_black);
    draw_set_font(fnt_Marcador);
    draw_text( 25,25,"Victoria en " + string(ceil(victoria/room_speed)));
}
[/gml]
obj_Flecha (depth -5)
STEP//////////////////////////
[gml]
/// Angulo del sprite
image_angle = direction;
[/gml]
COLLISION obj_Enemigo//////////////////////////
[gml]
/// Matar enemigo (cambiar sprite)
if (other.sprite_index != spr_Enemigo_Muerto) instance_destroy();
other.sprite_index = spr_Enemigo_Muerto;
other.speed = 0;
[/gml]
OUTSIDE ROOM//////////////////////////
[gml]
/// Liberar memoria
if (x<0 or x> room_width or y>room_height) instance_destroy();
[/gml]
obj_Enemigo
CREATE//////////////////////////
[gml]
/// Variables
image_speed = 0.1;
hspeed = -0.5;
[/gml]
STEP//////////////////////////
[gml]
/// Destrucción de instancia
if (x < -100) instance_destroy();
if (sprite_index == spr_Enemigo_Muerto) image_alpha-=0.01;
if (image_alpha <= 0) instance_destroy();
[/gml]
COLLISION obj_Jugador//////////////////////////
[gml]
/// Jugador pierde
show_message("Has perdido!")
game_restart();
[/gml]

Pero da error en  :GMS: 2.

En GMS2 ya no existe instance_create. Ahora GMS2 va por capas, entonces tienes que usar instance_create_depth o instance_create_layer

Un Saludo

Tambien se elimanaron los "BACKGROUNDS", ahora tiene que ser un sprite, vas a la room, le das al layer de "background" y le asignas el sprite.

Cita de: Seirlord_Games en Noviembre 08, 2017, 11:28:31 AM
Tambien se elimanaron los "BACKGROUNDS", ahora tiene que ser un sprite, vas a la room, le das al layer de "background" y le asignas el sprite.
interesante dato, ademas parece que no se puede mover la "room" en forma horizontal con el mouse, solo se mueve verticalmente, lo que resulta molesto y incomodo al momento de diseñar el escenario ¿también perdió esa capacidad  :GMS: 2?.

Para mover horizontal pulsa SHIFT y mueve la rueda del raton. Tambien puedes pulsar el boton de la rueda del raton y mover el mouse para moverte libremente

Cita de: Seirlord_Games en Noviembre 08, 2017, 01:41:18 PM
Para mover horizontal pulsa SHIFT y mueve la rueda del raton. Tambien puedes pulsar el boton de la rueda del raton y mover el mouse para moverte libremente
Bueno ya comencé a digerir el hecho que no existe instance_create y tendrá que ser instance_create_depth, supongo que lo mismo, solo que se le programa la profundidad, por otro lado no entiendo este error.



Creo que dice algo como de que se encuentra en estado de uso, pero que esta marcado como no exportar.

En las propiedades de tile sets hay una casilla que desactiva exportar sprites que estan siendo usados como tile sets, simplemente desmarcala:


Cita de: Void en Noviembre 08, 2017, 08:58:37 PM
En las propiedades de tile sets hay una casilla que desactiva exportar sprites que estan siendo usados como tile sets, simplemente desmarcala:


Si perjudica al momento de programar, me extraña que la hayan dejado activada por defecto.

Es que en buena teoría un recurso gráfico que ha sido usado para tile sets no debería ser usado también como sprite. Tile sets en general tienen una apariencia similar a esta:



Y pues quedaría raro querer usar eso como un sprite aparte, así que usualmente quieres que el espacio en textura lo ocupe solo el tileset, no también el sprite.

Cita de: Void en Noviembre 08, 2017, 10:18:01 PM
Es que en buena teoría un recurso gráfico que ha sido usado para tile sets no debería ser usado también como sprite. Tile sets en general tienen una apariencia similar a esta:



Y pues quedaría raro querer usar eso como un sprite aparte, así que usualmente quieres que el espacio en textura lo ocupe solo el tileset, no también el sprite.
Es que por alguna razón no puedo crear un "Tile Sets" sin haber creado un "Sprite", tuve que cambiarle el nombre para que no haya conflicto.



Básicamente el nombre es.
spr_Fondo_Castillo
Tile_Fondo_Castillo

Creo que estoy haciendo algo mal, porque el "back" que tenia un objeto de fondo no necesitaba que se creara un sprite para su uso en  :GMS:.

GMS 2 cambio las la forma en que maneja recursos gráficos, ahora ya no hay backgrounds y sprites, solo sprites.

Los tilesets son sprites que quieres usar por partes, como el ejemplo que puse en el post anterior.

Los backgrounds ahora son un sprite dibujado en el room, simplemente crea el sprite, luego vas al room, seleccionas el layer de background:


En las propiedades de Background Layer haces click en la barra que dice no sprite:


Eso abrira una nueva ventana donde puedes elegir cualquier sprite que tengas en el arbol de recursos.

Cita de: Void en Noviembre 09, 2017, 03:25:55 AM
GMS 2 cambio las la forma en que maneja recursos gráficos, ahora ya no hay backgrounds y sprites, solo sprites.

Los tilesets son sprites que quieres usar por partes, como el ejemplo que puse en el post anterior.

Los backgrounds ahora son un sprite dibujado en el room, simplemente crea el sprite, luego vas al room, seleccionas el layer de background:


En las propiedades de Background Layer haces click en la barra que dice no sprite:


Eso abrira una nueva ventana donde puedes elegir cualquier sprite que tengas en el arbol de recursos.
¿Con esas opciones que se ven hay se puede lograr el mismo efecto que los "back" de  :GMS:? es decir que tengan ese movimiento "X" "Y", ya que de lo contrario estaría obligado a gastar recursos en animar el fondo para que se mueva en una dirección con solo 1 fotograma.

Si, Horizontal Speed y Vertical Speed hacen que el fondo se mueva de manera horizontal y vertical respectivamente. Para la próxima te invito a que lo pruebes tu mismo, seguro encontrarás la respuesta en menos tiempo del que tuviste que esperar a que yo respondiera.