Nesta aula veremos um exemplo prático de como fazer um sistema simples de dia e noite.
O sistema basicamente consiste em um ciclo de horas de 0 a 24 onde o tom da tela é alterado em função das horas.
- Introdução
Primeiro temos que saber onde fazer esta modificação, o script é a class Scene_Map, é lá onde é atualizado todo o mapa. Quando falo em atualizar, lembre-se do método update, e é ele que iremos modificar.
Como há momentos em que não desejamos ligar o sistema, temos que fazer uma condição para que ele só funcione se a switch estiver ligada.
Então vamos criar as variáveis globais:
$secs = 0
$mins = 0
$hours = 0
$hours_var = 1
$dn_on = 1
As três primeiras são as variáveis do tempo. A penúltima é a variável que armazena a hora, é a mesma que $hours, porém para que fique melhor utilizar em eventos, por condições fica melhor associá-la a uma variável do jogo. E a última é a switch que liga e desliga o sistema.
- Modificando o método update
Antes de modificar o método precisamos criar uma variável de velocidade do tempo, poderíamos deixar o valor 1 como velocidade assim os segundos passariam normalmente, porém como é apenas um exemplo vamos colocar um valor alto para vermos o tempo passar mais rápido.
$time_speed = 35
Crie um novo script e escreva a classe Scene_Map, não se esqueça de por a classe mãe Scene_Base por meio de herança e
copie o método update.
Agora antes do end cole o código:
if $game_switches[$dn_on]
$secs += $time_speed
if $secs >= 60
$secs = 0
$mins += 1
end
if $mins >= 60
$mins = 0
$hours += 1
end
if $hours >= 24
$hours = 0
$game_variables[$hours_var] = $hours
end
update_screen
end
Aqui são feitas as três condições do tempo, os segundos serão incrementados pela velocidade e ao atingirem 60 ou mais serão
zerados e os minutos serão incrementados em 1, repetindo o ciclo até que os minutos sejam igual a 60, zerando-os e incrementando as horas, que por sua vez será incrementada até chegar a 24, onde voltará a ser 0.
Chamamos o método update_screen então que é o que irá fazer a tela mudar de tonalidade.
- O método da tonalidade
Crie o método:
def update_screen
case $hours
when 0,1,2,3,4
$game_map.screen.start_tone_change(Tone.new(-102,-102,-102),140)
when 5,6,7
$game_map.screen.start_tone_change(Tone.new(-34,-34,-34),140)
when 8,9,10,11,12,13,14,15,16,17
$game_map.screen.start_tone_change(Tone.new(20,10,10),140)
when 18,19,20,21,22,23
$game_map.screen.start_tone_change(Tone.new(-68,-68,-68),140)
end
end
Aqui são feitas condições também para verificar qual é a hora e em sua função mudar a tonalidade. Usamos a classe Game_Map que tem uma instância da Game_Screen ($game_map.screen) a qual é a responsável pela tela do jogo, e nela há o método start_tone_change que muda a tonalidade da tela. Os argumentos são o tom e a velocidade. O tom é uma classe também, portanto temos que iniciá-la com o new e os argumentos são as cores RGB (vermelho, verde, azul) que vão de 0 a 255.
Para fazermos a condição, eu utilizei o comando case, poderíamos escrever 24 if + eslsif porém esta maneira é muito mais eficiente.
Aqui está o script completo. Para testá-lo, lembre-se de ativar a switch 1.
$secs = $mins = $hours = 0
$time_speed = 35
$hours_var = 1
$dn_on = 1
class Scene_Map < Scene_Base
def update
super
$game_map.update(true)
$game_player.update
$game_timer.update
@spriteset.update
update_scene if scene_change_ok?
if $game_switches[$dn_on]
$secs += $time_speed
if $secs >= 60
$secs = 0
$mins += 1
end
if $mins >= 60
$mins = 0
$hours += 1
end
if $hours >= 24
$hours = 0
$game_variables[$hours_var] = $hours
end
update_screen
end
end
def update_screen
case $hours
when 0,1,2,3,4
$game_map.screen.start_tone_change(Tone.new(-102,-102,-102),140)
when 5,6,7
$game_map.screen.start_tone_change(Tone.new(-34,-34,-34),140)
when 8,9,10,11,12,13,14,15,16,17
$game_map.screen.start_tone_change(Tone.new(20,10,10),140)
when 18,19,20,21,22,23
$game_map.screen.start_tone_change(Tone.new(-68,-68,-68),140)
end
end
end
Suas aulas são muito esclarecedoras! Há a possibilidade de você continuá-las?
ResponderExcluir