O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Comando para mostrar imagem pelo Script?

Iniciado por SoyeR, 07/01/2018 às 11:39

07/01/2018 às 11:39 Última edição: 07/01/2018 às 11:43 por Corvo
Comando para mostrar imagem pelo Script? Olha eu mais uma vez tentei usar esse codigo aqui mas não deu

$game_map.screen.pictures[numero_da_imagem].show("Nome da Imagem", origem, x, y, zoom_x, zoom_y, opacidade, sinteticidade)


tentei esse tb

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?





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?

Citação de: King Gerar online 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?
não sei como fazer eu coloquei dentro daquela area onde escreve os textos  :viiish:





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


No script lá tu criou essa função para criar a janela na cena.
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.
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.

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:
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

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

Quando abre de 1º não aparece a imagem

edit:
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);
};





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

É 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.

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.

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.

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...

07/01/2018 às 14:21 #9 Última edição: 07/01/2018 às 14:27 por SoyeR
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.