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

Project1

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

[有事请教] 如何在敌人身上循环播放动画

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2285
在线时间
264 小时
注册时间
2014-3-23
帖子
83
跳转到指定楼层
1
发表于 2020-7-25 19:26:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
大概想做一下敌人的动态待机效果,但是用了srd不支持yep,排版会出大问题。有没有前辈知道怎么做到让战斗时,循环显示动画在敌人上且不影响游戏的。直接循环播放动画的话会卡住、
这里是弗利沙漠。没啥技术的爱好者。

Lv3.寻梦者

梦石
0
星屑
1420
在线时间
159 小时
注册时间
2020-4-26
帖子
152
2
发表于 2020-7-26 06:39:48 | 只看该作者
根據其原理,好像不會有太大的困難,行走圖、戰鬥圖的播放,是根據目前的格數(pattern)來設置遮罩(setFrame),決定要顯示圖片哪一個部分,即使在一般的精靈(sprite),像原本預設的靜止敵人戰鬥圖,也會使用setFrame,只是範圍設置成全部顯示,因此只要定時刷新pattern,然後依照著修改setFrame,就可以達成待機等等的動畫,因為都是同一張圖!不用改變,就很舒服

点评

可以去看一下Sprite_Actor他跟敵人戰鬥者原型一樣,只是加了setFrame就讓戰鬥圖動起來了  发表于 2020-7-26 06:42
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33524
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

3
发表于 2020-7-26 08:21:21 | 只看该作者
本帖最后由 芯☆淡茹水 于 2020-7-26 09:18 编辑

Window_BattleLog 进程会等待动画的播放结束,也就是你所说的 卡住 。
如果你有循环动画功能的话,可以尝试把对象播放循环动画时的 isAnimationPlaying 改成 false 。


以前就预先 pia 了个循环动画,但是只有基本功能,至于谁播放循环动画,什么时候播放,什么时候停止,,,
这些只有根据实际使用情况自己编写。
JAVASCRIPT 代码复制
  1. //=================================================================================================
  2. // Loop_Animation.js
  3. //=================================================================================================
  4. /*:
  5. * @plugindesc 循环动画。
  6. * @author 芯☆淡茹水
  7. * @help
  8. *
  9. * Sprite_Base 以及其子类,皆可以播放循环动画,以下代称为 objSprite 。
  10. *
  11. * 开始循环动画: objSprite.startLoopAnimation(animationId, mirror, delay);
  12. * animationId :动画ID。
  13. * mirror :是否镜像。
  14. * delay :延迟帧数。
  15. *
  16. * 停止循环动画: objSprite.stopLoopAnimation(animationId);
  17. *
  18. * 是否正在播放某个循环动画: objSprite.isLoopAnimationPlaying(animationId);
  19. *
  20. */
  21. //=================================================================================================
  22. ;(function(){
  23. //=================================================================================================
  24. var Sprite_Base_initialize = Sprite_Base.prototype.initialize;
  25. Sprite_Base.prototype.initialize = function() {
  26.     Sprite_Base_initialize.call(this);
  27.     this._loopAnimationSprites = [];
  28. };
  29. Sprite_Base.prototype.startLoopAnimation = function(animationId, mirror, delay) {
  30.     if (!$dataAnimations[animationId] || this.isLoopAnimationPlaying(animationId)) return;
  31.     var sprite = new Sprite_LoopAnimation();
  32.     sprite.setup(this._effectTarget, animationId, mirror, delay);
  33.     this.parent.addChild(sprite);
  34.     this._loopAnimationSprites.push(sprite);
  35. };
  36. Sprite_Base.prototype.stopLoopAnimation = function(animationId) {
  37.     var anmSprite = this._loopAnimationSprites.filter(function(sprite){
  38.         return sprite.id() === animationId;
  39.     }).shift();
  40.     if (anmSprite) {
  41.         var index = this._loopAnimationSprites.indexOf(anmSprite);
  42.         anmSprite.remove();
  43.         this._loopAnimationSprites.splice(index, 1);
  44.     }
  45. };
  46. Sprite_Base.prototype.isLoopAnimationPlaying = function(animationId) {
  47.     return this._loopAnimationSprites.some(function(anmSprite){
  48.         return anmSprite.id() === animationId;
  49.     });
  50. };
  51. //=================================================================================================
  52. function Sprite_LoopAnimation() {
  53.     this.initialize.apply(this, arguments);
  54. }
  55. Sprite_LoopAnimation.prototype = Object.create(Sprite_Animation.prototype);
  56. Sprite_LoopAnimation.prototype.constructor = Sprite_LoopAnimation;
  57. Sprite_LoopAnimation.prototype.id = function() {
  58.     return this._animationId;
  59. };
  60. Sprite_LoopAnimation.prototype.setup = function(target, animationId, mirror, delay) {
  61.     this._animationId = animationId;
  62.     var animation = $dataAnimations[animationId];
  63.     Sprite_Animation.prototype.setup.call(this, target, animation, mirror, delay);
  64. };
  65. Sprite_LoopAnimation.prototype.isPlaying = function() {
  66.     return true;
  67. };
  68. Sprite_LoopAnimation.prototype.updateMain = function() {
  69.     if (this._duration <= 0) {
  70.         this._target.setBlendColor([0, 0, 0, 0]);
  71.         this._target.show();
  72.         this.setupDuration();
  73.     } else Sprite_Animation.prototype.updateMain.call(this);
  74. };
  75. //=================================================================================================
  76. }()); // end
  77. //=================================================================================================
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-5 09:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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