🤔 Para Refletir :
"CHAR armazena um valor alfanumérico à variável. Programar, por si só, armazena bugs à constante."
- DougMR

Alterar prioridade da imagem

Estado
Tópico fechado. Não é possível fazer postagens nela.

atosamaral

Plebeu
Membro
Membro
Juntou-se
06 de Abril de 2016
Postagens
23
Bravecoins
0
Bom dia! Estou com um problema, estou utilizando um script para substituir a imagem do character no mapa, pois futuramente vou colocar mais coisas.
Mas a principio, a imagem parece estar acima de todas as outras.
Como faço para colocar um tipo de viewport nesse script?
Imagem:
fxWyz9.png


A principio o script e chamada no main do Scene_Map, disposto e atualizado também.

Depois um script à parte:
Código:
class Meu_Personagem < Sprite
  def initialize
    super
    self.bitmap = Bitmap.new(1400, 750)#do Tamanho da resolução do jogo
    self.x = 0
    self.y = 0
    self.z = 100
    self.bitmap.font.size = 14
    @grafico_meu_personagem = 'GUERREIRO.png'
  end
  def refresh
    self.bitmap.clear    
    bitmap = RPG::Cache.imagem("Personagens/#{@grafico_meu_personagem}")    
    src_rect = Rect.new(0, 0, 150, 150)
    self.bitmap.blt($game_player.screen_x-76, $game_player.screen_y-150, bitmap, src_rect)
  end  
  def update    
    super
    refresh
  end
end
 
Troque o self.z = 100 por self.z = $game_player.screen_z(altura do personagem), o parenteses é opcional então testa com e sem ele para ver.
Recomendo deixar o cache do bitmap e o src_rect dentro do initialize, ficar chamando eles toda hora ira consumir processamento atoa.
Também recomendo estudar usar um tamanho menor e não usar blt. Novamente ficar chamando blt o tempo todo iria consumir processamento atoa.
 
LeonMM comentou:
Troque o self.z = 100 por self.z = $game_player.screen_z(altura do personagem), o parenteses é opcional então testa com e sem ele para ver.
Não resolveu Ç_Ç

LeonMM comentou:
Recomendo deixar o cache do bitmap e o src_rect dentro do initialize, ficar chamando eles toda hora ira consumir processamento atoa.
Também recomendo estudar usar um tamanho menor e não usar blt. Novamente ficar chamando blt o tempo todo iria consumir processamento atoa.

É porque o rect vai ser alterado o tempo todo de acordo com o frame de movimento, serão 8 no caso...
Em questão do tamanho vou tentar colocar o ponto de origem perto do screen_x e screen_y pra diminuir...

 
Olha creio que o problema então está no fato de não possuir o viewport.
Se tu estudar o Sprite_Character, verá que no initialize dele possui uma configuração chamada viewport, quando o Sprite_Character é chamado no Spriteset_Map ele recebe o mesmo viewport do @tilemap, que no caso é o @viewport1.
Então basta adicionar no teu initialize a entrada para o viewport e por o viewport no super, igual é feito no Sprite_Character, e quando chamar assimilar o viewport do Spriteset_Map.
No mais, eu recomendaria editar o Sprite_Character para fazer o que tu esta querendo fazer, mas cada um faz as coisas do seu próprio jeito.
 
LeonMM comentou:
Olha creio que o problema então está no fato de não possuir o viewport.
Se tu estudar o Sprite_Character, verá que no initialize dele possui uma configuração chamada viewport, quando o Sprite_Character é chamado no Spriteset_Map ele recebe o mesmo viewport do @tilemap, que no caso é o @viewport1.
Então basta adicionar no teu initialize a entrada para o viewport e por o viewport no super, igual é feito no Sprite_Character, e quando chamar assimilar o viewport do Spriteset_Map.
No mais, eu recomendaria editar o Sprite_Character para fazer o que tu esta querendo fazer, mas cada um faz as coisas do seu próprio jeito.

Introduzi o viewport do Sprite_Character e deu certo!!!!

Criei um valor global copiando o do Sprite_Character em sua inicialização
Código:
  def initialize(viewport, character = nil)
    super(viewport)
    $viewport_char = viewport

E na hora de Iniciar o script no Scene_Map coloquei
Código:
    @meu_personagem = Meu_Personagem.new($viewport_char)

Graças a Deus consegui resolver, obrigado pelas dicas!
 
Tópico trancado e movido para a área de "Resolvidos". Qualquer problema que o autor ainda tenha e precise reabrir o tópico, favor entrar em contato :3

Agradecimentos ao [member=1538]LeonMM[/member] por ajudar o membro a sanar o problema s2
 
Estado
Tópico fechado. Não é possível fazer postagens nela.
Voltar
Topo Inferior