Comando para mostrar imagem pelo Script?

9 Respostas   307 Visualizações

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

SoyeR

Tópico criado em: 07/01/2018 às 11:39 - Última modificação por Corvo em 07/01/2018 às 11:43

Comando para mostrar imagem pelo Script? Olha eu mais uma vez tentei usar esse codigo aqui mas não deu

Código: [Selecionar]
$game_map.screen.pictures[numero_da_imagem].show("Nome da Imagem", origem, x, y, zoom_x, zoom_y, opacidade, sinteticidade)
tentei esse tb

Código: [Selecionar]
Window_Base.prototype.drawPicture = function('Score art', 0, 0) {
    var bitmap = ImageManager.loadPicture('Score art');
    var pw = bitmap.width;
    var ph = bitmap.height;
    var sx = 0;
    var sy = 0;
    this.contents.blt(bitmap, sx, sy, pw, ph, x, y);
};

Alguem sabe como fazer?




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: 07/01/2018 às 11:46

O primeiro código não funcionaria pois são objetos completamente diferentes as imagens que tu mostra durante o gameplay e as imagens que tu desenha em janelas. Ainda que tu fosse mostrar uma imagem no gameplay, através de scripts o código para mostrá-la é muito diferente deste que mostra as imagens por evento. Este é mais restrito aos eventos mesmo.

Agora, tu já fez bem em testar o segundo, é isso mesmo, mas somente criou a função com esse código. Chegou a tentar chamar ela dentro da janela que tu criou?

SoyeR

Resposta 2: 07/01/2018 às 11:49

O primeiro código não funcionaria pois são objetos completamente diferentes as imagens que tu mostra durante o gameplay e as imagens que tu desenha em janelas. Ainda que tu fosse mostrar uma imagem no gameplay, através de scripts o código para mostrá-la é muito diferente deste que mostra as imagens por evento. Este é mais restrito aos eventos mesmo.

Agora, tu já fez bem em testar o segundo, é isso mesmo, mas somente criou a função com esse código. Chegou a tentar chamar ela dentro da janela que tu criou?
não sei como fazer eu coloquei dentro daquela area onde escreve os textos  :viiish:




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: 07/01/2018 às 11:57

Sabe sim porque tu já fez isso uma outra vez.

No script lá tu criou essa função para criar a janela na cena.
Código: [Selecionar]
Scene_Nome.prototype.createWindow = function() {
this._nomeWindow = new Window_Nome();
this.addWindow(this._nomeWindow);
};

Em seguida, foi lá na cena e, dentro de uma outra função, chamou ela.
Código: [Selecionar]
Scene_Nome.prototype.create = function() {
Scene_Base.prototype.create.call(this);
this.createWindowLayer();
this.createWindow();
};

Aqui tu vai fazer a mesma coisa. Tu criou a função que desenha a imagem dentro da janela, porém, não há nenhum lugar chamando esta função ainda, logo, a imagem não está sendo desenhada. Tu vai ter que ir na função que está desenhando coisas na janela e chamar lá a função que você criou.

Germinal

  • *
  • Posts: 164
  • Ouros: 105
Resposta 4: 07/01/2018 às 12:12

Imaginando e chutando o que você está fazendo (acho que envolve a tela de conquistas) o que você pode ta precisando eh o drawIcon:
this.drawIcon(número do icon no IconSet, posição na tela X, posição na tela Y);
Esse vai desenhar apenas um ícone pequeno, igual aos ícones de menu e skills. Só tem que colocar o ícone no IconSet, mas não é tão trabalhoso assim

Quanto ao seu método drawPicture, ele precisa ser um pouco adaptado, pois x e y não tem valor nenhum e acho que não funciona aquela 'Score art' na assinatura do método:
Código: [Selecionar]
Window_Base.prototype.drawPicture = function(imageName, x,y) {
    var bitmap = ImageManager.loadPicture(imageName);
    var pw = bitmap.width;
    var ph = bitmap.height;
    var sx = 0;
    var sy = 0;
    this.contents.blt(bitmap, sx, sy, pw, ph, x, y);
};

para usar esse método é só chamar:
this.drawPicture('Socre art', posição X, posição Y);

Meu javascript e conhecimento das bibliotecas do MV não são muito bons, mas acho que isso funciona

SoyeR

Resposta 5: 07/01/2018 às 12:20

Agora eu consegui fazer a imagem aparecer, mas só na segunda vez  :top:

Quando abre de 1º não aparece a imagem

edit:
Código: [Selecionar]
Window_Base.prototype.drawPicture = function(imageName, x,y) {
    var bitmap = ImageManager.loadPicture(imageName);
    var pw = bitmap.width;
    var ph = bitmap.height;
    var sx = 0;
    var sy = 0;
    this.contents.blt(bitmap, sx, sy, pw, ph, x, y);
};

Window_Nome.prototype.refresh = function() {


this.drawText("Boss Defeated: " + $gameVariables.value(22) + " / 5", 0, 130, this.contentsWidth(), 'left');
this.drawText("Treasures Found: " + $gameVariables.value(23) + " / 10", 0, 160, this.contentsWidth(), 'left');
this.drawText("Secret Zones: " + $gameVariables.value(24) + " / 2", 0, 190, this.contentsWidth(), 'left');
this.drawText("Heroes Found: " + $gameVariables.value(26) + " / 5", 0, 220, this.contentsWidth(), 'left');
this.drawText("Game Time: " +  $gameSystem.playtimeText() + " / 1:00:00", 0, 250, this.contentsWidth(), 'left');
this.drawText("Rank: " + $gameVariables.value(30) + " / 100", 0, 280, this.contentsWidth(), 'left');
this.drawPicture('Score art', 0, 0);
};




Germinal

  • *
  • Posts: 164
  • Ouros: 105
Resposta 6: 07/01/2018 às 12:34

Puts, dai não sei, pra mim se aparece os textos era pra ta aparecendo a imagem tb

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: 07/01/2018 às 13:05

É que a imagem não foi carregada. Quando tu chama ela para ser desenhada pela primeira vez, o jogo começa a carregar ela, porém, no momento em que ela vai ser desenhada não está completamente carregada ainda - é um intervalo de tempo minúsculo. Quando tu chama novamente, aí sim ela já está carregada e aí sim ela vai aparecer desenhadinha. A solução é pré-carregar ela.

No plugin padrão rpg_scenes tu vai procurar pela Scene_Boot. Esta cena é a primeira cena chamada assim que o jogo é executado, tanto que, se olhar na função create dela, é nela que está o carregamento da windowskin pois precisaremos desse gráfico logo no início, ali na tela de título. Nesta função create é onde iremos adicionar uma função para carregar as imagens que queremos, mas antes de um aliases.

Código: [Selecionar]
var _Scene_Boot_create = Scene_Boot.prototype.create;
Scene_Boot.prototype.create = function() {
_Scene_Boot_create.call(this);
};

O aliases permite que adicionemos mais comandos a uma função sem sobrescrever o que já temos da função. Poderíamos também copiar a função e adicionar mais comandos, porém, se dois scripts fazem isso, um sobrescreve os comandos que o outro escreveu e resulta em incompatibilidade. Com o aliases vamos guardar a função que temos em uma variável (onde está var ali), criar a função novamente e chamar essa variável como primeiro comando (a linha com o call), deste modo a função antiga será lida da mesma forma. A partir daí poderemos adicionar os comandos que quisermos.

Agora vamos a função que carrega a imagem.

Código: [Selecionar]
Scene_Boot.prototype.loadMyImages = function() {
ImageManager.loadPicture('Imagem');
};

Lembrando que, como usamos o loadPicture, a imagem deve estar na pasta pictures. Depois disso é só chamar esta função dentro da função create da Scene_Boot. Lembrando também que tudo isso deve ser feito no seu plugin, nada de alterar o plugin padrão.

Syureri

Resposta 8: 07/01/2018 às 13:34

Código: [Selecionar]
var afunc = function() {
    // a imagem estará carregada quando isso for chamado.
};
bitmap.addLoadListener(afunc.bind(this));

bitmap.addLoadListener é uma função que é chamada quando a imagem está completamente carregada. Se tu quiser carregar as coisas de antemão, recomendo a solução do geraldo. Mas aí é de tua preferência. Lembra aqueles loadings que tu vê nos jogos? Então...

SoyeR

Resposta 9: 07/01/2018 às 14:21 - Última modificação por SoyeR em 07/01/2018 às 14:27

Infelizmente nenhuma das duas deu certo comigo ou eu não entendi como fazer.  :facepalm: :facepalm:

EDIT  Pensei mais um pouco e antes de chamar a Cena eu carreguei por evento a imagem e no fim da cena apgar a imagem
Resolvido agora abre de primeira.