🤔 Para Refletir :
"Quando um mar de ideias aparecer, pesque todas com a rede e faça o banquete"
- Samuel Augusto

Ao invés de pintar um sprite, pintar todos os pixels?

Riven

Cidadão
Membro
Membro
Juntou-se
13 de Fevereiro de 2017
Postagens
133
Bravecoins
4
      • No Scene_Title há a imagem de background de fundo, RPG MAKER XP
      • Só que não quero utilizar imagem (vulgo Sprite, até por questão de tamanho do projeto)
        • Tentei então tirar o @sprite.bitmap = RPG::Cache.title($data_system.title_name) E colocar @g = Graphics.new, @g.set_color(red), mas deu erro, eu acho que é pq no site http://www.rubydoc.info/gems/openrgss/0.1.5/Graphics mostra que ele não tem essa função
        •   Tentei então com a classe rgss  Window (achando que era a janela (estilo jfram e jpane, g) com .tone = red, mas não deu também
          • Daí pensei em setar pixel por pixel e pintar de preto mas ai nem tentei fazer por duas razões: 1º que se eu pintar os pixels, a janelas(novo game, carregar, sair) do scene_title vão aparecer? 2º que acho que teria que utilizar algum tipo de matriz ou algo complexo que não sei ainda para selecionar todos os pixels da tela
          .

          Resumindo a pergunta: no rpg maker xp tudo que é  "visual" é baseado em imagens e janelas? tipo, sabe o public void paint(Graphics g) que tem no java, não tem algo parecido no rpg maker rgss? Ou tem alguma forma de pintar o fundo do Scene_title sem utilizar uma imagem.

          AGRADEÇO imensamente por responder meus tópicos.
 
Todas as rotinas de desenho são realizadas internamente e o usuário não tem acesso a elas.
Tente não iniciar o tópico criando uma lista e nem lista dentro de lista, isso atrapalha a leitura, alinhamento a esquerda também ajuda.
Se tens mais alguma dúvida só me citar no comentário (assim [member=1330]HermesPasser[/member]).
 
O Graphics no RGSS é diferente do Graphics no Java, no RGSS Graphics é só o módulo que cuida de desenhar tudo na tela, pra desenhar coisas efetivamente você precisa ter um objeto da classe Sprite, que tem um Bitmap.

O Sprite contém as informações de como mostrar o objeto na tela, isso inclui posição, cor, prioridade de desenho, opacidade, etc.

O Bitmap tem as informações para o quê será desenhado na tela, ou seja, as informações dos pixels.

Os bitmaps podem ser imagens carregadas de arquivos ou áreas de desenho com uma dimensão pré-determinada. Pra criar um sprite vazio onde eu posso desenhar que tem área 300x300, por exemplo, é feito o seguinte:
Código:
bitmap = Bitmap.new(300, 300)

Agora eu posso alterar os pixels desse bitmap usando as funções que a classe oferece, para a lista completa dessas funções, veja a documentação do RPG Maker. As que parecem ser o que você quer são fill_rect e set_pixel, com essas duas você desenha a forma geométrica que quiser no sprite.
Claro, a performance de chamar o set_pixel pra cada pixel no sprite é ridícula, então fica inviável atualizar o sprite todo frame com essa técnica, mas se você só chamar a função na inicialização não deve ter problema.

Exemplo de um sprite com uma linha vermelha em 30°, com 100 pixels de largura:
Código:
deg = 30
rad = deg * Math::PI / 180

cos = Math.cos(rad)
sin = Math.sin(rad)

width = 100
height = (sin / cos).abs * width

color = Color.new(255, 0, 0)

bitmap = Bitmap.new(width, height)

if width > height
  for x in 0...width
    y = (x / cos * sin).round
    bitmap.set_pixel(x, y, color)
  end
else
  for y in 0...width
    x = (y / sin * cos).round
    bitmap.set_pixel(x, y, color)
  end
end

sprite = Sprite.new
sprite.bitmap = bitmap

(Código feito sem testar com algoritmo porco e matemáica duvidosa, se não funcionar foi mal aí :v)

Era essa a pergunta?

Edit: arrumei o algoritmo da linha ^^
 
Voltar
Topo Inferior