Dúvida sobre o addChild

12 Respostas   751 Visualizações

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

ErickNeves

  • *
  • Posts: 32
  • Ouros: 0
  • Ajudem um pobre jovem a aprender JS para plugins
Tópico criado em: 19/03/2016 às 15:54 - Última modificação por ErickNeves em 19/03/2016 às 17:19

Sobre Rpg Maker MV

Boa tarde galera.
O nome do post já fala quase tudo.

Depois de um tempinho voltei a dar uma estudada no MV e dai me lembrei que estava travado nessa coisinha aqui.

Resumindo, meio que estou em duvidas sobre o addChild que me falaram em outros tópicos.

Exatamente qual sua função?
E como o usar?


Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Resposta 1: 20/03/2016 às 10:57

Ele vai adicionar um objeto à camada. Creio eu que esse método só é usado nas Scenes. Ao menos
eu não vi ele ser usado em outro lugar.

Por exemplo, quando tu cria uma imagem em uma Scene (dá uma olhada no código da tela de título
por exemplo) tu adiciona um addChild após criá-la, pois por meio desse addChild tu vai controlar ela
dentro da Scene. Isso também permite tu controlar o índice de exibição de algum objeto, por o maker
não ter valor z (como te disse em outro tópico, acho).
Talvez faça mais coisa, provavelmente sim, mas que eu saquei até então é isso xD

ErickNeves

  • *
  • Posts: 32
  • Ouros: 0
  • Ajudem um pobre jovem a aprender JS para plugins
Resposta 2: 20/03/2016 às 12:19

Vamos ver se eu entendi ou se ainda estou meio por fora, lá na parte da Scene_Title tem a parte do background

Código: [Selecionar]
Scene_Title.prototype.createBackground = function() {
    this._backSprite1 = new Sprite(ImageManager.loadTitle1($dataSystem.title1Name));
    this._backSprite2 = new Sprite(ImageManager.loadTitle2($dataSystem.title2Name));
    this.addChild(this._backSprite1);
    this.addChild(this._backSprite2);

Aqui praticamente manda carregar o backSprite1 e depois o backSprite2.
Ai usa o addChild.
Pela ordem colocada o 2 sobrepõem o 1.
Mas se eu tivesse colocado o addChild do 2 primeiro o 1 que iria sobrepor ele?

Mesmo que ali em cima carregou o 1 primeiro?

É isso?

Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Resposta 3: 20/03/2016 às 12:42

[...]
Mas se eu tivesse colocado o addChild do 2 primeiro o 1 que iria sobrepor ele?
[...]

Exato. Tu poderia ver isso mudando e testando pra tirar suas conclusões.
A ordem de carregamento acho que não importa muito, visto que no meu projeto eu carrego a maioria
das imagens no boot e quando vou usá-las uso o addChild pra organizar a disposição.

ErickNeves

  • *
  • Posts: 32
  • Ouros: 0
  • Ajudem um pobre jovem a aprender JS para plugins
Resposta 4: 20/03/2016 às 14:03

Estou entendendo melhor agora.

Só que por exemplo, eu crio as imagens assim:
Código: [Selecionar]
$gameScreen.showPicture(02, "LovePoint", 0, 550, 300, 150, 150, 255, 0);

Ai para colocar o background por exemplo é usado assim:
Código: [Selecionar]
this._backSprite1 = new Sprite(ImageManager.loadTitle1($dataSystem.title1Name));0

Nesse caso está colocando a imagem como um Sprite no lugar de só jogar ela na tela.
No caso é this.nome = new Sprite... e exatamente o que é o que vem?

Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Resposta 5: 20/03/2016 às 22:46

Não saquei a pergunta x_x

Mas é tipo isso que tu mesmo disse. Pra podermos exibir essa imagem, precisamos criá-la numa
"classe" que tenha sido feita para permitir isso, possibilitando chamar as funções pra controlar ela.
As classes scenes permitem isso, bem como a Game_Screen, pois ela controla a tela do jogo e
é onde são exibidas as imagens pelos comandos de eventos.

No caso do this._backSprite1, como essa imagem está sendo criada dentro de uma função, o
this vai ser a classe na quando a função está. Nesse caso, da classe Scene_Title.

ErickNeves

  • *
  • Posts: 32
  • Ouros: 0
  • Ajudem um pobre jovem a aprender JS para plugins
Resposta 6: 21/03/2016 às 08:43

Vamos ver se estou entendendo kk

O this serve para usar da imagem que foi criada dentro de uma outra classe/função.
Como se todas as imagens carregassem dentro de uma função assim que abre e o jogo e para elas serem usadas por fora precisa do this.

E minha pergunta mal entendida kk

Exatamente o que é essa linha de código:
Código: [Selecionar]
this._backSprite1 = new Sprite(ImageManager.loadTitle1($dataSystem.title1Name));0

Tipo assim... em pedaços o que é cada parte?

O this._backSprite1 é no caso o nome que estou dando a um novo sprite?

new Sprite é o comando de uma classe criada do MV para criar um novo sprite.

Agora dentro dele é que não estou entendendo certinho o que é cada elemento, (ImageManager.loadTitle1($dataSystem.title1Name))

ImageManager seria algo padrão ai?
O .loadTitle1  já é o nome de alguma coisa? Uma imagem?
$dataSystem é dizer que a informação que ele ta buscando é lá da "pasta" e não do que já está rodando?
E o .title1Name é o nome de uma imagem?

Spoiler
[close]

Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Resposta 7: 21/03/2016 às 08:55

Let's go!

this._backSprite1 = new Sprite(ImageManager.loadTitle1($dataSystem.title1Name));

this = classe "dona" do que vem na frente.
_backSprite1 = variável. Mas para ela existir precisa de uma classe para criá-la, assim o this
faz-se necessário. Para não se usar this, teria que usar uma outra classe, que não seja a
mesma que esta executando essa função que está criando essa imagem, como tu usou, por
exemplo, a Game_Screen (guardada na variável $gameScreen).
new = estabelece que a variável anterior será um novo objeto.
Sprite = estabelece que o objeto sendo criado será uma sprite, sendo assim, vai herdar as
propriedades da classe Sprite. Mas para o código criar essa imagem precisa saber qual imagem
é, então temos que definir o caminho da imagem no parênteses à frente.
ImageManager = classe que carrega a imagem para ser criada.
loadTitle1 = função da classe anterior que carrega a imagem Title1, definida no banco de dados.
$dataSystem = variável que guarda as informações da aba sistema do banco de dados.
title1Name = retorna o nome da imagem definida como Title 1 no banco de dados.
. = liga as informações.

ErickNeves

  • *
  • Posts: 32
  • Ouros: 0
  • Ajudem um pobre jovem a aprender JS para plugins
Resposta 8: 21/03/2016 às 09:54

Spoiler
[close]

Deixa eu ver... digamos que lá na pasta de imagens do meu projeto eu tenho a imagem com nome LifeBar

Eu faria algo tipo...

this._lifeBar1 = new Sprite(ImageManager.loadLifeBar($dataSystem.LifeBarName));

Básicamente isso?
A variável que vai receber os dados do sprite.
Ali no .load é uma função que eu teria criado em outro lugar onde nela eu fiz o comando de $gameScreen.showPicture?

E de final colocar o nome da imagem que estou pegando lá?


Spoiler
[close]

Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Resposta 9: 21/03/2016 às 10:04

O melhor exemplo seria tu abrir o código que vem com o programa e destrinchar ele pra entender,
disse e reforço isso. É bem mais fácil do que entender em teoria.

No caso, sua hipótese não daria certo. O que acompanha o $dataSystem não é o nome da imagem,
é o atributo que contém o nome da imagem. LifeBarName não é um atributo do banco de dados, logo
se tu usar isso vai retornar um erro.
Abre o rpg_managers e dá um Ctrl + F procurando loadPicture que vai ver a função lá.

É tudo questão de procurar. Tem tudo pronto nos códigos do programa. Mas é tudo código, lógica,
programação. Em teoria é só um monte de informação desorganizada na sua cabeça. Precisa de
prática pra saber como elas funcionam.

ErickNeves

  • *
  • Posts: 32
  • Ouros: 0
  • Ajudem um pobre jovem a aprender JS para plugins
Resposta 10: 21/03/2016 às 10:11 - Última modificação por ErickNeves em 21/03/2016 às 13:08

O melhor exemplo seria tu abrir o código que vem com o programa e destrinchar ele pra entender,
disse e reforço isso. É bem mais fácil do que entender em teoria.

No caso, sua hipótese não daria certo. O que acompanha o $dataSystem não é o nome da imagem,
é o atributo que contém o nome da imagem. LifeBarName não é um atributo do banco de dados, logo
se tu usar isso vai retornar um erro.
Abre o rpg_managers e dá um Ctrl + F procurando loadPicture que vai ver a função lá.

É tudo questão de procurar. Tem tudo pronto nos códigos do programa. Mas é tudo código, lógica,
programação. Em teoria é só um monte de informação desorganizada na sua cabeça. Precisa de
prática pra saber como elas funcionam.


Chegando em casa para almoçar eu vou dar uma olhada lá.
Em base eu acho que dei uma entendida, então procurando lá acho que devo entender o que faltou.
Tentarei fazer alguns testes e mando aqui o resultado se deu certo ou não.

De qualquer forma muito obrigado pela ajuda  :ok:



----------------EDIT--------------------

Vim fazer os testes aqui.
Entendi o conceito agora, só que me veio duvidas kk
Eu de teste só usei o title1Name no final também.
E ele me retorna erro no Castelo.png
Com isso eu entendi quem é o title1Name.


Ai eu vi lá onde você falou:
Código: [Selecionar]
ImageManager.loadPicture = function(filename, hue) {
    return this.loadBitmap('img/pictures/', filename, hue, true);
};

Então ai eu fui e deixei o meu assim:
Código: [Selecionar]
this._testSprite1= new Sprite(ImageManager.loadPicture("LoveBar",0));
if ($gameVariables.value(2) == 1){
this.addChild(this._testSprite1);
}

E sucess!
A imagem apareceu.
Bem no cantinho esquerdo superior.
Ai agora eu não sei... Como eu altero a localização dela dessa maneira?E como eu posso remover ela?

#Caramba não acredito que entendi finalmente  :wow:

iJackBoy

  • *
  • Posts: 47
  • Ouros: 8
  • Só sei que nada seihausehasueha
Resposta 11: 30/03/2016 às 13:30 - Última modificação por emerson_gin em 30/03/2016 às 13:35

Bom dia amigo, acho que você já deve ter aprendido ou não.

Mas respondendo a sua duvida, tudo relacionado a movimento, exclusão e aparição esta relacionado ao Sprite. Nos Sprite existem propriedades como nas bitmap's. Olhando o help do MV.

Encontrei isso:



São as propriedades de um Sprite, alterando aqui o bitmap vai junto.

###################
Já sobre o addChild.

Se não me engano existem 4 camadas de Child, claro que o programa adiciona em sequencia ou seja se a primeira Sprite é adiciona a segunda vai substituir e assim em sequencia.
Mas se você quer que a primeira seja superior as outras, você terá que usar a função: addChildAt ( child  index ), onde o Index vai controlar isso.


Espero ter ajudado alguém.




JS > ALLs

ErickNeves

  • *
  • Posts: 32
  • Ouros: 0
  • Ajudem um pobre jovem a aprender JS para plugins
Resposta 12: 11/04/2016 às 08:26

Spoiler
[close]

Esse finalzinho sobre o addChildAt eu não tinha visto ainda.
Eu precisei dar uma parada nos estudos por causa do trabalho, mas no fim fui demitido, então agora vou pegar firme nos estudos \o/

Espero não demorar pra pegar o ritmo das coisas e conseguir fazer uns plugin logo logo.

Obrigadão ai pela info.  :ok: