Project1

标题: 求个技能动画可以从使用者身上飞到目标身上的插件 [打印本页]

作者: qq1065526265    时间: 2018-4-22 16:31
标题: 求个技能动画可以从使用者身上飞到目标身上的插件
比如说 弓箭  子弹  炮弹 导弹 什么的 总不能一发射就命中了吧   起码有个飞行过程  希望大大们给个  最好有视频教程  或者文字也许
作者: 梦想家大魔王    时间: 2018-4-22 16:31
Victor系列插件中有个Throwable Objects,实现的功能相对最完善,除了飞矢、子弹之类的飞行物体之外,还能做出回旋镖之类的效果。
但是这个作者的插件跟YEP中的ActSeqPack插件冲突,如果你的工程严重依赖YEP的动作指令序列的话,就没办法用这个了。
(实际上这个作者的插件中也有实现ActSeqPack类似功能的作品,只不过知名度不高用的人不多)
我用的是这个,实测兼容YEP。
JAVASCRIPT 代码复制下载
  1. //=============================================================================
  2. // MoveAnime2.js
  3. //=============================================================================
  4. //Copyright (c) 2016 Trb
  5. // This software is released under the MIT License.
  6. // [url]http://opensource.org/licenses/mit-license.php[/url]
  7. //
  8. //twitter [url]https://twitter.com/Trb_surasura[/url]
  9. /*:
  10.  * @plugindesc アニメーションを飛ばすプラグイン 2
  11.  * @author Trb
  12.  *
  13.  * @version 1.0(2.0)  2016 4/22 重大更新,与以前版本相比已是不同的两个插件。
  14.  *          1.1       2016 7/ 4 修复错误的动画起始位置(当动画显示位置为【目标头部】、【目标中心】时)。
  15.  *
  16.  *
  17.  * @help 让动画从使用者飞向目标。
  18.  * 设置方式有两种:在技能的备注区写NoteTag,或者使用脚本命令。
  19.  *
  20.  * ----设置方式1----
  21.  * 在技能的备注区
  22.  * <ani_move: a>
  23.  * <ani_arc: b>
  24.  * <ani_deflection: c>
  25.  * <ani_repeat: d>
  26.  * (a,b,c,d为任意数字)
  27.  * ani_move指令是必需的,其余指令是可选的。
  28.  *
  29.  * <ani_move:a>
  30.  *   飞行动画耗费的帧数。
  31.  *   (例如要在10帧内完成飞行就写<ani_move:10>)
  32.  *
  33.  * <ani_arc:b>
  34.  *   设置飞行轨迹弧线高度。
  35.  *   (单位是像素,例如<ani_arc:1>表示弧线顶点高度是1像素)
  36.  *
  37.  * <ani_deflection:c>
  38.  *   设置弧线轨迹的波动范围。
  39.  *   (<ani_arc:50> <ani_deflection:100> 表示arc的实际取值范围是-50~150)
  40.  *   一般用于多段攻击技能。
  41.  *
  42.  * <ani_repeat:d>
  43.  *   设置重复播放动画的次数。
  44.  *   これはYEP_BattleCoreを入れると連続攻撃時にアニメーションが1回しか表示されない問題に
  45.  *   対応するために追加した機能であり、
  46.  *   これ単体で使うと本来の再生回数*d回再生されるようになってしまうので注意して下さい。
  47.  *
  48.  *
  49.  * ----设置方法2----
  50.  * 脚本命令:setParams(动画ID,ani_move值,ani_arc值,ani_deflection值)
  51.  *
  52.  * 例如想要ID为5的动画飞行10帧
  53.  *                 setParams(5,10)
  54.  *  (ani_arc值、ani_deflection值若省略,则表示其与备注内容相同)
  55.  *
  56.  * 一经设定,数值可长久保存,除非被新值覆盖。
  57.  * 可以在事件中集中设置。
  58.  * 设置的数值不会保存到存档文件中。
  59.  *
  60.  *
  61.  * ==============================================================
  62.  *
  63.  * ----其他功能----
  64.  *
  65.  * setStartPosition(动画ID,x,y)
  66.  *   可以设置动画的起始位置不是技能的使用者,而是在指定的坐标位置。
  67.  *
  68.  *   例如想要ID为10的动画从坐标(100,200)开始飞行
  69.  *       setStartPosition(10,100,200)
  70.  *
  71.  *
  72.  * clearParams(动画ID)
  73.  *   重置指定动画的所有设置。
  74.  *
  75.  *
  76.  * @param use_field
  77.  * @desc 在非战斗时也可以飞行?
  78.  * 不可以・・・false  可以・・・true
  79.  * @default false
  80.  *
  81.  * @param variable
  82.  * @desc 存储setParams参数的变量ID。
  83.  * 0表示不存储。
  84.  * @default 0
  85.  *
  86.  *
  87.  */
  88. (function() {
  89.  
  90.     var parameters = PluginManager.parameters('MoveAnime2');
  91.     var UseField = String(parameters['use_field']);
  92.     var Variable = parameters['variable'];
  93.  
  94.     var params = [];
  95.     var subjectX = 0; //使用者的坐标
  96.     var subjectY = 0;
  97.     //params的内容
  98.     var moveDuration = 0,
  99.         arcRate = 1,
  100.         deflection = 2,
  101.         repeats = 3,
  102.         startX = 4,
  103.         startY = 5;
  104.  
  105.     //带入设定值
  106.     setParams = function(id, move, arc, def, rep) {
  107.         id = Math.max(id, 0);
  108.         if (!params[id]) params[id] = [];
  109.         params[id][moveDuration] = move || 0;
  110.         params[id][arcRate] = arc || 0;
  111.         params[id][deflection] = def || 0;
  112.         params[id][repeats] = rep || 0;
  113.     };
  114.  
  115.     setStartPosition = function(id, a, b) {
  116.         if (!params[id]) params[id] = [];
  117.         params[id][startX] = a;
  118.         params[id][startY] = b;
  119.     };
  120.  
  121.     clearParams = function(id) {
  122.         params[id] = [];
  123.     };
  124.  
  125.  
  126.  
  127.     var SBu = Sprite_Battler.prototype.update;
  128.     Sprite_Battler.prototype.update = function() {
  129.         SBu.call(this);
  130.         //获取当前行动角色的坐标
  131.         if (this._battler != null && this._battler.isActing()) {
  132.             if (!$gameSystem.isSideView() && this._actor) {
  133.                 //前视图
  134.                 subjectX = Graphics.boxWidth / 2;
  135.                 subjectY = Graphics.boxHeight * 0.8;
  136.             } else {
  137.                 subjectX = this.x;
  138.                 subjectY = this.y;
  139.             }
  140.         }
  141.  
  142.     };
  143.  
  144.     var WBsa = Window_BattleLog.prototype.startAction;
  145.     Window_BattleLog.prototype.startAction = function(subject, action, targets) {
  146.         var item = action.item();
  147.         if (Number(item.meta.ani_move) > 0) { //指定在技能备注区设置的move值
  148.             setParams(item.animationId, Number(item.meta.ani_move), Number(item.meta.ani_arc) || 0,
  149.                 Number(item.meta.ani_deflection) || 0, Number(item.meta.ani_repeat) || 0);
  150.         }
  151.         WBsa.call(this, subject, action, targets);
  152.     };
  153.  
  154.  
  155.     Window_BattleLog.prototype.showNormalAnimation = function(targets, animationId, mirror) {
  156.         var animation = $dataAnimations[animationId];
  157.         if (animation) {
  158.             var delay = this.animationBaseDelay();
  159.             var nextDelay = this.animationNextDelay();
  160.             targets.forEach(function(target) {
  161.                 target.startAnimation(animationId, mirror, delay);
  162.                 delay += nextDelay;
  163.                 var repeat = params[animationId] ? params[animationId][repeats] : 0;
  164.                 while (repeat > 0) { //追加动画重复次数
  165.                     target.startAnimation(animationId, mirror, delay);
  166.                     delay += nextDelay;
  167.                     repeat -= 1;
  168.                 }
  169.             });
  170.         }
  171.     };
  172.  
  173.  
  174.     var SAim = Sprite_Animation.prototype.initMembers;
  175.     Sprite_Animation.prototype.initMembers = function() {
  176.         SAim.call(this);
  177.         this._x2 = 0;
  178.         this._y2 = 0;
  179.         this._duration2 = 0;
  180.         this._arcRate = 0;
  181.         this._arc = 0;
  182.     };
  183.  
  184.     //指定已设置的动画参数
  185.     var SAs = Sprite_Animation.prototype.setup;
  186.     Sprite_Animation.prototype.setup = function(target, animation, mirror, delay) {
  187.         if (params[animation.id]) {
  188.             var prm = params[animation.id];
  189.             if (prm[startX]) { //若startX已设置,则使用它的值
  190.                 var sx = mirror ? Graphics.boxWidth - prm[startX] : prm[startX];
  191.             } else { //否则使用技能使用者的坐标
  192.                 sx = $gameParty.inBattle() ? subjectX : $gamePlayer.screenX();
  193.             }
  194.             if (prm[startY]) {
  195.                 var sy = prm[startY];
  196.             } else {
  197.                 sy = $gameParty.inBattle() ? subjectY : $gamePlayer.screenY();
  198.             }
  199.  
  200.             if ($gameParty.inBattle()) { //战斗时
  201.                 var t = target._battler ? target : target.parent;
  202.                 var pos = animation.position; //修正坐标为动画坐标(ver.1.1修正箇所)
  203.                 this._x2 = sx - t.x;
  204.                 this._y2 = sy - t.y - t.height * (pos - 2) / 2; //
  205.  
  206.             } else if (UseField == 'true') { //非战斗时
  207.                 this._x2 = sx - target.x;
  208.                 this._y2 = sy - target.y;
  209.  
  210.             }
  211.             this._duration2 = prm[moveDuration];
  212.             this._arc = this._duration2;
  213.             this._arcRate = prm[arcRate] + (Math.random() - 0.5) * prm[deflection] * 2;
  214.  
  215.         }
  216.         SAs.call(this, target, animation, mirror, delay);
  217.     };
  218.  
  219.     //坐标更新
  220.     var SAup = Sprite_Animation.prototype.updatePosition;
  221.     Sprite_Animation.prototype.updatePosition = function() {
  222.         SAup.call(this);
  223.         //计算更新值
  224.         if (this._duration2 > 0) {
  225.             this._x2 -= this._x2 / this._duration2;
  226.             this._y2 -= this._y2 / this._duration2;
  227.             this.x += this._x2;
  228.             this.y += this._y2 - Math.sin(this._duration2 / this._arc * Math.PI) * this._arcRate;
  229.             this._duration2 -= 1;
  230.         }
  231.     };
  232.  
  233.  
  234.     //存档时保存设置
  235.     var SSof = Scene_Save.prototype.onSavefileOk;
  236.     Scene_Save.prototype.onSavefileOk = function() {
  237.         if (Variable > 0) {
  238.             $gameVariables._data[Variable] = params.clone();
  239.         }
  240.         SSof.call(this);
  241.     };
  242.  
  243.     //读档时读取设置
  244.     var SLol = Scene_Load.prototype.onLoadSuccess;
  245.     Scene_Load.prototype.onLoadSuccess = function() {
  246.         if (Variable > 0) {
  247.             try {
  248.                 params = $gameVariables._data[Variable].clone();
  249.             } catch (e) {}
  250.         }
  251.         SLol.call(this);
  252.     };
  253.  
  254.  
  255. })();

作者: qq1065526265    时间: 2018-4-22 20:18
找到了一个  等下试试看
作者: ken00001    时间: 2018-4-22 20:28
我都在找     可以話我知是什麼插件
作者: qq1065526265    时间: 2018-4-22 21:56
ken00001 发表于 2018-4-22 20:28
我都在找     可以話我知是什麼插件

https://rpg.blue/forum.php?mod=v ... =%E5%BC%B9%E9%81%93
作者: walf_man    时间: 2018-4-24 23:20
非常好的插件,学习学习
作者: qq1065526265    时间: 2018-4-25 23:07
梦想家大魔王 发表于 2018-4-22 16:31
Victor系列插件中有个Throwable Objects,实现的功能相对最完善,除了飞矢、子弹之类的飞行物体之外,还能 ...

请问大佬回旋镖的效果怎么做   ?
作者: wabcmcc    时间: 2018-4-26 01:48
MOG ( Chrono Engine)有斉你要求.
網址:https://atelierrgss.wordpress.com/rmv-chrono-engine/
YouTube 視頻:
https://www.youtube.com/watch?time_continue=1&v=-q8YOmrsWBA
示例工程:MEGAMEGA

作者: qq1065526265    时间: 2018-4-26 07:51
wabcmcc 发表于 2018-4-26 01:48
MOG ( Chrono Engine)有斉你要求.
網址:https://atelierrgss.wordpress.com/rmv-chrono-engine/
YouTube 視 ...

我好像进不去视频的网站  这个插件可以在回合战斗中使用么
作者: 梦想家大魔王    时间: 2018-4-27 17:43
qq1065526265 发表于 2018-4-25 23:07
请问大佬回旋镖的效果怎么做   ?

我记得是插件有参数,决定是不是能飞回来。
作者: qq1065526265    时间: 2018-4-27 18:38
梦想家大魔王 发表于 2018-4-27 17:43
我记得是插件有参数,决定是不是能飞回来。

看了几遍没看到有说的
作者: 梦想家大魔王    时间: 2018-4-27 18:45
Victor的那个插件可以做,另一个没有这功能。
作者: qq1065526265    时间: 2018-4-27 19:43
这个插件目前发现如果备注了飞行 就和yep动作序列的播放动画语句有冲突  比如想要在自己身上播放个动画也会跟着飞过去 除此之外还有冲突的地方没有?




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1