设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4716|回复: 5
打印 上一主题 下一主题

[原创发布] 多图层显示插件

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
37 小时
注册时间
2015-11-8
帖子
8
跳转到指定楼层
1
发表于 2017-7-12 09:38:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
显示多个图层的插件。可以把图片放在屏幕坐标上(跟随屏幕移动),或者放在地图坐标上。可以显示一张图片,或者让一张图片在一个区域内平铺。可以改变图片的透明度和现实顺序。

SimpleOverlay AddLayer layerName imageFileName isBindToScreen zIndex opacity xPosition yPosition
eg. SimpleOverlay AddLayer layer1 Fog false 11 100 0 0
显示图片。
图层名:layer1
图片名:Fog
是否使用屏幕坐标:不
显示优先度:11 (可以自己尝试-1到11之间的任何值。一般来说11是最上面。)
x坐标:0
y坐标: 0

SimpleOverlay AddTilingLayer layerName imageFileName isBindToScreen zIndex opacity xPosition yPosition width height xMovement yMovement
在区域内平铺图片。
width和height是区域长宽。
xMovement和yMovement是动画速度。

SimpleOverlay Clear
删除地图的全部图层


SimpleOverlay Clear layerName
删除名为“layerName”的图层

图层设置会和地图一起绑定保存,每个图层只要在一张地图上添加一次就行了。

  1. /*:
  2. * @plugindesc Display image layers on screen. Version: 1.0
  3. * @author Rui
  4. * @help
  5. * ----------------------------------------
  6. * SimpleOverlay AddLayer layerName imageFileName isBindToScreen zIndex opacity xPosition yPosition
  7. * ----------------------------------------
  8. * add image layer. layers are saved with map, only need to add once per map. place images in parallaxes folder.
  9. * isBindToScreen: if set to "true", image will stay on screen.
  10. * xPosition/yPosition: top-left position of layer.
  11. * zIndex: if set to "-1", layer is below everything else. if set to 10 or above, layer is above everything else.
  12. * opacity: 0-255
  13. * eg. SimpleOverlay AddLayer layer1 Fog false 11 100 0 0
  14. *
  15. *
  16. * ----------------------------------------
  17. * SimpleOverlay AddTilingLayer layerName imageFileName isBindToScreen zIndex opacity xPosition yPosition width height xMovement yMovement
  18. * ----------------------------------------
  19. * add image layer. layers are saved with map, only need to add once per map. place images in parallaxes folder.
  20. * isBindToScreen: if set to "true", image will stay in screen position.
  21. * xPosition/yPosition: top-left position of layer.
  22. * width/height: width and height of layer
  23. * xMovement/yMovement: animating layer
  24. * zIndex: if set to "-1", layer is below everything else. if set to 10 or above, layer is above everything else.
  25. * opacity: 0-255
  26. * eg. SimpleOverlay AddTilingLayer Fog sunlight true 11 100 0 0 800 800 1 0
  27. *
  28. *
  29. * ----------------------------------------
  30. * SimpleOverlay Clear
  31. * ----------------------------------------
  32. * clear all layers on this map
  33. *
  34. *
  35. * ----------------------------------------
  36. * SimpleOverlay Clear layerName
  37. * ----------------------------------------
  38. * clear layer with layerName
  39. *
  40. *
  41. * License: Free for non-commercial and commercial use
  42. */


  43. (function() {
  44.     //SimpleOverlayObj
  45.     function SimpleOverlay() {
  46.         this.simpleOverlayObjList = {};    //dictionary with mapID as key
  47.     }

  48.     SimpleOverlay.prototype.getSimpleOverlayObjListByMapID = function() {
  49.         var mapID = $gameMap.mapId().toString();
  50.         if (DataManager.___simpleOverlay___.simpleOverlayObjList.hasOwnProperty(mapID)) {
  51.             return DataManager.___simpleOverlay___.simpleOverlayObjList[mapID];
  52.         }
  53.         else {
  54.             DataManager.___simpleOverlay___.simpleOverlayObjList[mapID] = [];
  55.             return DataManager.___simpleOverlay___.simpleOverlayObjList[mapID];
  56.         }        
  57.     };

  58.     SimpleOverlay.prototype.hasLayer = function(layerName) {
  59.         var simpleOverlayObjList = DataManager.___simpleOverlay___.getSimpleOverlayObjListByMapID();
  60.         for (var i = simpleOverlayObjList.length - 1; i >= 0; i--) {
  61.             if (simpleOverlayObjList[i].layerName === layerName)
  62.                 return true;
  63.         }

  64.         return false;
  65.     }
  66.    
  67.     //SimpleOverlayObj object
  68.     function SimpleOverlayObj(layerName, imageFileName, isBindToScreen, zIndex, opacity, xPosition, yPosition, width, height, xMovement, yMovement, isTiling) {
  69.         this.layerName = layerName;
  70.         this.imageFileName = imageFileName;
  71.         this.isBindToScreen = isBindToScreen.toUpperCase() === "TRUE";
  72.         this.zIndex = parseInt(zIndex);
  73.         this.opacity = parseInt(opacity);
  74.         this.xPosition = parseInt(xPosition);
  75.         this.yPosition = parseInt(yPosition);
  76.         this.width = parseInt(width);
  77.         this.height = parseInt(height);
  78.         this.xMovement = parseInt(xMovement);
  79.         this.xMovement *= -1;
  80.         this.yMovement = parseInt(yMovement);
  81.         this.isTiling = isTiling.toUpperCase() === "TRUE";

  82.         this.delete = false;

  83.         DataManager.___simpleOverlay___.getSimpleOverlayObjListByMapID().push(this);
  84.     }

  85.     //add sprite when creating text or starting scene
  86.     SimpleOverlayObj.prototype.addSprite = function(spriteset_Map, x, y) {
  87.         if (this.isTiling == false) {
  88.             var sprite = new Sprite();
  89.             sprite.anchor.x = 0;
  90.             sprite.anchor.y = 0;
  91.             sprite.z = this.zIndex;
  92.             sprite.opacity = this.opacity;
  93.             sprite.bitmap = ImageManager.loadParallax(this.imageFileName);
  94.             sprite.___simpleOverlayObjRef___ = this;

  95.             spriteset_Map._tilemap.addChild(sprite);

  96.             sprite.x = x;
  97.             sprite.y = y;
  98.         }
  99.         else {
  100.             var sprite = new TilingSprite();
  101.             sprite.anchor.x = 0;
  102.             sprite.anchor.y = 0;
  103.             sprite.z = this.zIndex;
  104.             sprite.opacity = this.opacity;
  105.             sprite.bitmap = ImageManager.loadParallax(this.imageFileName);
  106.             sprite.___simpleOverlayObjRef___ = this;

  107.             spriteset_Map._tilemap.addChild(sprite);

  108.             sprite.move(x, y, this.width, this.height);
  109.         }
  110.     };

  111.     //update function
  112.     SimpleOverlayObj.prototype.update = function(index, spriteset_Map) {
  113.         var foundSprite = false;
  114.         var child = null;

  115.         for (var i = spriteset_Map._tilemap.children.length - 1; i >= 0; i--) {
  116.             child = spriteset_Map._tilemap.children[i];

  117.             if (typeof(child.___simpleOverlayObjRef___)==='undefined') {
  118.                 continue;
  119.             }
  120.             else {
  121.                 if (child.___simpleOverlayObjRef___ == this) {
  122.                     foundSprite = true;
  123.                     
  124.                     if (this.delete == true) {
  125.                         child.bitmap = null;
  126.                         spriteset_Map._tilemap.removeChildAt(i);
  127.                     }

  128.                     break;
  129.                 }
  130.             }
  131.         }

  132.         if (this.delete == true) {
  133.             DataManager.___simpleOverlay___.getSimpleOverlayObjListByMapID().splice(index, 1);
  134.             return;
  135.         }

  136.         //get center position
  137.         var centerX = this.xPosition;
  138.         var centerY = this.yPosition;

  139.         if (this.isBindToScreen == false) {
  140.             var tw = $gameMap.tileWidth();
  141.             var th = $gameMap.tileHeight();

  142.             var scrolledX = $gameMap.adjustX(this.xPosition / tw);
  143.             var scrolledY = $gameMap.adjustY(this.yPosition / th);

  144.             var screenX = Math.round(scrolledX * tw);
  145.             var screenY = Math.round(scrolledY * th + th);

  146.             centerX = screenX;
  147.             centerY = screenY - $gameMap.tileHeight();
  148.         }

  149.         //update sprite position
  150.         if (foundSprite == false) {
  151.             child = this.addSprite(spriteset_Map, centerX, centerY);
  152.         }
  153.         else {
  154.             if (this.isTiling == false) {
  155.                 child.x = centerX;
  156.                 child.y = centerY;
  157.             }
  158.             else {
  159.                 child.move(centerX, centerY, this.width, this.height);
  160.                 child.origin.x += this.xMovement;
  161.                 child.origin.y += this.yMovement;
  162.             }
  163.         }
  164.     };

  165.     //create SimpleOverlay in DataManager
  166.     var _DataManager_createGameObjects = DataManager.createGameObjects;
  167.     DataManager.createGameObjects = function() {
  168.         _DataManager_createGameObjects.call(this);

  169.         if (typeof(DataManager.___simpleOverlay___)==='undefined')
  170.             DataManager.___simpleOverlay___ = new SimpleOverlay();
  171.     };

  172.     //add sprites on createTilemap
  173.     var _Spriteset_Map_prototype_createTilemap = Spriteset_Map.prototype.createTilemap;
  174.     Spriteset_Map.prototype.createTilemap = function() {
  175.         _Spriteset_Map_prototype_createTilemap.call(this);

  176.         //remove all layer sprites if exits
  177.         for (var i = this._tilemap.children.length - 1; i >= 0; i--) {
  178.             var child = this._tilemap.children[i];

  179.             if (typeof(child.___simpleOverlayObjRef___)==='undefined') {
  180.                 continue;
  181.             }
  182.             else {
  183.                 child.bitmap = null;
  184.                 this._tilemap.removeChildAt(i);
  185.             }
  186.         }
  187.     }
  188.    
  189.     //update SimpleOverlayObjList
  190.     var _Spriteset_Map_prototype_updateTilemap = Spriteset_Map.prototype.updateTilemap;
  191.     Spriteset_Map.prototype.updateTilemap = function() {
  192.         _Spriteset_Map_prototype_updateTilemap.call(this);

  193.         var simpleOverlayObjList = DataManager.___simpleOverlay___.getSimpleOverlayObjListByMapID();
  194.         for (var i = simpleOverlayObjList.length - 1; i >= 0; i--)
  195.             simpleOverlayObjList[i].update(i, this);
  196.     };

  197.     //read plugin command
  198.     var _Game_Interpreter_prototype_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  199.     Game_Interpreter.prototype.pluginCommand = function(command, args) {
  200.         _Game_Interpreter_prototype_pluginCommand.call(this, command, args);
  201.         
  202.         //only work with Scene_Map
  203.         if (SceneManager._scene instanceof Scene_Map == false)
  204.             return;

  205.         var argsLength = args.length;
  206.         var action = args[0].toUpperCase();
  207.         if (action == "ADDLAYER") {
  208.             if (argsLength == 8) {
  209.                 var layerName = args[1];
  210.                 if (DataManager.___simpleOverlay___.hasLayer(layerName) == true)
  211.                     return;

  212.                 var simpleOverlayObj = new SimpleOverlayObj(args[1], args[2], args[3], args[4], args[5], args[6], args[7], "0", "0", "0", "0", "FALSE");
  213.             }
  214.         }
  215.         else if (action == "ADDTILINGLAYER") {
  216.             if (argsLength == 12) {
  217.                 var layerName = args[1];
  218.                 if (DataManager.___simpleOverlay___.hasLayer(layerName) == true)
  219.                     return;

  220.                 var simpleOverlayObj = new SimpleOverlayObj(args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], "TRUE");
  221.             }
  222.         }
  223.         else if (action == "CLEAR") {
  224.             if (argsLength == 2) {
  225.                 var layerName = args[1];
  226.                 var simpleOverlayObjList = DataManager.___simpleOverlay___.getSimpleOverlayObjListByMapID();
  227.                 for (var i = simpleOverlayObjList.length - 1; i >= 0; i--) {
  228.                     if (simpleOverlayObjList[i].layerName === layerName)
  229.                         simpleOverlayObjList[i].delete = true;     
  230.                 }
  231.             }
  232.             else if (argsLength == 1) {
  233.                 var simpleOverlayObjList = DataManager.___simpleOverlay___.getSimpleOverlayObjListByMapID();
  234.                 for (var i = simpleOverlayObjList.length - 1; i >= 0; i--) {
  235.                     simpleOverlayObjList[i].delete = true;   
  236.                 }
  237.             }
  238.         }
  239.     };
  240. })();
复制代码

评分

参与人数 1星屑 +40 收起 理由
铅笔描绘的思念 + 40 塞糖 排版希望好看点=w=

查看全部评分

Lv3.寻梦者

梦石
0
星屑
1344
在线时间
962 小时
注册时间
2012-4-30
帖子
1475

开拓者

2
发表于 2017-7-12 10:26:20 | 只看该作者
本帖最后由 铅笔描绘的思念 于 2017-7-12 10:27 编辑

请勿机翻 关键词都没了

好吧原来不是机翻 排版看得以为备注带中文的。。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1247
在线时间
179 小时
注册时间
2016-6-1
帖子
35
3
发表于 2017-7-12 10:54:59 | 只看该作者
。。。。。。。。。。。。。之前怎么找无限图层插件都找不到合手的,今天悬赏区发了个帖子,突然一下出来了好多图层插件

点评

(ง •̀_•́)ง ~~  发表于 2017-7-12 22:50
据主美说不是特别完善,还是我给你的那个overlay合手,反正等下午回去了再说~  发表于 2017-7-12 11:30
其实本版还有一个更好用的http://rm.66rpg.com/forum.php?mod=viewthread&tid=384603  发表于 2017-7-12 11:20
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-15 01:54

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表