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

Project1

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

[原创发布] 如何在地图上为多个事件循环播放动画?

[复制链接]

Lv2.观梦者

梦石
0
星屑
511
在线时间
50 小时
注册时间
2009-7-1
帖子
87
跳转到指定楼层
1
发表于 2018-5-14 16:22:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 daiboy12 于 2018-5-14 23:29 编辑

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

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

Lv2.观梦者

梦石
0
星屑
704
在线时间
50 小时
注册时间
2010-10-22
帖子
90
2
发表于 2018-5-14 17:42:33 | 只看该作者
听不懂 能举个栗子吗
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
511
在线时间
50 小时
注册时间
2009-7-1
帖子
87
3
 楼主| 发表于 2018-5-14 18:38:57 | 只看该作者
sd981830 发表于 2018-5-14 17:42
听不懂 能举个栗子吗

感谢回复!自己已经解决了
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
511
在线时间
50 小时
注册时间
2009-7-1
帖子
87
4
 楼主| 发表于 2018-5-14 21:42:38 | 只看该作者
本帖最后由 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. };
复制代码
回复 支持 1 反对 0

使用道具 举报

Lv2.观梦者

梦石
0
星屑
403
在线时间
37 小时
注册时间
2012-9-14
帖子
8
5
发表于 2018-10-13 05:14:59 | 只看该作者
能加个Q否   一直被这个动画问题干扰    就是想找个不需要控制  不需要触发  一直自动播放的方法    但看你的代码又不懂如何设置   码盲
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4839
在线时间
884 小时
注册时间
2014-12-3
帖子
63
6
发表于 2022-4-19 02:55:00 | 只看该作者
daiboy12 发表于 2018-5-14 21:42
把整理好的代码放出来一下,如果有刚好需要的同学可以拿去用哈。

爬文发现大佬的插件 想问一下 能不能多个循环动画呢 这样我的行走图就能用类似护盾跟BUFF 一次出来了 QQ

点评

不小心按到回覆了 抱歉=口=  发表于 2022-4-19 02:56
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
511
在线时间
50 小时
注册时间
2009-7-1
帖子
87
7
 楼主| 发表于 2023-1-3 12:38:08 | 只看该作者
a66294836 发表于 2022-4-19 02:55
爬文发现大佬的插件 想问一下 能不能多个循环动画呢 这样我的行走图就能用类似护盾跟BUFF 一次出来了 QQ ...

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 19:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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