Acesse o código no PasteBin:
Ferramenta e Versão: Game Maker (Studio 1.4 no mínimo).
Conceito:
O código faz basicamente o seguinte:
Código: Selecionar todos
Se foi definido algum valor para a variável fade_room, ou seja o valor não é noone.
Aumenta a opacidade do retângulo
Senão
Diminui a opacidade do retângulo
Isso é feito usando o próprio valor da variável fade_room. Isso é possível, pois cada room é indexada de 0 até N, desse modo somamos +1 para que o valor seja sempre maior que 0 ou seja -3 (Já que noone equivale a -4). Colocando isso dentro da função sign, o valor vai ser 1 quando a room for trocada e -1 quando o fade ficar opaco.
O calculo minimalista foi utilizado apenas por questão de espaço mesmo. Seria um código muito mais 'inteligível' utilizando if-else, como feito no pseudo-código acima.
Na imagem utilizo apenas o fade_roompara trocar de room, mas como pode ver foram inicializadas as variáveis fade_speede fade_color, para trocarem a velocidade e a cor do fade respectivamente. Ex:
Código: Selecionar todos
// Game Over
obj_fade.fade_room = room_game_over;
obj_fade.fade_color = c_red;
obj_fade.fade_speed = 0.02;
Há também questão do valor de depth, que não coloquei apenas por questão de compatibilidade. Se você está utilizando o GMS2 isso cria um layer temporário. Porém há inúmeros relatos de bugs com objetos persistentes e os layers. Então qualquer problema favor mencionar abaixo.
O código pode ser melhor explorado, porém para que não fuja da proposta creio que seja o suficiente para ser funcional.