Project1

标题: 如何在地图上为多个事件循环播放动画? [打印本页]

作者: daiboy12    时间: 2018-5-14 16:22
标题: 如何在地图上为多个事件循环播放动画?
本帖最后由 daiboy12 于 2018-5-14 23:29 编辑

将事件本身设定为并行处理,并每隔一段事件为自己播放动画是一种办法,但是这样子事件本身就无法触发其他的功能了。

而如果另外做一个事件来控制动画,又太过繁琐。如果地图上有多个事件需要同时刷新总帧数不同动画,那么事件的数量就太多了。


作者: sd981830    时间: 2018-5-14 17:42
听不懂 能举个栗子吗
作者: daiboy12    时间: 2018-5-14 18:38
sd981830 发表于 2018-5-14 17:42
听不懂 能举个栗子吗

感谢回复!自己已经解决了
作者: daiboy12    时间: 2018-5-14 21:42
本帖最后由 daiboy12 于 2018-5-14 21:49 编辑

把整理好的代码放出来一下,如果有刚好需要的同学可以拿去用哈。

  1. //=============================================================================
  2. // Map_Animation_Loop.js
  3. //=============================================================================
  4. /*:
  5. *@plugindesc 在地图上为事件或玩家增加一个循环播放的动画,与其他动画不冲突
  6. *@author CHEESE_JEROME
  7. *
  8. *@help
  9. *18/5/14
  10. *
  11. *使用方法:
  12. *
  13. *在事件页中添加事件指令:「注释…」,
  14. *然后输入「<animationLoop:5>」
  15. *(需要为独立的一个注释指令!)
  16. *这样,这个事件就会循环播放5号动画,直到事件页更改为止。
  17. *  
  18. * 注:这个循环动画是完全独立的,可以与其他动画同时播放。
  19. *
  20. * 其他使用方法:
  21. *
  22. * 1)更改玩家的循环动画
  23. * 设置一个事件脚本:「this.character(-1).setAnimationLoop(15)」
  24. * 执行后,玩家身上将会循环播放15号动画,这个效果会一直持续。
  25. * 停止方法:「this.character(-1).setAnimationLoop(0)」
  26. *
  27. * 2)暂时更改事件的循环动画
  28. * 在事件中添加脚本「this.character(this._eventId).setAnimationLoop(15)」,
  29. * 执行后,可以将循环动画的编号暂时改为15号(改为0号时,将会停止循环动画的播放)。
  30. * 这个功能是暂时的:每当地图刷新或事件刷新后,
  31. * 循环动画的编号又会返回最初注释内设定的那个。
  32. */
  33. var Map_Animation_Loop = Map_Animation_Loop || {};
  34. //利用事件编辑器的注释功能,为事件页增加新属性
  35. Map_Animation_Loop._Game_Event_setupPageSettings = Game_Event.prototype.setupPageSettings;
  36. Game_Event.prototype.setupPageSettings = function() {
  37.     //初始化
  38.     this._animationLoop = 0 ;
  39.     //读取事件页中的注释
  40.     Map_Animation_Loop._Game_Event_setupPageSettings.call(this);
  41.     //遍历事件页
  42.     for (var i = 0; i < this.list().length; i++) {
  43.         //寻找「注释」事件
  44.         if (this.list()[i].code === 108){
  45.             //循环动画ID(当这个事件需要循环播放动画时指定)
  46.             if(this.list()[i].parameters[0].match(/<(?:animationLoop):(\d+)>/)){
  47.                 this._animationLoop = Number(RegExp.$1);
  48.             }
  49.         }
  50.     }
  51. };
  52. /**循环动画id*/
  53. Game_CharacterBase.prototype.animationLoop = function() {
  54.     //返回 循环动画id
  55.     return this._animationLoop;
  56. };
  57. /**设置循环动画id(于事件编辑器内使用)*/
  58. Game_CharacterBase.prototype.setAnimationLoop = function(animationLoop) {
  59.     //设置 循环动画id
  60.     this._animationLoop = animationLoop
  61. };
  62. /**更新动画 */
  63. Map_Animation_Loop._Sprite_Character_updateAnimation = Sprite_Character.prototype.updateAnimation;
  64. Sprite_Character.prototype.updateAnimation = function (){
  65.     /**安装循环动画 */
  66.     this.setupAnimationLoop();
  67.     Map_Animation_Loop._Sprite_Character_updateAnimation.call(this);
  68. }
  69. /**安装循环动画 */
  70. Sprite_Base.prototype.setupAnimationLoop = function() {
  71.     //检测循环动画编号是否同步,若不同步则执行
  72.     if (this._animationLoop != this._character.animationLoop()){
  73.         //若已存在循环动画精灵,移除循环动画精灵
  74.         if (this._animationLoopSprite) this._animationLoopSprite.remove();
  75.         //同步循环动画编号
  76.         this._animationLoop = this._character.animationLoop();
  77.         //若循环编号为真
  78.         if (this._animationLoop){
  79.             //循环动画精灵 = 新 精灵动画()
  80.             this._animationLoopSprite = new Sprite_Animation();
  81.             //循环动画精灵 安装(效果 ,动画, 镜像, 延迟)
  82.             this._animationLoopSprite.setup(this._effectTarget, $dataAnimations[this._animationLoop],  false, 0);
  83.             //父类 添加子项(循环动画精灵)
  84.             this.parent.addChild(this._animationLoopSprite);
  85.         }
  86.     }
  87. };
  88. /**更新 */
  89. Map_Animation_Loop._Sprite_Base_update = Sprite_Base.prototype.update;
  90. Sprite_Base.prototype.update = function() {
  91.     /**更新循环动画 */
  92.     Map_Animation_Loop._Sprite_Base_update.call(this);
  93.     this.updateAnimationLoop();
  94. };
  95. /**更新循环动画 */
  96. Sprite_Base.prototype.updateAnimationLoop = function(){
  97.     //如果存在循环动画精灵 && 持续时间已经结束
  98.     if (this._animationLoopSprite && !this._animationLoopSprite.isPlaying()) {
  99.         //重置持续时间
  100.         this._animationLoopSprite.setupDuration()
  101.     }
  102. };
复制代码

作者: huangrhone    时间: 2018-10-13 05:14
能加个Q否   一直被这个动画问题干扰    就是想找个不需要控制  不需要触发  一直自动播放的方法    但看你的代码又不懂如何设置   码盲
作者: a66294836    时间: 2022-4-19 02:55
daiboy12 发表于 2018-5-14 21:42
把整理好的代码放出来一下,如果有刚好需要的同学可以拿去用哈。

爬文发现大佬的插件 想问一下 能不能多个循环动画呢 这样我的行走图就能用类似护盾跟BUFF 一次出来了 QQ
作者: daiboy12    时间: 2023-1-3 12:38
a66294836 发表于 2022-4-19 02:55
爬文发现大佬的插件 想问一下 能不能多个循环动画呢 这样我的行走图就能用类似护盾跟BUFF 一次出来了 QQ ...

太久没玩RM了……都已经忘记自己写过这种插件,以前的我居然这么厉害的嘛!层主的意思是需要在同一个事件上显示多个动画吗?




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