Visitante!
Faça seu Login ou Registre-se!

Galeria de Jogos

Aula Ativa de Ruby/RGSS e outras linguagens de programação 50 Respostas | 7721 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

Alucard_2

  • *
  • Mensagens: 112 Ouro: 75
  • Confesso que estou tendo um caso com o Nandik
    • RPG Maker XP
    • Facebook
    • Youtube
    • Ver perfil
    • E-mail
Re: Aula Ativa de Ruby/RGSS
Resposta 45 Online: 02 Jun 2015, 12:19
@Watanukiz
Fica difícil saber o que está errado se não sabemos nem como usou =T Poderia postar seu código?
E aliás, o que seria IR?
RPG Maker Brasil.net Está de Volta!!! > http://www.rpgmakerbrasil.net/forum

Avatar by: Driko

http://i.imgur.com/cHNwiLZ.png

MendigoDoMato

  • *
  • Mensagens: 40 Ouro: 4
    • Unity
    • Ver perfil
Aula Ativa de Ruby/RGSS
Resposta 46 Online: 18 Ago 2016, 18:55
Isso aqui ta funcionando ? posso fazer perguntas por aqui ainda ?

Raizen

  • *
  • Mensagens: 2479 Ouro: 1857

    Vencedor CRM Awards - Melhor Scripter Vencedores das edições do Concurso Projeto Rickas!

    • Ver perfil
    • E-mail
Aula Ativa de Ruby/RGSS
Resposta 47 Online: 01 Set 2016, 11:59
Sim, desculpe a demora, se ainda tiver perguntas sobre isso só mandar, também generalizei mais o tópico para quem quiser perguntar de outras linguagens de programação
« Última modificação: 01 Set 2016, 12:03 por Raizen »

Baby..Face

  • *
  • Mensagens: 15 Ouro: 3
    • RPG Maker VX/Ace
    • Ver perfil
Aula Ativa de Ruby/RGSS e outras linguagens de programação
Resposta 48 Online: 05 Ago 2017, 12:38
Engine: RMVX Ace
Explicação: Gostaria de saber se existe a possibilidade de redimensionar janelas (Window_Selectable, Window_Base, etc ), a um tamanho perfeito ao conteúdo que ela vai conter de forma "automática", ou seja, quando instanciar a janela atribuir valores arbitrários e após adicionar o conteúdo à janela, alterá-la de forma a se ajustar ao conteúdo inserido.
Por exemplo primeiro é necessário instanciar.

Até o momento minha solução "gambiarrosa" funciona para quantidade de linhas que a janela conterá.
Eu crio uma janela dummy, uma janela qualquer só para que eu possar acessar o método fitting_height, em seguida utilizo o
esse método passando o valor 2, para que ele calcule a altura ideal da janela para duas linhas (minha Window_Selectable, conterá duas opções). Não consigo fazer nada semelhante para a largura da janela.

Então.. Gostaria de saber se tem uma solução mais elegante, e que funcione também pra largura da janela.
Só mais um acréscimo, já vi que existem diversos scripts de caixa de mensagem, principalmente os que alteram a caixa de texto padrão para uma no estilo "balãozinho" que isso é bem evidente, o tamanho dela se ajusta ao conteúdo que contém, basicamente essa é minha dúvida, se tem como fazer isso de forma simples individual para as janelas de meu interesse.

Código exemplo1: Scene para teste
#Criei uma scene para teste, em que:
Código: [Selecionar]
class Planting_Scene < Scene_Base
  def start
    super
    #`Para adicionar um fundo à scene:
    @background = Sprite.new #Cria-se um novo sprite
    @background.bitmap = SceneManager.background_bitmap #Extrai o fundo da Scene
   
    dummy_window = Window_Base.new(0,0,0,0)
    vertical_content_height = dummy_window.fitting_height(2)
    @planting_selectable = Planting_Selectable.new( 0 , 0,
        320, vertical_content_height )
   
  end
end

Window Selectable:

Código: [Selecionar]
class Planting_Selectable < Window_Selectable
  def initialize( x, y , width , height )
    self.create_commands_list()
    super
    self.fitting_height( 2 )
    self.update()
    self.draw_commands()
    #Ativa a janela para que seja utilizada
    self.activate()
    #Faz o cursor aparecer na primeira opção da janela
    self.select( 0 )
  end
 
  #O método update das janelas é chamado em todas as scenes
  def update
    super
    #Se o botão de decisão for pressionado e a janela estiver ativa
    if Input.trigger?(:C) && self.active
      Sound.play_ok
      chosen_option = @list[ self.index() ]
      run_option( chosen_option)
    end
  end
 
  def create_commands_list()
    @list = []
    commands = ["Plantar", "Sair"]
      for i in 0...commands.size
        @list.push( commands[i] )
      end
  end
 
  def draw_commands()
    for i in 0...@list.size
      #Cria um retângulo com o tamanho e posição correto para desenhar o texto
      #   do comando
      rect = self.item_rect(i)
      #Desenha no rect o comando de @list[i]
      self.draw_text( rect , @list[i] )
    end
  end #draw_commands()
 
  def item_max
    #Se a lista não foi instanciada, retorna 0
    if @list.nil?
      return 0
    else
    #Senão, retorna o tamanho da lista
      return @list.size
    end
  end #item_max
 
  def run_option( chosen_option )
    case chosen_option
    when "Plantar"
      msgbox("Opção escolhida foi Plantar")
    when "Sair"
      SceneManager.return
    end
  end
 
end #class

Segue em anexo imagem com o resultado.

Pois bem essas são minhas dúvidas. Esses código foram baseado nas aulas de Ruby do Alisson de Window_Selectable, portanto muito obrigado Alisson! Já aprendi algumas coisas  :XD:
« Última modificação: 05 Ago 2017, 13:08 por Baby..Face »


Acesse meu blog: bbfcmaker.wordpress.com

Alisson

  • *
  • Mensagens: 2957 Ouro: 1948

    Vencedor CRM Awards - Melhor Mapper Vencedor CRM Awards - Melhor Maker Participantes do Maps Together 2

  • Stay cool, calm and collected.
    • Unity
    • Facebook
    • Steam
    • Youtube
    • Ver perfil
    • E-mail
  • Dragon ScalesPhoenixEspada CRMBreaklance
Aula Ativa de Ruby/RGSS e outras linguagens de programação
Resposta 49 Online: 07 Ago 2017, 14:11
Fico feliz que as aulas deram frutos.
Fiz um pequeno teste aqui que talvez possa te dar uma luz:

Código: [Selecionar]
class Test_Window < Window_Base
 
  def initialize(x = 0, y = 0)
    # Estarei realizando o super padrão com 1/1 de dimensões para a janela.
    # Isso é apenas para garantir que não haverão erros, embora você possa sim
    # criar uma janela com 0/0 de dimensões.
    super(x, y, 1, 1)
    draw_stuff
  end
 
  # Estarei usando esse método para desenhar as coisas.
  # Note que o que fiz aqui serve apenas como demonstração, você pode querer
  # caprichar mais para deixar o código mais limpo criando a lista de
  # itens a serem desenhados externamente.
  def draw_stuff
    # Aqui estarei criando uma hash que será responsável por obter as dimensões
    # finais dos itens a serem desenhados.
    # Estas dimensões irão se expandir até caberem os itens a serem desenhados.
    dimensions = {:width => 0, :height => 0}
   
    # Nesta parte estarei chamando o método de exemplo "process_text_dimensions"
    # para que ele calcule as dimensões necessárias do texto a ser desenhado.
    # Recomendo que veja os exemplos abaixo e tente fazer com ícones, faces
    # e outras coisas.
    # Vale notar que ele modifica a variável local "dimensions" se for necessário.
    process_text_dimensions("Hey There!", 0, 0, dimensions)
    process_text_dimensions("Just some text.", 100, line_height, dimensions)
    process_text_dimensions("Another text in here.", 20, line_height * 2, dimensions)
   
    # Após ter calculado as dimensões necessárias, é hora de criar um bitmap
    # com as mesmas dimensões calculadas. Esse bitmap será usado como
    # o conteúdo final da janela.
    # Vou chamar o método "recreate_contents" que criei apenas para isso.
    recreate_contents(Bitmap.new(dimensions[:width], dimensions[:height]))
   
    # Após ter criado o bitmap de conteúdo da janela, podemos enfim desenhar
    # as coisas nela.
    # Eu recomendo usar as mesmas coordenadas/dimensões que usamos para
    # calcular o espaço necessário durante a criação das dimensões.
    draw_text_ex(0, 0, "Hey There!")
    draw_text_ex(100, line_height, "Just some text.")
    draw_text_ex(20, line_height * 2, "Another text in here.")
  end
 
  # Este método será encarregado de calcular as dimensões necessárias para
  # se desenhar um texto na janela.
  # Ele modifica a hash "dimensions" que usamos caso for necessário.
  def process_text_dimensions(text, x, y, out_dimensions)
    # Aqui obtemos o retângulo que determina as dimensões verdadeiras do
    # texto na janela.
    rect = contents.text_size(text)
   
    # Nesta parte nós calculamos as dimensões totais para se desenhar o texto nela.
    # Note que eu adicionei 2 na largura pois o Ace possui um erro ao calcular
    # a largura do texto em alguns casos. Isso não acontecia no XP nem no VX.
    calculated_width = x + rect.width + 2
    calculated_height = y + rect.height
   
    # Agora nós iremos checar se as dimensões atuais que passamos são menores
    # que as dimensões necessárias.
    # Caso elas sejam, ele irá alterar as dimensões que passamos.
    # Do contrário, ele não faz nenhuma alteração.
    # Precisamos fazer isso para a largura E altura, então nada de elsif.
    if out_dimensions[:width] < calculated_width
      out_dimensions[:width] = calculated_width
    end
    if out_dimensions[:height] < calculated_height
      out_dimensions[:height] = calculated_height
    end
  end
 
  # E por fim, este é o método que irá recriar o bitmap do conteúdo da janela.
  def recreate_contents(source_bitmap)
    # Como nós criamos o bitmap assim que o passamos como argumento,
    # não precisamos dar dispose nele.
    self.contents = source_bitmap
   
    # A largura da janela é a largura do conteúdo dela, somado com o padding
    # multiplicado por 2 (visto que temos padding na esquerda e na direita).
    self.width = contents.width + padding * 2
   
    # A mesma coisa do padding da largura se aplica ao padding da altura.
    self.height = contents.height + padding * 2
   
    # Se você não souber, o padding indica o quão longe da borda da janela
    # o conteúdo fica. Por padrão, é 12.
  end
 
end

Creio que se tiver entendido o conceito, você pode melhorar esse código, haha'




Baby..Face

  • *
  • Mensagens: 15 Ouro: 3
    • RPG Maker VX/Ace
    • Ver perfil
Aula Ativa de Ruby/RGSS e outras linguagens de programação
Resposta 50 Online: 10 Ago 2017, 20:50
Valeuzão por responder Alisson, no momento não posso olhar com calma a sua solução mas assim que puder estudarei seu código e comento.
Mais uma vez, valeus!
« Última modificação: 10 Ago 2017, 21:00 por Baby..Face »


Acesse meu blog: bbfcmaker.wordpress.com

 

Versão Mobile