Fala pessoal! Ao trabalhar em diferentes projetos no Game Maker, percebi que eu usava certos algoritmos com bastante frequência, então decidi criar funções para não ter que digitar do zero novamente toda vez que pretendo incluir algo que já programei antes em um novo projeto. Eu adaptei os scripts para que sejam customizáveis, assim, podem ser utilizáveis em quase qualquer projeto, apenas alterando os valores de cada argumento para que melhor se adequem as suas necessidades.
Como são bastante úteis pra mim, imagino que também possam ser úteis pro pessoal aqui do Condado que usa o Game Maker, então decidi compartilhá-los neste Post:
Ainda tenho mais Scripts que pretendo editar para torná-los mais customizáveis, então aguardem por atualizações neste Post!
Como são bastante úteis pra mim, imagino que também possam ser úteis pro pessoal aqui do Condado que usa o Game Maker, então decidi compartilhá-los neste Post:
Esta função replica a movimentação alinhada a um "Grid" (Matriz), presente em jogos antigos de RPG, como Pokémon, Final Fantasy, etc.
Código:
///scr_grid_mov(up_key, down_key, left_key, right_key, cell_w, cell_h,...
//...offset_x, offset_y, spd, inst_collision);
/*=================================================================
Credits: Douglas Miranda Rodrigues, aka "DougMR"
Function arguments:
up_key - variable containing keyboard key for upward movement
down_key - variable containing keyboard key for downward movement
left_key - variable containing keyboard key for leftward movement
right_key - variable containing keyboard key for rightward movement
cell_w - the width of each cell inside the grid
cell_h - the height of each cell inside the grid
offset_x - the "x" offset for the origin of the player sprite
offset_y - the "y" offset for the origin of the player sprite
spd - the movement speed (in pixels per frame)
inst_collision - the obstacle the player will collide against
=================================================================*/
//initiate variables:
up_key = argument0;
down_key = argument1;
left_key = argument2;
right_key = argument3;
cell_w = argument4;
cell_h = argument5;
offset_x = argument6;
offset_y = argument7;
spd = argument8;
inst_collision = argument9;
//check if player is aligned to grid:
if x == (x div cell_w * cell_w) + offset_x
&& y == (y div cell_h * cell_h) + offset_y
aligned = true;
else
aligned = false;
//check for input and allow movement if there is no collision:
if aligned
{
hspeed = 0;
vspeed = 0;
if keyboard_check(up_key)
{
if !place_meeting(x, y - cell_h, inst_collision)
{
hspeed = 0;
vspeed = -spd;
}
}
else
if keyboard_check(down_key)
{
if !place_meeting(x, y + cell_h, inst_collision)
{
hspeed = 0;
vspeed = spd;
}
}
else
if keyboard_check(left_key)
{
if !place_meeting(x - cell_w, y, inst_collision)
{
hspeed = -spd;
vspeed = 0;
}
}
else
if keyboard_check(right_key)
{
if !place_meeting(x + cell_w, y, inst_collision)
{
hspeed = spd;
vspeed = 0;
}
}
else
{
hspeed = 0;
vspeed = 0;
}
}
Esta função tem o intuito de substituir a função "draw_sprite", usada dentro do "Draw Event", quando sua intenção é desenhar uma sprite que contém animações. É possível também determinar o que acontece ao fim da animação, se ela deve reiniciar do primeiro frame, inverter, ou parar.
Código:
///scr_draw_sprite_animated(_x, _y, spr, frame_speed, animation_end);
/*=================================================================================================
Credits: Douglas Miranda Rodrigues, aka "DougMR"
Create Event:
current_frame = 0;
img_index = 0;
reverse_flag = false;
Function arguments:
_x - the x coordinate to draw the sprite
_y - the y coordinate to draw the sprite
spr - the sprite index to be drawn
frame_speed - how many frames it should wait before displaying next image index
animation_end - checks what happens when it reaches last image index ("restart", "reverse", "stop")
=================================================================================================*/
//initiate variables:
_x = argument0;
_y = argument1;
spr = argument2;
frame_speed = argument3;
animation_end = argument4;
//start animation:
total_sub = sprite_get_number(spr);
if current_frame < frame_speed
current_frame += 1;
else
{
if animation_end != "reverse"
{
if img_index < total_sub
img_index += 1;
}
else if animation_end == "reverse"
{
if reverse_flag == true
{
if img_index > 0
img_index -= 1;;
}
else
{
if img_index < total_sub - 1
img_index += 1;
else
reverse_flag = true;
}
}
current_frame = 0;
}
//animation end:
if animation_end == "restart"
{
if img_index == total_sub
img_index = 0;
}
if animation_end == "reverse"
{
if reverse_flag == true
{
if img_index == 0
reverse_flag = false;
}
}
if animation_end == "stop"
{
if img_index == total_sub
img_index = total_sub - 1;
}
//draw the sprite:
draw_sprite(spr, img_index, _x, _y);
Ainda tenho mais Scripts que pretendo editar para torná-los mais customizáveis, então aguardem por atualizações neste Post!
Última edição: