Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o tema • Voltar para a ficha do tema
Lição 4 - Modificando nossa Janela - Usando dados variáveis
2 participantes
Página 1 de 1
Lição 4 - Modificando nossa Janela - Usando dados variáveis
Antes de iniciar esta aula eu quero pedir desculpas pois eu errei uma
coisa na 3º aula, Quando falamos de módulos eu disse que a sintaxe era:
MODULO::Procedimento
E na verdade é assim:
MODULO::Classe.procedimento
Descobri isso quando lia um dos posts, vi que estava errado. Por
falar em posts, meu professor costumava dizer que "Aluno que não
pergunta, ou entendeu tudo ou não entendeu nada." Se você está
entendendo tudo, ótimo, mas se não entendeu alguma coisa, poste,
pergunte, mande PM, porque a partir de agora a coisa vai pegar e, quem
estiver entendendo, vai se dar bem, quem não estiver...
Hoje vamos ver como usar as funções da nossa classe pai. Se você
não leu a Lição 3, pare agora e a leia, pois sem ela essa lição é
impossível. Caso você tenha perdido o projeto criado na lição 3, retorne
a ela crie-o novamente, pois continuaremos nele.
Vimos na aula anterior como escrever e colocar uma figura numa
janela, e como declarar uma janela de forma a ela ser consisa no game.
Hoje vamos fazer nossa janela exibir dados variáveis a partir de funções
da classe pai Window_Base. DADOS VARIÁVEIS??
Sim, seu game posui uma enormidade de dados variáveis, como o HP
do herói, sua experiência, e outras coisas. Abra o projeto anterior e,
abra o editor de scripts. Na sessão onde você criou a nossa janela. Se
vc fez tudo corretamente na aula passada, nossa classe deve estar assim:
Você deve ter percebido que a nossa janela só tem o procedimento
initialize. Desta forma, na hora em que a janela é chamada, todo o
conteúdo de initialize é lido e desenhado. Vamos colocar mais um
procedimento na nossa janela. Logo abaixo do primeiro end escreva assim:
def refresh
Logo abaixo dele, vamos pedir que a janela se limpe, usando o método clear, escreva assim:
self.contents.clear
Você já sabe o que o self e o contents, estamos fazendo com que o
conteúdo da janela seja limpo. Qual a necessidade disso? bem, você vai
ver...
Agora retire esta parte de código do procedimento initialize:
e coloque-o logo abaixo do self.contents.clear.
Seu código deve ficar assim:
Salve o código e rode o game. A janela vai aparecer vazia. Agora vá no
NPC e coloque o seguinte código junto com o que já está lá:
$janela.refresh
Nosso texto e nosso ícone voltaram a aparecer, porque chamamos o procedimento refresh. Para que não precisemos fazer isso sempre, vamos fazer com que a própria janela chame o procedimento. MAS COMO?? Muito simples, antes do end que fecha o procedimento initialize, escreva refresh.
Seu código deve estar assim:
Vá no NPC e comente a linha que chama o refresh(vamos usá-la mais tarde)
e rode o game. Até agora tudo bem. Vamos agora aprofundar um pouco
mais, vamos chamar uma função da classe pai, a função draw_actor_name(actor, x, y).
Quero ressaltar que, quando estamos DENTRO da classe, chamamos
procedimento, quando estamos FORA da classe, seu procedimento se torna
uma função. A função que vamos chamar da classe pai escreve na janela
onde foi chamada o nome de um ator(ou herói) designado no parâmetro actor, e x e y é aonde devemos desenhar. Mas como saber qual ator escrever o nome? Vamos ver essa função em ação. Vá na sessão Window_MenuStatus, na linha 34. você vai ver isto:
Mais para a frente aprenderemos o que significa esse i, por
enquanto vamos nos atentar ao que precisamos. copie esta linha. Vá na
nossa janela, no procedimento refresh e, antes de draw_text, cole a
linha. Agora troque o i por 0(zero). Comente a linha draw_text. logo abaixo de actor =... coloque a função draw_actor_name(actor, x, y). Substitua o x por icone.width + 4 e o y por 0(zero). Seu código deve estar assim:
Agora rode o game. Maravilha !! mas o que fizemos??
Criamos uma var local, a actor, e definimos para ela um valor, que vem de uma var global, a $game_party.
Como $game_party é uma var instanciada da classe Game_Party, eu posso
chamar suas funções e variáveis públicas. Neste caso, estamos lendo a
var publica actors que é uma var array, onde estão TODOS os
heróis do grupo de heróis. o número 0(zero) significa que queremos o
primeiro herói, aumente o número(1, 2, no máximo 3, senão haverá um
erro) e rode o game. Então é possível concluir que, usando deste
artifício, podemos retornar o que quisermos, de quem quisermos(heróis,
armas, itens, classes, habilidades, parâmetros, dinheiro do jogo) e
mostrar em qualquer lugar, em qualquer janela. Já que estamos embalados
em mostrar coisas, vamos fazer um "joguinho". Dentro do def initialize declare uma var pública com o nome de ator e como uma var numérica. Como fazer isso??
Assim:
Calma, você já vai saber o que é isso. Agora crie um outro NPC, e nele coloque um chamar Script com a seguinte linha:
Na linha actor = $game_party.actors[0], troque o 0(zero) pela var @ator.
Antes de testar, verifique se seu código está assim:
Agora rode o game. Fale com o primeiro NPC, depois fale repetidas vezes
com o segundo. Se você fez tudo correto, o nome escrito na janela deve
mudar.
A linha que criamos ali em cima, a qual você não entendeu
patavina, é uma linha condicional. Sim, igualzinho ás condições que você
vê dentro da programação de eventos. O seu uso agora foi apenas de
demonstração e as condicionais serão explicadas mais tarde.
CONCLUSÃO:
Nesta lição apenas vimos como criar novos procedimentos dentro
de uma janela, usar funções da classe pai e como funciona(basicamente) o
uso de Dados variáveis. Este assunto é muito, muito extenso, e para que
você não se sinta desmotivado, eu vou variar um pouco, e depois
voltamos ao assunto janelas, pois ainda há muito o que ver.
A partir desta lição eu começarei a colocar os Tópicos "Dicas e
Truques", onde você aprenderá várias coisas legais e úteis no RGSS,
enquanto treina seu conhecimento em programação.
Até.
coisa na 3º aula, Quando falamos de módulos eu disse que a sintaxe era:
MODULO::Procedimento
E na verdade é assim:
MODULO::Classe.procedimento
Descobri isso quando lia um dos posts, vi que estava errado. Por
falar em posts, meu professor costumava dizer que "Aluno que não
pergunta, ou entendeu tudo ou não entendeu nada." Se você está
entendendo tudo, ótimo, mas se não entendeu alguma coisa, poste,
pergunte, mande PM, porque a partir de agora a coisa vai pegar e, quem
estiver entendendo, vai se dar bem, quem não estiver...
Hoje vamos ver como usar as funções da nossa classe pai. Se você
não leu a Lição 3, pare agora e a leia, pois sem ela essa lição é
impossível. Caso você tenha perdido o projeto criado na lição 3, retorne
a ela crie-o novamente, pois continuaremos nele.
Vimos na aula anterior como escrever e colocar uma figura numa
janela, e como declarar uma janela de forma a ela ser consisa no game.
Hoje vamos fazer nossa janela exibir dados variáveis a partir de funções
da classe pai Window_Base. DADOS VARIÁVEIS??
Sim, seu game posui uma enormidade de dados variáveis, como o HP
do herói, sua experiência, e outras coisas. Abra o projeto anterior e,
abra o editor de scripts. Na sessão onde você criou a nossa janela. Se
vc fez tudo corretamente na aula passada, nossa classe deve estar assim:
- Código:
class Window_Minha < Window_Base
def initialize
super(32,32,120,64)
self.contents = Bitmap.new(width - 32, height - 32)
icone = RPG::Cache.icon("001-Weapon01")
rect = Rect.new(0, 0, icone.width, icone.height)
self.contents.blt(0, 0, icone, rect)
self.contents.draw_text(icone.width + 4, 0, self.width - 40, 32, "nome", 0)
end
end
Você deve ter percebido que a nossa janela só tem o procedimento
initialize. Desta forma, na hora em que a janela é chamada, todo o
conteúdo de initialize é lido e desenhado. Vamos colocar mais um
procedimento na nossa janela. Logo abaixo do primeiro end escreva assim:
def refresh
Logo abaixo dele, vamos pedir que a janela se limpe, usando o método clear, escreva assim:
self.contents.clear
Você já sabe o que o self e o contents, estamos fazendo com que o
conteúdo da janela seja limpo. Qual a necessidade disso? bem, você vai
ver...
Agora retire esta parte de código do procedimento initialize:
- Código:
icone = RPG::Cache.icon("001-Weapon01")
rect = Rect.new(0, 0, icone.width, icone.height)
self.contents.blt(0, 0, icone, rect)
self.contents.draw_text(icone.width + 4, 0, self.width - 40, 32, "nome", 0)
e coloque-o logo abaixo do self.contents.clear.
Seu código deve ficar assim:
- Código:
class Window_Minha < Window_Base
def initialize
super(32,32,120,64)
self.contents = Bitmap.new(width - 32, height - 32)
end
def refresh
self.contents.clear
icone = RPG::Cache.icon("001-Weapon01")
rect = Rect.new(0, 0, icone.width, icone.height)
self.contents.blt(0, 0, icone, rect)
self.contents.draw_text(icone.width + 4, 0, self.width - 40, 32, "nome", 0)
end
end
Salve o código e rode o game. A janela vai aparecer vazia. Agora vá no
NPC e coloque o seguinte código junto com o que já está lá:
$janela.refresh
Nosso texto e nosso ícone voltaram a aparecer, porque chamamos o procedimento refresh. Para que não precisemos fazer isso sempre, vamos fazer com que a própria janela chame o procedimento. MAS COMO?? Muito simples, antes do end que fecha o procedimento initialize, escreva refresh.
Seu código deve estar assim:
- Código:
class Window_Minha < Window_Base
def initialize
super(32,32,120,64)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
def refresh
self.contents.clear
icone = RPG::Cache.icon("001-Weapon01")
rect = Rect.new(0, 0, icone.width, icone.height)
self.contents.blt(0, 0, icone, rect)
self.contents.draw_text(icone.width + 4, 0, self.width - 40, 32, "nome", 0)
end
end
Vá no NPC e comente a linha que chama o refresh(vamos usá-la mais tarde)
e rode o game. Até agora tudo bem. Vamos agora aprofundar um pouco
mais, vamos chamar uma função da classe pai, a função draw_actor_name(actor, x, y).
Quero ressaltar que, quando estamos DENTRO da classe, chamamos
procedimento, quando estamos FORA da classe, seu procedimento se torna
uma função. A função que vamos chamar da classe pai escreve na janela
onde foi chamada o nome de um ator(ou herói) designado no parâmetro actor, e x e y é aonde devemos desenhar. Mas como saber qual ator escrever o nome? Vamos ver essa função em ação. Vá na sessão Window_MenuStatus, na linha 34. você vai ver isto:
- Código:
actor = $game_party.actors[i]
Mais para a frente aprenderemos o que significa esse i, por
enquanto vamos nos atentar ao que precisamos. copie esta linha. Vá na
nossa janela, no procedimento refresh e, antes de draw_text, cole a
linha. Agora troque o i por 0(zero). Comente a linha draw_text. logo abaixo de actor =... coloque a função draw_actor_name(actor, x, y). Substitua o x por icone.width + 4 e o y por 0(zero). Seu código deve estar assim:
- Código:
class Window_Minha < Window_Base
def initialize
super(32,32,120,64)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
def refresh
self.contents.clear
icone = RPG::Cache.icon("001-Weapon01")
rect = Rect.new(0, 0, icone.width, icone.height)
self.contents.blt(0, 0, icone, rect)
actor = $game_party.actors[0]
draw_actor_name(actor, icone.width + 4, 0)
#self.contents.draw_text(icone.width + 4, 0, self.width - 40, 32, "nome", 0)
end
end
Agora rode o game. Maravilha !! mas o que fizemos??
Criamos uma var local, a actor, e definimos para ela um valor, que vem de uma var global, a $game_party.
Como $game_party é uma var instanciada da classe Game_Party, eu posso
chamar suas funções e variáveis públicas. Neste caso, estamos lendo a
var publica actors que é uma var array, onde estão TODOS os
heróis do grupo de heróis. o número 0(zero) significa que queremos o
primeiro herói, aumente o número(1, 2, no máximo 3, senão haverá um
erro) e rode o game. Então é possível concluir que, usando deste
artifício, podemos retornar o que quisermos, de quem quisermos(heróis,
armas, itens, classes, habilidades, parâmetros, dinheiro do jogo) e
mostrar em qualquer lugar, em qualquer janela. Já que estamos embalados
em mostrar coisas, vamos fazer um "joguinho". Dentro do def initialize declare uma var pública com o nome de ator e como uma var numérica. Como fazer isso??
Assim:
- Código:
@ator = 0
- Código:
@ator == 3 ? @ator = 0 : @ator += 1
Calma, você já vai saber o que é isso. Agora crie um outro NPC, e nele coloque um chamar Script com a seguinte linha:
- Código:
$janela.refresh
Na linha actor = $game_party.actors[0], troque o 0(zero) pela var @ator.
Antes de testar, verifique se seu código está assim:
- Código:
class Window_Minha < Window_Base
def initialize
super(32,32,120,64)
self.contents = Bitmap.new(width - 32, height - 32)
@ator = 0
refresh
end
def refresh
self.contents.clear
@ator == 3 ? @ator = 0 : @ator += 1
icone = RPG::Cache.icon("001-Weapon01")
rect = Rect.new(0, 0, icone.width, icone.height)
self.contents.blt(0, 0, icone, rect)
actor = $game_party.actors[@ator]
draw_actor_name(actor, icone.width + 4, 0)
#self.contents.draw_text(icone.width + 4, 0, self.width - 40, 32, "nome", 0)
end
end
Agora rode o game. Fale com o primeiro NPC, depois fale repetidas vezes
com o segundo. Se você fez tudo correto, o nome escrito na janela deve
mudar.
A linha que criamos ali em cima, a qual você não entendeu
patavina, é uma linha condicional. Sim, igualzinho ás condições que você
vê dentro da programação de eventos. O seu uso agora foi apenas de
demonstração e as condicionais serão explicadas mais tarde.
CONCLUSÃO:
Nesta lição apenas vimos como criar novos procedimentos dentro
de uma janela, usar funções da classe pai e como funciona(basicamente) o
uso de Dados variáveis. Este assunto é muito, muito extenso, e para que
você não se sinta desmotivado, eu vou variar um pouco, e depois
voltamos ao assunto janelas, pois ainda há muito o que ver.
A partir desta lição eu começarei a colocar os Tópicos "Dicas e
Truques", onde você aprenderá várias coisas legais e úteis no RGSS,
enquanto treina seu conhecimento em programação.
Até.
Nothing- Iniciante
- Mensagens : 43
Créditos : 8
Re: Lição 4 - Modificando nossa Janela - Usando dados variáveis
Olha, quando eu vou falar com o segundo NPC aparece o seguinte erro:
Ocorreu um erro NoMethodError, durante operação de script.
undefined method 'refresh' for nil:NilClass
E olha que eu já tentei copiar o seu script mas dá o mesmo erro. Já tentei arrumar e nada
O que pode ter sido?
Ocorreu um erro NoMethodError, durante operação de script.
undefined method 'refresh' for nil:NilClass
E olha que eu já tentei copiar o seu script mas dá o mesmo erro. Já tentei arrumar e nada
O que pode ter sido?
MakotoSG- Novato
- Mensagens : 29
Créditos : 2
Tópicos semelhantes
» Lição 3 - Nossa primeira Classe - Uma Janela
» Lição 5 - Sprites e Planes - Usando e abusando das imagens
» Lição 9 - Janelas - Um pouco sobre a Window_Selectable
» Modificando e Entendendo os Status
» [Prof ~] Modificando Cursor do Jogo
» Lição 5 - Sprites e Planes - Usando e abusando das imagens
» Lição 9 - Janelas - Um pouco sobre a Window_Selectable
» Modificando e Entendendo os Status
» [Prof ~] Modificando Cursor do Jogo
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos