🤔 Para Refletir :
"Não confunda uma prorrogação em jogo do Juventus com a programação de um jogo por eventos."
- Jazz

RPG Maker MV Pulando no JavaScript - Parte 1 (main.js e rpg_scenes.js (Scene_Base)).

Virage Detoldev

Plebeu
Membro
Membro
Juntou-se
17 de Abril de 2017
Postagens
38
Bravecoins
7
Esse guia é uma adaptação/tradução do incrível trabalho feito pelo Trihan. O conteúdo original pode ser visto clicando aqui. A tradução do seu conteúdo foi autorizado por ele, como pode ser visto clicando aqui.


[greenalert]PULANDO NO JAVASCRIPT - PARTE 1 - MAIN.JS E RPG_SCENES.JS (SCENE_BASE)[/greenalert]

O RPG MAKER MV usa o renderizador de gráficos 2D chamado Pixi.js e vários objetos base usam os objetos do Pixi como prototypes.



[greenalert]main.js[/greenalert]


Código:
PluginManager.setup($plugins);

Este é um chamado da função setup, do objeto PluginManager, que irá armazenar o conteúdos dos plugins dentro da variável global $plugins.


Código:
window.onload = function() {
    SceneManager.run(Scene_Boot);
};

window.onload é um evento nativo do JavaScript que é iniciado ao abrir a janela do jogo pela primeira vez. Ele rodará o método run do objeto SceneManager, passando o valor Scene_Boot, que é a Scene que dará início ao jogo.



[greenalert]rpg_scenes.js[/greenalert]


Código:
function Scene_Base() {
    this.initialize.apply(this, arguments);
}

Declara a função inicial do Scene_Base e chama o método initialize. Não são usados nenhum parâmetros no método, mas no lugar ele chama apply, passando this e arguments.


Código:
Scene_Base.prototype = Object.create(Stage.prototype);
Scene_Base.prototype.constructor = Scene_Base;

Essa parte do código informa que o prototype do Scene_Base é um novo objeto, recebendo o Stage.prototype. Abaixo temos o construtor do Scene_Base, que é informado ser Scene_Base.


Código:
Scene_Base.prototype.initialize = function() {
    Stage.prototype.initialize.call(this);
    this._active = false;
    this._fadeSign = 0;
    this._fadeDuration = 0;
    this._fadeSprite = null;
};

Está sendo declarada a função initialize do prototype do Scene_Base. A primeira coisa é chamar a função initialize do Stage.prototype, passado no this. Depois são criadas algumas variáveis locais: _active, que tem valor false, _fadeSign, que tem valor 0, _fadeDuration, que tem valor 0 e _fadeSprite que terá valor null.


Código:
Scene_Base.prototype.create = function() {
};

Está sendo criado o construtor do Scene_Base, que é uma função sem nenhum código dentro.


Código:
Scene_Base.prototype.isActive = function() {
    return this._active;
};

Declaração da função isActive do prototype do Scene_Base, que retorna o valor de _active para a instância atual do objeto Scene_Base.


Código:
Scene_Base.prototype.isReady = function() {
    return ImageManager.isReady();
};

Cria a função isReady do prototype do Scene_Base, que retorna o valor da função isReady do ImageManager.


Código:
Scene_Base.prototype.start = function() {
    this._active = true;
};

Cria a função start do prototype do Scene_Base, que altera o valor da variável instanciada _active para verdadeiro.


Código:
Scene_Base.prototype.update = function() {
    this.updateFade();
    this.updateChildren();
    AudioManager.checkErrors();
};

A função update do prototype do Scene_Base chama (call) a função updateFade da instância, depois a função updateChildren da instância e por fim, a função checkErros do objeto AudioManager.


Código:
Scene_Base.prototype.stop = function() {
    this._active = false;
};

A função stop do prototype do Scene_Base altera a variável instanciada _active para false.


Código:
Scene_Base.prototype.isBusy = function() {
    return this._fadeDuration > 0;
};

A função isBusy do prototype do Scene_Base retorna true (verdadeiro) se o valor da variável instanciada _fadeDuration for maior que 0. Caso contrário, retorna false (falso).


Código:
Scene_Base.prototype.terminate = function() {
};

Função terminate do prototype do Scene_Base, que não tem nenhum código dentro.


Código:
Scene_Base.prototype.createWindowLayer = function() {
    var width = Graphics.boxWidth;
    var height = Graphics.boxHeight;
    var x = (Graphics.width - width) / 2;
    var y = (Graphics.height - height) / 2;
    this._windowLayer = new WindowLayer();
    this._windowLayer.move(x, y, width, height);
    this.addChild(this._windowLayer);
};

A função createWindowLayer do prototype do Scene_Base declara uma variável chamada width (largura), que irá retornar o valor do Graphics.boxWidth (Largura da Janela do Jogo), uma variável chamada height (altura), que irá retornar o valor de Graphics.boxHeight (Altura da Janela do Jogo), uma variável chamada x, que retornará metade de (Graphics.width - width) e uma variável chamada y, que irá retornar metade de (Graphics.height - height). A propriedade da instância windowLayer da Scene é definido como uma nova instância do objeto WindowLayer e chama a função move, passando as coordenadas x e y e os tamanhos de largura e altura. Por fim, chama a função addChild da função da Scene, passando as propriedades do windowLayer.


Código:
Scene_Base.prototype.addWindow = function(window) {
    this._windowLayer.addChild(window);
};

A função addWindow do prototype do Scene_Base recepe um único parâmetro (window) e chama a função addChild da instância do _windowLayer, passando o parâmetro window.


Código:
Scene_Base.prototype.startFadeIn = function(duration, white) {
    this.createFadeSprite(white);
    this._fadeSign = 1;
    this._fadeDuration = duration || 30;
    this._fadeSprite.opacity = 255;
};

A função startFadeIn do prototype do Scene_Base recebe dois parâmetros, duration (duração) e white (branco). Primeiro ele chama a função instanciada crateFadeSprite, passando o valor de white. _fadeSign recebe o valor 1, _fadeDuration receberá o valor de duration ou, caso não haja valor informado, receberá 30. Por fim, a pripriedade _fadeSprite do objeto é alterada para 255 (totalmente visível).


Código:
Scene_Base.prototype.startFadeOut = function(duration, white) {
    this.createFadeSprite(white);
    this._fadeSign = -1;
    this._fadeDuration = duration || 30;
    this._fadeSprite.opacity = 0;
};

A função startFadeOut do prototype do Scene_Base recebe dois parâmetros, duration e white. Primeiro ele chama a função instanciada createFadeSprite, que recebe o parâmetro white, depois _fadeSign recebe o valor -1, _fadeDurariton receberá o valor do parâmetro duration ou, se não houver nenhum valor, receberá 30. Por fim, a propriedade _fadeSprite do objeto receberá o valor 0 (totalmente transparente/invisível).


Código:
Scene_Base.prototype.createFadeSprite = function(white) {
    if (!this._fadeSprite) {
        this._fadeSprite = new ScreenSprite();
        this.addChild(this._fadeSprite);
    }
    if (white) {
        this._fadeSprite.setWhite();
    } else {
        this._fadeSprite.setBlack();
    }
};

A função createFadeSprite do prototype do Scene_Base recebe um parâmetro, white. Primeiro ele checa se a instância do scene tem ou não o _fadeSprite definino. Se não houver, nós declaramos que _fadeSprite é uma nova instância de ScreenSprite e adicionados o fadeSprite como child da scene.

Caso haja um valor de _fadeSprite, o _fadeSprite da instância irá chamar a função setWhite, se não, irá chamar a função setBlack.


Código:
Scene_Base.prototype.updateFade = function() {
    if (this._fadeDuration > 0) {
        var d = this._fadeDuration;
        if (this._fadeSign > 0) {
            this._fadeSprite.opacity -= this._fadeSprite.opacity / d;
        } else {
            this._fadeSprite.opacity += (255 - this._fadeSprite.opacity) / d;
        }
        this._fadeDuration--;
    }
};

A função updateFade do prototype do Scene_Base irá primeiro verificar se o _fadeDuration da instância é maior que 0 e, se for, a variável d é declarada como o _fadeDuration da instância. Se _fadeSign é maior que 0 (o que significa que o fadein foi iniciado), a opacidade do _fadeSprite é reduzida da opacidade atual dividido por d. Se _fadeSign não for maior que 0 (o que significa que fadeout foi iniciado), então a opacidade do _fadeSprite é aumentada em (255 menos a opacidade atual) dividido por d. Por fim, _fadeDuration recebe um decremento (-1 em seu valor).


Código:
Scene_Base.prototype.updateChildren = function() {
    this.children.forEach(function(child) {
        if (child.update) {
            child.update();
        }
    });
};

O método updateChildren do prototype do Scene_Base irá vasculhar entre o seu children e para cada child que tiver uma função update, irá rodar a função update deles.


Código:
Scene_Base.prototype.popScene = function() {
    SceneManager.pop();
};

A função popScene do prototype do Scene_Base irá chamar a função pop do SceneManager.


Código:
Scene_Base.prototype.checkGameover = function() {
    if ($gameParty.isAllDead()) {
        SceneManager.goto(Scene_Gameover);
    }
};

A função checkGameover do prototype do Scene_Base irá verificar se a função isAllDead da variável global $gameParty retornará true. Se retornar, chamada a função goto do SceneManager, passando Scene_Gameover.


Código:
Scene_Base.prototype.fadeOutAll = function() {
    var time = this.slowFadeSpeed() / 60;
    AudioManager.fadeOutBgm(time);
    AudioManager.fadeOutBgs(time);
    AudioManager.fadeOutMe(time);
    this.startFadeOut(this.slowFadeSpeed());
};

A função fadeOutAll do prototype do Scene_Base irá receber o valor de slowFadeSpeed() dividido por 60. AudioManager chamará as funções fadeOutBgm, fadeOutBgs e fadeOutMe passando a variável time como parâmetro e, por fim, a instância irá chamar a função startFadeOut, passando seu slowFadeSpeed.


Código:
Scene_Base.prototype.fadeSpeed = function() {
    return 24;
};

A função fadeSpeed do prototype do Scene_Base é direta do código fonte (hardcoded) e simplesmente retorna 24, que é o número de frames que um fade terá.


Código:
Scene_Base.prototype.slowFadeSpeed = function() {
    return this.fadeSpeed() * 2;
};

A função slowFadeSpeed do prototype é direta do código fonte (hardcoded) e simplesmente retorna fadeSpeed (24), multiplicado por 2 (48).




Tudo presente nesse guia é uma tradução direta do guia original. Caso tenha tempo livre e queria ajudar na tradução de outras partes, me contactar via PM.
 
Voltar
Topo Inferior