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

Project1

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

[有事请教] ULDS如何实现地图局部消失或出现时产生渐变效果?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1356
在线时间
153 小时
注册时间
2019-5-31
帖子
68
跳转到指定楼层
1
发表于 2021-2-27 22:35:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 664145107 于 2021-2-28 14:45 编辑

多亏ULDS插件,做出了一个一直以来很想实现的效果:同一地图内部分区域只有进入时才出现
但是正如图所见进入对应区域时地图是突然出现的,比较生硬,加一个渐变过渡一下就会好很多,所以想问一下该如何实现

4.gif (1.24 MB, 下载次数: 34)

4.gif

Lv3.寻梦者

梦石
0
星屑
1356
在线时间
153 小时
注册时间
2019-5-31
帖子
68
2
 楼主| 发表于 2021-2-28 19:25:11 | 只看该作者
不要沉呀……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2978
在线时间
298 小时
注册时间
2018-4-6
帖子
328
3
发表于 2021-2-28 19:51:00 | 只看该作者
好像有行指令可以渐变,但是我忘了orz
范例里面应该有写的。
或者那个rgd的灯光脚本也包含有类似的代码。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1356
在线时间
153 小时
注册时间
2019-5-31
帖子
68
4
 楼主| 发表于 2021-2-28 19:56:41 | 只看该作者
whitedewxiao 发表于 2021-2-28 19:51
好像有行指令可以渐变,但是我忘了orz
范例里面应该有写的。
或者那个rgd的灯光脚本也包含有类似的代码。 ...

淡入淡出吗,那个我试过,是画面转黑再转回,但是这样做的话和切换场景没有区别了
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
16
星屑
11242
在线时间
1325 小时
注册时间
2020-3-21
帖子
357

极短23获奖

5
发表于 2021-3-1 00:41:33 | 只看该作者
本来写了一大段然后提供了几个办法(依据实际情况),结果因为查别的东西查完后随手关了浏览器而导致没有记录了orz……
所以楼主直接贴出地图备注后直接给楼主最简单的办法吧……(依据你的实现方法来为ulds添加点功能或者直接推荐别的插件)
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1356
在线时间
153 小时
注册时间
2019-5-31
帖子
68
6
 楼主| 发表于 2021-3-1 20:09:55 | 只看该作者
本帖最后由 664145107 于 2021-3-1 20:11 编辑
仇九 发表于 2021-3-1 00:41
本来写了一大段然后提供了几个办法(依据实际情况),结果因为查别的东西查完后随手关了浏览器而导致没有记 ...


<ulds>{
"name":"!0-2-a_",
"visible":"$gameSwitches.value(2)",
"x":"this.rx(0)",
"y":"this.ry(0)",
"z":2,
"opacity":255,
"loop":false
}</ulds>

ulds是按照原本的用法使用的,没有对插件做任何修改(本来想改来着但是看不懂所以无从下手orz
用了不同的开关控制两个部分地图的可见度,然后做两个相邻事件,一个用来开对应开关另一个相反
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
16
星屑
11242
在线时间
1325 小时
注册时间
2020-3-21
帖子
357

极短23获奖

7
发表于 2021-3-1 23:10:27 | 只看该作者
本帖最后由 仇九 于 2021-3-1 23:14 编辑

JAVASCRIPT 代码复制下载
  1. //=============================================================================
  2. // ULDS.js
  3. //=============================================================================
  4.  
  5. /*:
  6.  * @plugindesc Unlimited Layer Display System.
  7.  * @author taroxd
  8.  *
  9.  * @param Default Path
  10.  * @desc The default path where pictures are stored.
  11.  * @default parallaxes
  12.  *
  13.  * @param Default Z
  14.  * @desc The default Z coordinate for sprites.
  15.  * @type number
  16.  * @decimals 2
  17.  * @min -15
  18.  * @max 15
  19.  * @default 0.5
  20.  *
  21.  * @help This plugin does not provide plugin commands.
  22.  *
  23.  * Map Note: <ulds> JSON </ulds>
  24.  * "name": picture filename
  25.  * "path": picture path (default to Default Path)
  26.  * "loop": true/false
  27.  *    Whether the picture should loop.
  28.  * "hue"/"smooth": the attribute of a Bitmap.
  29.  * <attribute>: the attribute of a Sprite.
  30.  *
  31.  * A string can be used as a value to be interpreted as a formula.
  32.  * In the formula, 't' refers to frame count.
  33.  *                 's' refers to $gameSwitches.
  34.  *                 'v' refers to $gameVaribles.
  35.  *
  36.  * Also, various helpers are available, defined in Helper.
  37.  *
  38.  * If a string is used as a formula of the attribute,
  39.  * the attribute will be updated every frame.
  40.  *
  41.  * By the way, attributes such as "anchor.x" is also available.
  42.  *
  43.  *
  44.  * Here is an example:
  45.  *
  46.    <ulds> {
  47.      "name": "BlueSky",
  48.      "x": "this.rx(t)",
  49.      "y": 50,
  50.      "loop": true,
  51.      "opacity": this.rx(v)
  52.    } </ulds>
  53.  *
  54.  */
  55.  
  56.  
  57. void function() {
  58.  
  59.     var assign = Object.assign || function(target) {
  60.         for (var i = 1; i < arguments.length; i++) {
  61.             var source = arguments[i];
  62.             for (var key in source) {
  63.                 target[key] = source[key];
  64.             }
  65.         }
  66.         return target;
  67.     };
  68.  
  69.     var RE = /<ulds>([^]*?)<\/ulds>/ig;
  70.     var parameters = PluginManager.parameters('ULDS');
  71.     var DEFAULT_SETTINGS = {
  72.         z: parseFloat(parameters['Default Z']),
  73.         path: parameters['Default Path'],
  74.         smooth: true
  75.     };
  76.  
  77.     // Feel free to add your own helper.
  78.     var Helper = {
  79.         t: 0,
  80.  
  81.         go: function(s,min,max,time) {
  82.                 if (this.godata==null) this.godata=[min,max,time,(max-min)/time,0];
  83.                 if (this.rem==null) {this.rem=false;return min;}
  84.                 if ($gameSwitches.value(s)!=this.rem) {
  85.                         this.rem=$gameSwitches.value(s);
  86.                         this.godata[4]=time;
  87.                 }
  88.                 if (this.godata[4]>0)  {
  89.                         this.godata[4]--;
  90.                         return this.rem? this.opacity+this.godata[3]:this.opacity-this.godata[3];
  91.                 }
  92.                 return this.opacity;
  93.         },
  94.  
  95.         // Converts a coordinate on the map to the corresponding coordinate on the screen.
  96.         rx: function(x, scrollRate) {
  97.             if (scrollRate == null) {
  98.                 scrollRate = $gameMap.tileWidth();
  99.             }
  100.  
  101.             if (scrollRate === 0) {
  102.                 return x;
  103.             } else {
  104.                 return $gameMap.adjustX(x / scrollRate) * scrollRate;
  105.             }
  106.         },
  107.  
  108.         ry: function(y, scrollRate) {
  109.             if (scrollRate == null) {
  110.                 scrollRate = $gameMap.tileHeight();
  111.             }
  112.  
  113.             if (scrollRate === 0) {
  114.                 return y;
  115.             } else {
  116.                 return $gameMap.adjustY(y / scrollRate) * scrollRate;
  117.             }
  118.         },
  119.  
  120.         update: function() {
  121.             ++this.t;
  122.             this._updater(this.t, $gameSwitches, $gameVariables);
  123.         },
  124.  
  125.         assignSettings: function(settings) {
  126.             var code = '';
  127.             for (var key in settings) {
  128.                 var value = settings[key];
  129.                 if (typeof(value) === 'string') {
  130.                     // this.x = (formula);
  131.                     // this.scale.x = (formula); // key is "scale.x"
  132.                     code += 'this.' + key + ' = (' + value + ');\n';
  133.                 } else {
  134.                     // if key is "scale.x"
  135.                     // keys is ["scale", "x"]
  136.                     var keys = key.split('.');
  137.                     // set key to "x"
  138.                     key = keys.pop();
  139.  
  140.                     var target = this;
  141.                     keys.forEach(function(k) {
  142.                         if (typeof(target) !== 'object') {
  143.                             target[k] = {};
  144.                         }
  145.                         target = target[k];
  146.                     });
  147.  
  148.                     target[key] = value;
  149.                 }
  150.             }
  151.             // You may log the code for debugging purpose.
  152.             // console.log(code);
  153.             this._updater = new Function('t', 's', 'v', code) ;
  154.         }
  155.     };
  156.  
  157.     // NOT a class constructor
  158.     function ULDS(settings) {
  159.         settings = assign({}, DEFAULT_SETTINGS, settings);
  160.         var spriteClass = settings.loop ? ULDS.TilingSprite : ULDS.Sprite;
  161.         var bitmap = ImageManager.loadBitmap('img/' + settings.path + '/',
  162.             settings.name, settings.hue, settings.smooth);
  163.         var sprite = new spriteClass(bitmap);
  164.  
  165.         delete settings.path;
  166.         delete settings.name;
  167.         delete settings.loop;
  168.         delete settings.hue;
  169.         delete settings.smooth;
  170.  
  171.         sprite.assignSettings(settings);
  172.  
  173.         return sprite;
  174.     }
  175.  
  176.     ULDS.Sprite = function(bitmap) {
  177.         Sprite.call(this, bitmap);
  178.     };
  179.  
  180.     ULDS.Sprite.prototype = Object.create(Sprite.prototype);
  181.     ULDS.Sprite.prototype.constructor = ULDS.Sprite;
  182.     assign(ULDS.Sprite.prototype, Helper);
  183.  
  184.     ULDS.TilingSprite = function(bitmap) {
  185.         TilingSprite.call(this, bitmap);
  186.         bitmap.addLoadListener(function() {
  187.             this.move(0, 0, bitmap.width, bitmap.height);
  188.         }.bind(this));
  189.     };
  190.  
  191.     ULDS.TilingSprite.prototype = Object.create(TilingSprite.prototype);
  192.     ULDS.TilingSprite.prototype.constructor = ULDS.TilingSprite;
  193.     assign(ULDS.TilingSprite.prototype, Helper);
  194.  
  195.     Object.defineProperties(ULDS.TilingSprite.prototype, {
  196.         x: {
  197.             get: function() { return -this.origin.x; },
  198.             set: function(x) { this.origin.x = -x; }
  199.         },
  200.         y: {
  201.             get: function() { return -this.origin.y; },
  202.             set: function(y) { this.origin.y = -y; }
  203.         }
  204.     });
  205.  
  206.     var ct = Spriteset_Map.prototype.createTilemap;
  207.     Spriteset_Map.prototype.createTilemap = function() {
  208.         ct.call(this);
  209.         $dataMap.note.replace(RE, function(_match, settings) {
  210.             var isValid = false;
  211.             try {
  212.                 settings = JSON.parse(settings);
  213.                 isValid = typeof(settings) === 'object';
  214.                 if (!isValid) {
  215.                     throw 'ULDS settings should be an object';
  216.                 }
  217.             } catch (e) {
  218.                 console.error(e);
  219.                 console.log(settings);
  220.             }
  221.             if (isValid) {
  222.                 this._tilemap.addChild(ULDS(settings));
  223.             }
  224.         }.bind(this));
  225.     };
  226. }();

我添加了一个函数go,这样使用:
<ulds>{
"name":"!0-2-a_",
"x":"this.rx(0)",
"y":"this.ry(0)",
"z":2,
"opacity":"this.go(2,0,255,60)",
"loop":false
}</ulds>
注意"opacity"后面的内容改了一下,并且删去了visible那一行。
初始图片透明度为0,开关2打开时,图片的透明度会在60帧内从0变到255,关闭开关2时,图片的透明度会在60帧内从255变到0。
this.go(开关id,最初透明度,变化后透明度,变化时间),这个只能用于opacity。
效果:

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1356
在线时间
153 小时
注册时间
2019-5-31
帖子
68
8
 楼主| 发表于 2021-3-2 01:04:49 | 只看该作者
本帖最后由 664145107 于 2021-3-2 01:05 编辑
仇九 发表于 2021-3-1 23:10
//=============================================================================
// ULDS.js
//======= ...


卧槽强啊!不过是不是意味着其他的远景图的visible那一条也要删去了呢
以及如果把时间从60改成0是不是就是立即出现图片了呢,如果是的话那似乎确实可以取代visible那条了
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1356
在线时间
153 小时
注册时间
2019-5-31
帖子
68
9
 楼主| 发表于 2021-3-2 16:11:18 | 只看该作者
仇九 发表于 2021-3-1 23:10
//=============================================================================
// ULDS.js
//======= ...

不知为何在我的工程里没有效果orz
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-16 11:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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