❤❣ღ rpg maker mv收集 ❤❣ღ
㊕rpg maker mv新功能☪

〄数据库道具上限提升 ✿自动三层级地图
☪高分辨率游戏画面 触屏控制✿
____________________________________________
多设备支持:
输出Windows exe文件、Mac App文件、安卓Apk和iOS ipa✿
Mac、android、windows☪

即使你不用懂编程☪、不用会代码,依然能制作属于自己游戏✿
————————————————
转载于插件の素材の等资源,免费下载☪
✉开发: KADOKAWA ✿ Yoji Ojima
✉发行: Degica
 

【推荐】地图缩放

作者:Masked

可以放大和缩小的游戏地图


v1.2.3更新:

固定的巨大的滞后造成使用脚本时;

固定的错误,不会让你改变缩放中心没有复位,重新缩放。





//=============================================================================

// MBS - Map Zoom (v1.2.3)

//-----------------------------------------------------------------------------

// por Masked

//=============================================================================

//-----------------------------------------------------------------------------

// Especificações do plugin (Não Modifique!)

// Plugin Specifications (Do not modify!)

//

/*:

 *

 * @author Masked

 * @plugindesc Makes it possible to zoom in and out the game map                        

 * 

 * <MBS MapZoom>

 * @help

 * ===========================================================================

 * Introduction

 * ===========================================================================

 * This script lets you change the game zoom as you want while in the map

 * scene.

 *

 * ===========================================================================

 * How to use

 * ===========================================================================

 * You can set the map zoom with this plugin command:

 * 

 * MapZoom set x [y [duration n]]

 * 

 * Just change 'x' and 'y' to the zoom ratio you want (you can use floats).

 * Note that the "y" parameter is optional, if you don't use it then the

 * script will assume it's equal to "x". If you want to define the zoom

 * duration you can add a third parameter 'duration' followed by the number

 * of frames the zoom operation will last. You can also add 'duration' as the

 * second parameter so that the 'y' zoom will be equal to the 'x'. If no

 * duration is set, it will be assumed it's 60 frames.

 * E.g.:

 * MapZoom set 2.0 duration 120

 * MapZoom set 2.0 1.5 duration 20

 *

 * If you want the zoom to be centralized on a specific X, Y coordinate or an

 * event, use this command:

 * MapZoom center x y

 * MapZoom center event id

 *

 * Just replace the 'x' and 'y' or 'id' for the values you want. E.g.:

 * MapZoom center 5 7

 * MapZoom center event 3

 *

 * To center on the player, use reset:

 * MapZoom center reset

 *

 * You can also use this to reset the zoom (set it to 1.0):

 * MapZoom reset [d]

 *

 * This will also reset the zoom center position.

 * If you want, you can choose the reset duration just changing 'd' for the

 * number of frames you want it to take.

 * E.g.:

 * MapZoom reset 30

 *

 * If you want some picture to zoom along with the map, add "[Zoom]" to its

 * name.

 * E.g.:

 * "img/pictures/SamplePicture1 [Zoom].png"

 *

 * ===========================================================================

 * Credits

 * ===========================================================================

 * - Masked, for creating.

 *

 * @param Reset on map change

 * @desc If you want the zoom to be reset when the map changes, set this

 * parameter to true. Set it to false otherwise.

 * @default true

*/

/*:pt

 *

 * @author Masked

 * @plugindesc Torna possível que você dê zoom no mapa durante o jogo.

 * 

 * <MBS MapZoom>

 * @help

 * ===========================================================================

 * Introdução

 * ===========================================================================

 * Esse script permite que você aumente ou diminua o zoom do jogo quando na

 * cena do mapa.

 *

 * ===========================================================================

 * Utilização

 * ===========================================================================

 * Para definir o zoom do mapa use o seguinte comando:

 * 

 * MapZoom set x [y [duration d]]

 * 

 * Troque o X e Y pelos valores de zoom que quiser. Você pode usar decimais.

 * Note que o "y" é opcional, e se não for definido o script assumirá que seu

 * valor é igual a X. Se você quiser, adicione um parâmetro 'duration' seguido

 * pelo número de frames que a operação deve levar, se a duração não for

 * especificada ela será 60.

 * 

 * Exemplos:

 * MapZoom set 2.0 duration 120

 * MapZoom set 2.0 1.5 duration 20

 *

 * Se você quiser, pode centralizar a câmera do zoom em um evento ou

 * coordenada usando esse comando:

 *

 * MapZoom center x y

 * MapZoom center event id

 *

 * Só troque o 'x' e 'y' ou 'id' pelos valores que quiser.

 * Exemplos:

 * MapZoom center 5 7

 * MapZoom center event 3

 *

 * Para centralizar no jogador, use o reset:

 * MapZoom center reset

 *

 * Você pode ainda resetar o zoom (mudar para 1.0):

 *

 * MapZoom reset [d]

 *

 * Se quiser, troque o '[d]' pelo número de frames que quiser que a operação

 * dure.

 *

 * Exemplos:

 * MapZoom reset 30

 * MapZoom reset

 *

 * Se quiser que uma picture seja afetada pelo zoom do mapa, adicione [Zoom] 

 * ao nome dela.

 * Exemplo:

 * "img/pictures/Imagem1 [Zoom].png"

 *

 * ===========================================================================

 * Créditos

 * ===========================================================================

 * - Masked, por criar.

 *

 * @param Reset on map change

 * @desc Caso queira que o zoom seja resetado quando o mapa mudar, deixe

 * como true. Se não, deixe como false.

 * @default true

 */


var Imported = Imported || {};


var MBS = MBS || {};

MBS.MapZoom = {};


"use strict";


(function ($) {


  $.Parameters = $plugins.filter(function(p) {return p.description.contains('<MBS MapZoom>');})[0].parameters;

  $.Param = $.Param || {};


  //-----------------------------------------------------------------------------

  // Configurações

  //


  // Resetar ao mudar o mapa

  $.Param.resetOnMapChange = ($.Parameters["Reset on map change"].toLowerCase() === "true");


  //-----------------------------------------------------------------------------

  // Game_Map

  //

  // O objeto do mapa do jogo


  // Alias

  var _GameMap_initialize = Game_Map.prototype.initialize;

  var _GameMap_setup = Game_Map.prototype.setup;

  var _GameMap_update = Game_Map.prototype.update;


  /**

   * Inicialização do objeto

   */

  Game_Map.prototype.initialize = function() {

    _GameMap_initialize.call(this);

    Game_Map._destZoom = Game_Map._destZoom || new PIXI.Point(0, 0);

    Game_Map._zoomTime = 0;

    Game_Map._zoomDuration = Game_Map._zoomDuration || 0;

    Game_Map._zoom = Game_Map._zoom || new PIXI.Point(1.0, 1.0);

    Game_Map._zoomCenter = null;

  };


  /**

   * Configuração do objeto

   */

  Game_Map.prototype.setup = function(mapId) {

    _GameMap_setup.call(this, mapId);

    if ($.Param.resetOnMapChange)

    Game_Map._zoom = new PIXI.Point(1.0, 1.0);

  };


  Game_Map.prototype.update = function () {

  _GameMap_update.apply(this, arguments);

  if (Game_Map._zoomDuration > Game_Map._zoomTime) {

    Game_Map.zoom.x += Game_Map._spdZoom.x;

    Game_Map.zoom.y += Game_Map._spdZoom.y;

        Game_Map._zoomTime++;

        this.onZoomChange();

} else if (Game_Map._zoomTime > 0) {

        Game_Map._zoomTime = 0;

        Game_Map._zoomDuration = 0;

        Game_Map._spdZoom = new Point(0, 0);

    }

  };


  /**

   * Definição do zoom do mapa

   */

  Game_Map.prototype.setZoom = function(x, y, duration) {

  duration = duration || 60;

  duration = Math.round(duration <= 0 ? 1 : duration) * 1.0;

  Game_Map._destZoom.x = Game_Map._destZoom.y = x;

  if (y) {

  Game_Map._destZoom.y = y;

  }

  Game_Map._spdZoom = new PIXI.Point((Game_Map._destZoom.x - Game_Map._zoom.x) / duration, (Game_Map._destZoom.y - Game_Map._zoom.y) / duration);

  Game_Map._zoomDuration = duration;

    Game_Map._zoomTime = 0;

  };


  Game_Map.prototype.setZoomCenter = function(a, b) {

  if (b) {

  Game_Map._zoomCenter = new PIXI.Point(a, b);

  } else if (a) {

  Game_Map._zoomCenter = a;

  } else {

  Game_Map._zoomCenter = null;

  }

  };


  /**

   * Evento de alteração de zoom

   */

  Game_Map.prototype.onZoomChange = function() {

    $gamePlayer.center((Game_Map._zoomCenter || $gamePlayer).x, (Game_Map._zoomCenter || $gamePlayer).y);

  };


  /**

   * Aquisição de cordenadas no mapa pelas cordenadas na tela

   */

  Game_Map.prototype.canvasToMapX = function(x) {

    var tileWidth = this.tileWidth() * Game_Map.zoom.x;

    var originX = this.displayX() * tileWidth;

    var mapX = Math.floor((originX + x) / tileWidth);

    return this.roundX(mapX);

  };


  /**

   * Aquisição de cordenadas no mapa pelas cordenadas na tela

   */

  Game_Map.prototype.canvasToMapY = function(y) {

    var tileHeight = this.tileHeight() * Game_Map.zoom.y;

    var originY = this.displayY() * tileHeight;

    var mapY = Math.floor((originY + y) / tileHeight);

    return this.roundY(mapY);

  };


  // Zoom

  Object.defineProperty(Game_Map, "zoom", {

  get: function() {

  return Game_Map._zoom;

  }

  });


  //-----------------------------------------------------------------------------

  // Game_Event

  //

  // Classe dos eventos


  var Game_Event_update = Game_Event.prototype.update;


  Game_Event.prototype.updateScroll = function(lastScrolledX, lastScrolledY) {

    var x1 = lastScrolledX;

    var y1 = lastScrolledY;

    var x2 = this.scrolledX();

    var y2 = this.scrolledY();

    if (y2 > y1 && y2 > $gamePlayer.centerY()) {

        $gameMap.scrollDown(y2 - y1);

    }

    if (x2 < x1 && x2 < $gamePlayer.centerX()) {

        $gameMap.scrollLeft(x1 - x2);

    }

    if (x2 > x1 && x2 > $gamePlayer.centerX()) {

        $gameMap.scrollRight(x2 - x1);

    }

    if (y2 < y1 && y2 < $gamePlayer.centerY()) {

        $gameMap.scrollUp(y1 - y2);

    }

  };


  Game_Event.prototype.update = function() {

    var lastScrolledX = this.scrolledX();

    var lastScrolledY = this.scrolledY();

    Game_Event_update.apply(this, arguments);

    if (this === Game_Map._zoomCenter)

    this.updateScroll(lastScrolledX, lastScrolledY);

  };


  //-----------------------------------------------------------------------------

  // Game_Player

  //

  // Classe do jogador


  // Alias

  var _GamePlayer_centerX = Game_Player.prototype.centerX;

  var _GamePlayer_centerY = Game_Player.prototype.centerY;

  var _GamePlayer_updateScroll = Game_Player.prototype.updateScroll;


  Game_Player.prototype.centerX = function() {

    return _GamePlayer_centerX.call(this) / Game_Map.zoom.x;

  };


  Game_Player.prototype.centerY = function() {

    return _GamePlayer_centerY.call(this) / Game_Map.zoom.y;

  };


  Game_Player.prototype.updateScroll = function(lastScrolledX, lastScrolledY) {

    if (!Game_Map._zoomCenter || Game_Map._zoomCenter === this) 

    _GamePlayer_updateScroll.apply(this, arguments);

  };


  //-----------------------------------------------------------------------------

  // Spriteset_Map

  //

  // Spriteset do mapa do jogo


  // Alias

  var _SpritesetMap_createLowLayer = Spriteset_Map.prototype.createLowerLayer;

  var _SpritesetMap_update = Spriteset_Map.prototype.update;


  Spriteset_Map.prototype.createLowerLayer = function() {

    _SpritesetMap_createLowLayer.apply(this, arguments);

    $gameMap.setZoom(Game_Map.zoom.x, Game_Map.zoom.y, 1);

  };


  Spriteset_Map.prototype.updatePosition = function() {

    var scale = Game_Map.zoom;

    var screen = $gameScreen;

    this.x = Math.round(-Game_Map.zoom.x * (scale.x - 1));

    this.y = Math.round(-Game_Map.zoom.y * (scale.x - 1));

    this.x += Math.round(screen.shake());

    if (this.scale.x !== scale.x || this.scale.y !== scale.y) {

        var dscale = Game_Map._destZoom;

        var sw = Graphics.width / dscale.x + this._tilemap._margin * 2;

        var sh = Graphics.height / dscale.y + this._tilemap._margin * 2;

        if ((this.scale.x > dscale.x || this.scale.y > dscale.y) && !(this.width === sw && this.height === sh)) {

            var w = ($gameMap.width() + 4) * $gameMap.tileWidth() + this._tilemap._margin * 2;

            var h = ($gameMap.height() + 3) * $gameMap.tileHeight() + this._tilemap._margin * 2;

            var r = w > this._tilemap.width || h > this._tilemap.height;

            if (r) {

                this._tilemap.width = Math.min(w, sw);

                this._tilemap.height = Math.min(h, sh);

                this._tilemap.refresh();

            }

        }

        this.scale = scale.clone();

        this._parallax.move(this._parallax.x, this._parallax.y, Graphics.width / scale.x, Graphics.height / scale.y);

    }

  };


  //-----------------------------------------------------------------------------

  // Tilemap

  //


  Tilemap.prototype._createLayers = function() {

    var width = this._width;

    var height = this._height;

    var margin = this._margin;

    var tileCols = Math.ceil(width / this._tileWidth) + 1;

    var tileRows = Math.ceil(height / this._tileHeight) + 1;

    var layerWidth = tileCols * this._tileWidth;

    var layerHeight = tileRows * this._tileHeight;


    if (this._lowerBitmap) {

        this._lowerBitmap.clear();

        this._lowerBitmap.resize(layerWidth, layerHeight);

    } else

        this._lowerBitmap = new Bitmap(layerWidth, layerHeight);


    if (this._upperBitmap) {

        this._upperBitmap.clear();

        this._upperBitmap.resize(layerWidth, layerHeight);

    }

    else

        this._upperBitmap = new Bitmap(layerWidth, layerHeight);


    this._layerWidth = layerWidth;

    this._layerHeight = layerHeight;


    this._lowerLayer = this._lowerLayer || new Sprite();

    this._lowerLayer.removeChildren();

    this._lowerLayer.move(-margin, -margin, width, height);

    this._lowerLayer.z = 0;


    this._upperLayer = this._upperLayer || new Sprite();

    this._upperLayer.removeChildren();

    this._upperLayer.move(-margin, -margin, width, height);

    this._upperLayer.z = 4;


    for (var i = 0; i < 4; i++) {

        this._lowerLayer.addChild(new Sprite(this._lowerBitmap));

        this._upperLayer.addChild(new Sprite(this._upperBitmap));

    }


    this.addChild(this._lowerLayer);

    this.addChild(this._upperLayer);

  };


  //-----------------------------------------------------------------------------

  // Game_Picture

  //

  // Objeto das pictures do jogo


  var _GamePicture_update = Game_Picture.prototype.update;


  Game_Picture.prototype.update = function() {

      _GamePicture_update.apply(this, arguments)

      if (this.mapZoom()) this.updateZoom();

  };


  Game_Picture.prototype.updateZoom = function() {

    if (this._duration > 0) {

        this._scaleX *= Game_Map.zoom.x;

        this._scaleY *= Game_Map.zoom.y;

    } else {

        this._scaleX = this._targetScaleX * Game_Map.zoom.x;

        this._scaleY = this._targetScaleY * Game_Map.zoom.y;

    }

  };


  Game_Picture.prototype.mapZoom = function() {

    return !!this.name().toLowerCase().match(/\s*\[\s*zoom\s*\]\s*/);

  };


  //-----------------------------------------------------------------------------

  // Game_Map

  //


  Game_Map.prototype.screenTileX = function() {

    return Graphics.width / this.tileWidth() / Game_Map.zoom.x;

  };


  Game_Map.prototype.screenTileY = function() {

    return Graphics.height / this.tileHeight() / Game_Map.zoom.y;

  };


  //-----------------------------------------------------------------------------

  // Plugin command

  //


  // Alias

  var _GameInterpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;


  /**

   * Comando de plugin

   */

  Game_Interpreter.prototype.pluginCommand = function (command, args) {

  _GameInterpreter_pluginCommand.call(this, command, args);

  if (command == "MapZoom") {

    if (args[0] == "set") {

    if (args[1]) {

      if (args[2]) {

      if (args[2] == "duration") {

      if (args[3]) {

      $gameMap.setZoom(Number(args[1]), Number(args[1]), Number(args[3]));

      }

      } else {

      if (args[3] == "duration") {

      if (args[4]) {

      $gameMap.setZoom(Number(args[1]), Number(args[2]), Number(args[4]));

      }

      } else {

      $gameMap.setZoom(Number(args[1]), Number(args[2]));

      }

      }

      } else {

      $gameMap.setZoom(Number(args[1]));

      }

    }

    } else if (args[0] == "reset") {

    if (args[1]) {

    $gameMap.setZoom(1.0, 1.0, Number(args[1]));

    } else {

    $gameMap.setZoom(1.0);

    }

        $gameMap.setZoomCenter();

    } else if (args[0] == "center") {

    if (args[1] == "event") {

    var ev = $gameMap.event(Number(args[2]));

    if (ev)

    $gameMap.setZoomCenter(ev);

    } else if (args[1] == "reset") {

    $gameMap.setZoomCenter();

    } else {

    $gameMap.setZoomCenter(Number(args[1]), Number(args[2]));

    }

        $gameMap.setZoom(Game_Map._destZoom.x, Game_Map._destZoom.y, Game_Map._zoomDuration - Game_Map._spdZoom);

    }

  }

  };


})(MBS.MapZoom);


if (Imported["MVCommons"]) {

  PluginManager.register("MBS_MapZoom", 1.2, "Makes it possible to zoom in and out the game map whenever you want", {  

      email: "masked.rpg@gmail.com",

      name: "Masked", 

      website: "N/A"

    }, "29-10-2015");

}


 
评论
 
热度(1)