Adicionar "esperar animação" ao plugin Galv MV Picture Animations

22 Respostas   693 Visualizações

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

Naemegashi Yokohuro

  • *
  • Posts: 414
  • Ouros: 374
Tópico criado em: 13/03/2017 às 01:26 - Última modificação por Alisson em 14/03/2017 às 19:14

Seria possível adicionar nesse plugin, a opção de esperar a animação para então continuar a execução do resto?
Pois do jeito que esta, ele roda como se fosse em paralelo, gostaria de adicionar a opção de roda-lo também em "inicio automático" ,  pra ele forçar o a engine a esperar completar a animação, e assim prosseguir normalmente.
Link do plugin: :link:
Agradeço desde já.
 

Código: [Selecionar]
//-----------------------------------------------------------------------------
//  Galv's Picture Animations
//-----------------------------------------------------------------------------
//  For: RPGMAKER MV
//  GALV_PictureAnims.js
//-----------------------------------------------------------------------------
//  2017-01-18 - Version 1.2 - fixed a crash when erasing picture before battle
//  2016-08-22 - Version 1.1 - fixed crash when transferring to another map
//  2016-08-17 - Version 1.0 - release
//-----------------------------------------------------------------------------
// Terms can be found at:
// galvs-scripts.com
//-----------------------------------------------------------------------------

var Imported = Imported || {};
Imported.Galv_PictureAnims = true;

var Galv = Galv || {};              // Galv's main object
Galv.PIC = Galv.PIC || {};      // Galv's stuff

//-----------------------------------------------------------------------------
/*:
 * @plugindesc (v.1.2) Play database animations on pictures made with "Show Picture"
 *
 * @author Galv - galvs-scripts.com
 *
 * @param
 * @desc
 * @default
 *
 * @help
 *   Galv's Picture Animations
 * ----------------------------------------------------------------------------
 * This plugin allows you to play animation on pictures created with the
 * "Show Picture" event command. To do this, use a script call:
 *
 *    Galv.PIC.anim(picId,animId);   // picId = Picture number to play anim on
 *                                   // animId = animation id from the database
 *
 */

//-----------------------------------------------------------------------------
//  CODE STUFFS
//-----------------------------------------------------------------------------

(function() {


Galv.PIC.anim = function(picId,animId) {
if ($gameScreen._pictures[picId]) $gameScreen._pictures[picId]._animationId = animId;
};

Galv.PIC.Sprite_Picture_initialize = Sprite_Picture.prototype.initialize;
Sprite_Picture.prototype.initialize = function(pictureId) {
this._animationSprites = [];
this._effectTarget = this;
this._hiding = false;
    Galv.PIC.Sprite_Picture_initialize.call(this,pictureId);
};

Galv.PIC.Sprite_Picture_updateOther = Sprite_Picture.prototype.updateOther;
Sprite_Picture.prototype.updateOther = function() {
Galv.PIC.Sprite_Picture_updateOther.call(this);
this.updateAnimation();
this.updateVisibility();
this.updateAnimationSprites();
};

Sprite_Picture.prototype.updateAnimation = function() {
    this.setupAnimation();
    if (!this.isAnimationPlaying()) {
    this._animationPlaying = false;
    }
};

Sprite_Picture.prototype.setupAnimation = function() {
var pic = this.picture();
    if (pic && pic._animationId > 0) {
this._animId = $gameScreen._pictures[this._pictureId]._animationId;
        var animation = $dataAnimations[this._animId];
        this.startAnimation(animation, false, 0);
$gameScreen._pictures[this._pictureId]._animationId = 0;
this._animationPlaying = true;
    }
};

Sprite_Picture.prototype.startAnimation = function(animation, mirror, delay) {
    var sprite = new Sprite_Animation();
    sprite.setup(this._effectTarget, animation, mirror, delay);
sprite.opaque = true;
    this.parent.addChild(sprite);
    this._animationSprites.push(sprite);
};

Sprite_Picture.prototype.isAnimationPlaying = function() {
    return this._animationSprites.length > 0;
};

Sprite_Picture.prototype.updateAnimationSprites = function() {
    if (this._animationSprites.length > 0) {
        var sprites = this._animationSprites.clone();
        this._animationSprites = [];
        for (var i = 0; i < sprites.length; i++) {
            var sprite = sprites[i];
            if (sprite.isPlaying()) {
                this._animationSprites.push(sprite);
            } else {
                sprite.remove();
            }
        }
    }
};

Sprite_Picture.prototype.hide = function() {
    this._hiding = true;
};

Sprite_Picture.prototype.show = function() {
    this._hiding = false;
};

Sprite_Picture.prototype.updateVisibility = function() {
    this.visible = !this._hiding;
};

})();


Syureri

Resposta 1: 13/03/2017 às 17:26

Eu tava vendo aqui o corpo do script e achei mais vantajoso fazer um do zero. .
Esse aí vai esperar a animação terminar, porém os testes que eu realizei nele foram poucos. Testa aí e me diz se tá funcionando como queira.

Naemegashi Yokohuro

  • *
  • Posts: 414
  • Ouros: 374
Resposta 2: 13/03/2017 às 20:05

Eu tava vendo aqui o corpo do script e achei mais vantajoso fazer um do zero. .
Esse aí vai esperar a animação terminar, porém os testes que eu realizei nele foram poucos. Testa aí e me diz se tá funcionando como queira.

Muito obrigado Allison, mas infelizmente, ele esta retornando um erro.

Syureri

Resposta 3: 13/03/2017 às 20:44

Poderia me mostrar como está a página do evento onde você está usando o comando?

Naemegashi Yokohuro

  • *
  • Posts: 414
  • Ouros: 374
Resposta 4: 13/03/2017 às 21:11 - Última modificação por Naemegashi Yokohuro em 13/03/2017 às 21:45

Poderia me mostrar como está a página do evento onde você está usando o comando?
Na verdade Allison, estou chamando ele em um plugin, da pra te mostrar mas são umas 1000 linhas kkk XD.
Eu não tenho certeza se esse é o motivo, mas as vezes, quando o plugin inicia, ele da o seguinte erro:
Código: [Selecionar]
Uncaught TypeError: Cannot read property 'width' of null
rpg_managers.js:1589 file:///C:/Users/Jefferson/Documents/Games/TCG/js/rpg_core.js 3386
rpg_core.js:3386 Uncaught TypeError: Cannot read property 'width' of null
E sim, é só as vezes, as vezes acontece e as vezes não.

No rpg_core.js, o erro da nessa parte:
Código: [Selecionar]
Sprite.prototype._onBitmapLoad = function() {
    if (this._frame.width === 0 && this._frame.height === 0) {
        this._frame.width = this._bitmap.width;
        this._frame.height = this._bitmap.height;
    }
    this._refresh();
};
Mais especifico nessa parte:
Código: [Selecionar]
this._frame.width = this._bitmap.width;

Syureri

Resposta 5: 13/03/2017 às 21:15

Hm, entendo. É que o plugin foi feito para ser usado no chamar script, daí eu teria que ver exatamente onde tu tá usando o código pra poder ver o que tá causando "incompatibilidade" ahuaha
E que nada, 1000 linhas é pouco comparado ao que eu já vi :v

Naemegashi Yokohuro

  • *
  • Posts: 414
  • Ouros: 374
Resposta 6: 13/03/2017 às 21:29

Hm, entendo. É que o plugin foi feito para ser usado no chamar script, daí eu teria que ver exatamente onde tu tá usando o código pra poder ver o que tá causando "incompatibilidade" ahuaha
E que nada, 1000 linhas é pouco comparado ao que eu já vi :v

Então Allison, todo o plugin que fiz, na parte gráfica, faz uso apenas do comando $gameScreen.ShowPictures, apenas isso mesmo.

Syureri

Resposta 7: 13/03/2017 às 21:36

Ah, o comando tá sendo usado antes da imagem ser criada...
Spoiler
[close]
Eu não recomendaria tu usar ele ao mesmo tempo que o $gameScreen.ShowPictures não xD Mas vou arrumar aqui pra ele ignorar caso a imagem não exista ainda.

Syureri

Resposta 8: 13/03/2017 às 22:12

Aqui. Eu fiz uma pequena alteração que vai fazer ele ignorar o comando caso a imagem não tenha sido criada ainda.
Como já disse antes, eu não recomendo que você use ele diretamente dentro do comando $gameScreen.showPicture, visto que esse comando apenas cria as configurações da imagem (como o nome, posição, escala, e etc...), já a imagem em si é criada apenas depois, resultando no erro, sendo que para mostrar uma animação na imagem, é necessário que ela já tenha sido criada.

Naemegashi Yokohuro

  • *
  • Posts: 414
  • Ouros: 374
Resposta 9: 13/03/2017 às 22:18 - Última modificação por Naemegashi Yokohuro em 13/03/2017 às 22:22

Aqui. Eu fiz uma pequena alteração que vai fazer ele ignorar o comando caso a imagem não tenha sido criada ainda.
Como já disse antes, eu não recomendo que você use ele diretamente dentro do comando $gameScreen.showPicture, visto que esse comando apenas cria as configurações da imagem (como o nome, posição, escala, e etc...), já a imagem em si é criada apenas depois, resultando no erro, sendo que para mostrar uma animação na imagem, é necessário que ela já tenha sido criada.
Kkkk eu não tava usando ele dentro do comando Showpicture, eu usava ele após o Showpicture XD
Vou testar aqui, obrigado mais uma vez Allison o/

Edit.

Nas imagens "constantes" funcionou, as que são iniciadas bem antes do comando, mas as que são atualizadas junto com ele, não aparecem animação :/

Syureri

Resposta 10: 13/03/2017 às 22:20

Ah... nesse caso era só usar o comando Wait...
Spoiler
[close]

Naemegashi Yokohuro

  • *
  • Posts: 414
  • Ouros: 374
Resposta 11: 13/03/2017 às 22:26

Ah... nesse caso era só usar o comando Wait...
Spoiler
[close]

Tem como tu colocar ele no código pra mim? kkkk não sei usar esses comandos ainda XD

Syureri

Resposta 12: 13/03/2017 às 22:28

É o comando wait do editor mesmo, ou tu tá querendo usar ele via script? Se for o caso, i'll do it o/

Naemegashi Yokohuro

  • *
  • Posts: 414
  • Ouros: 374
Resposta 13: 13/03/2017 às 22:37

É o comando wait do editor mesmo, ou tu tá querendo usar ele via script? Se for o caso, i'll do it o/
É via Script mesmo, meu game esta todo em plugin ainda kk
Até agora só o TCG esta "feito", ainda não pensei em uma estória, mas como ele pega em base de dados e tal,  após a programação ficar pronta, é só pensar na estória XD

Syureri

Resposta 14: 13/03/2017 às 22:54

Ah, acabei de ter uma ideia sobre como contornar a situação. Vou dar uma mexida no script aqui pra fazer ele adicionar as animações em uma lista "reserva", daí não será necessário se preocupar com mais nada o/ Daqui a pouco eu mando.