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

Project1

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

[有事请教] 求个技能动画可以从使用者身上飞到目标身上的插件

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1573
在线时间
374 小时
注册时间
2017-12-26
帖子
306
跳转到指定楼层
1
发表于 2018-4-22 16:31:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
100星屑
比如说 弓箭  子弹  炮弹 导弹 什么的 总不能一发射就命中了吧   起码有个飞行过程  希望大大们给个  最好有视频教程  或者文字也许

最佳答案

查看完整内容

Victor系列插件中有个Throwable Objects,实现的功能相对最完善,除了飞矢、子弹之类的飞行物体之外,还能做出回旋镖之类的效果。 但是这个作者的插件跟YEP中的ActSeqPack插件冲突,如果你的工程严重依赖YEP的动作指令序列的话,就没办法用这个了。 (实际上这个作者的插件中也有实现ActSeqPack类似功能的作品,只不过知名度不高用的人不多) 我用的是这个,实测兼容YEP。 //==================================================== ...

Lv4.逐梦者

梦石
0
星屑
7422
在线时间
948 小时
注册时间
2017-9-27
帖子
583
2
发表于 2018-4-22 16:31:07 | 只看该作者
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. })();

点评

这个非常好用谢谢!  发表于 2018-4-23 23:14
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1573
在线时间
374 小时
注册时间
2017-12-26
帖子
306
3
 楼主| 发表于 2018-4-22 20:18:55 | 只看该作者
找到了一个  等下试试看
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1194
在线时间
129 小时
注册时间
2018-4-3
帖子
3
4
发表于 2018-4-22 20:28:39 | 只看该作者
我都在找     可以話我知是什麼插件
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1573
在线时间
374 小时
注册时间
2017-12-26
帖子
306
5
 楼主| 发表于 2018-4-22 21:56:21 | 只看该作者

点评

可以用的 只是好麻烦 要调整很多次  发表于 2018-4-22 23:16
我用了很多yep和mog的插件,老早那个大佬放出来插件的时候,我怎么实验都不成功,但新工程没问题  发表于 2018-4-22 22:42
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14249
在线时间
718 小时
注册时间
2011-7-16
帖子
1428

开拓者

6
发表于 2018-4-24 23:20:25 | 只看该作者
非常好的插件,学习学习
RMMV网络插件,开源免费,内含服务器端,无需强制登录,云数据,弹幕,云存档,排名,兑换码,版本检测,可自由上架下架删除。q群399090587
免打包运行MV游戏,云游戏,安卓App雷神游戏厅,在线玩游戏,上传下载游戏
开源游戏:重装机兵之重装归来【RMMV制作】全球首款按照美剧分季分集的方式发布的游戏
体素画 -- MV画3D像素图的画板
RMMV显示3D模型和场景的插件
RMMV显示spine骨骼动画的插件
RMMV秘密通道插件
突破敌群数量上限8个的插件
在rmmv中显示gif动态图片的插件
一款可以在mv游戏界面的任意位置显示任意文字的插件
RMMV Toast 插件 带物品得失提示,可以设置开启关闭 兼容yep itemcore
制作一个改名卡道具插件、调整标题页面菜单的插件、在标题页面之前显示大段文字的插件、标题页面显示版本号的插件
物品得失自动提示自动上色自动换行插件
我的Q群 663889472
另外,我的插件、范例、游戏都在这里
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1573
在线时间
374 小时
注册时间
2017-12-26
帖子
306
7
 楼主| 发表于 2018-4-25 23:07:55 | 只看该作者
梦想家大魔王 发表于 2018-4-22 16:31
Victor系列插件中有个Throwable Objects,实现的功能相对最完善,除了飞矢、子弹之类的飞行物体之外,还能 ...

请问大佬回旋镖的效果怎么做   ?
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
15561
在线时间
3957 小时
注册时间
2015-9-14
帖子
1335

开拓者

8
发表于 2018-4-26 01:48:15 | 只看该作者
MOG ( Chrono Engine)有斉你要求.
網址:https://atelierrgss.wordpress.com/rmv-chrono-engine/
YouTube 視頻:
https://www.youtube.com/watch?time_continue=1&v=-q8YOmrsWBA
示例工程:MEGAMEGA
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1573
在线时间
374 小时
注册时间
2017-12-26
帖子
306
9
 楼主| 发表于 2018-4-26 07:51:21 | 只看该作者
wabcmcc 发表于 2018-4-26 01:48
MOG ( Chrono Engine)有斉你要求.
網址:https://atelierrgss.wordpress.com/rmv-chrono-engine/
YouTube 視 ...

我好像进不去视频的网站  这个插件可以在回合战斗中使用么
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7422
在线时间
948 小时
注册时间
2017-9-27
帖子
583
10
发表于 2018-4-27 17:43:10 | 只看该作者
qq1065526265 发表于 2018-4-25 23:07
请问大佬回旋镖的效果怎么做   ?

我记得是插件有参数,决定是不是能飞回来。
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-6 17:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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