🤔 Para Refletir :
"Um artista precisa somente de duas coisas: Honestidade e fé."
- Carlos Davilla

Congelar gráficos (ACE)

Kauzz

Cidadão
Membro
Membro
Juntou-se
17 de Outubro de 2016
Postagens
140
Bravecoins
1
Oi pessoal, tudo bem? bem simples, preciso congelar os gráficos (Via RGSS3) Ou então proibir que o herói ande durante um tempo X que o script esteja rodendo. Eu fiz uma Scene (Na verdade, fiz na Scene_Map mesmo) que é uma sobreposição, mas não quero permitir que o herói se mova enquanto ela estiver na tela.

Eu pensava que era Graphics.freeze, porém não workou (ou eu botei de forma errada).
 
Então, o ideal mesmo era você criar uma nova cena (fora da Scene_Map) para rodar seu código e, ao invés de congelar o mapa, usar o método SceneManager.background_bitmap, que te dá um Bitmap de como a tela estava na hora em que a Scene_Map foi terminada (para ir para a sua cena, no caso). Com isso você tem o mesmo efeito visto na cena de menu, por exemplo.

O que talvez seja um problema é que fica tudo meio embaçado. Caso a imagem estar focada seja um requisito para o seu script, você pode criar um procedimento que salve a tela sem chamar a função Bitmap#blur.

Fiz um treco rapidinho aqui, ele salva na variável $background_bitmap_noblur um bitmap com a tela sem embaçar (Cole acima do main):
Código:
class Scene_Map
  alias noblur_background_bitmap_terminate terminate
  def terminate
    noblur_background_bitmap_terminate
    
    $background_bitmap_noblur.dispose if $background_bitmap_noblur
    $background_bitmap_noblur = Graphics.snap_to_bitmap
  end
end

Pra colocar a imagem na tela é só criar um Sprite na posição (0, 0) com Z bem baixo (pode ser negativo) e passar o bitmap pra ele:
Código:
bg_sprite = Sprite.new
bg_sprite.z = -1
bg_sprite.bitmap = $background_bitmap_noblur
 
Brandt comentou:
Então, o ideal mesmo era você criar uma nova cena (fora da Scene_Map) para rodar seu código e, ao invés de congelar o mapa, usar o método SceneManager.background_bitmap, que te dá um Bitmap de como a tela estava na hora em que a Scene_Map foi terminada (para ir para a sua cena, no caso). Com isso você tem o mesmo efeito visto na cena de menu, por exemplo.

O que talvez seja um problema é que fica tudo meio embaçado. Caso a imagem estar focada seja um requisito para o seu script, você pode criar um procedimento que salve a tela sem chamar a função Bitmap#blur.

Fiz um treco rapidinho aqui, ele salva na variável $background_bitmap_noblur um bitmap com a tela sem embaçar (Cole acima do main):
Código:
class Scene_Map
  alias noblur_background_bitmap_terminate terminate
  def terminate
    noblur_background_bitmap_terminate
    
    $background_bitmap_noblur.dispose if $background_bitmap_noblur
    $background_bitmap_noblur = Graphics.snap_to_bitmap
  end
end

Pra colocar a imagem na tela é só criar um Sprite na posição (0, 0) com Z bem baixo (pode ser negativo) e passar o bitmap pra ele:
Código:
bg_sprite = Sprite.new
bg_sprite.z = -1
bg_sprite.bitmap = $background_bitmap_noblur

A cena no caso é um sistema para movimentação da câmera que eu fiz, pra poder ver todo o mapa (Alguns detalhes/pontos do mapa não dá pra ver por onde o personagem passa), então não pode ter blur. Acho que vou migrar pra outra Scene mesmo, ou, vou deixar assim. Bloquear a movimentação do jogador enquanto o script roda tem como? Eu tentei por um return if $game_player.moving?, mas não sei se está certo isso... eu faço as coisas/testo os códigos mais pela intuição mesmo, então nem sei se não tem nada a ver ou se tá certo isso hahaha. x)
 
Kauzz comentou:
A cena no caso é um sistema para movimentação da câmera que eu fiz, pra poder ver todo o mapa (Alguns detalhes/pontos do mapa não dá pra ver por onde o personagem passa), então não pode ter blur. Acho que vou migrar pra outra Scene mesmo, ou, vou deixar assim. Bloquear a movimentação do jogador enquanto o script roda tem como? Eu tentei por um return if $game_player.moving?, mas não sei se está certo isso... eu faço as coisas/testo os códigos mais pela intuição mesmo, então nem sei se não tem nada a ver ou se tá certo isso hahaha. x)

Ah, entendo... Então o que eu mandei não resolve não, rs.

A primeira coisa que me vem à cabeça é fazer algo assim:
Código:
class Game_CharacterBase
  alias nomove_update_move update_move
  def update_move
    return if $freeze_characters
    nomove_update_move
  end
end

Aí quando for rodar seu script usar isso:
Código:
$freeze_characters = true

E depois desativar assim:
Código:
$freeze_characters = false

Note que eu também desativei o movimento de eventos e party members, se for pra desativar só do jogador é só mudar de Game_CharacterBase pra Game_Player.

Usar return if $game_player.moving? na verdade só vai impedir o script de rodar se o jogador estiver se movimentando, não evitar que ele se mova de fato. Pode ser uma solução também, não sei kk
 
Voltar
Topo Inferior