//animation(animation, hit) //以精灵作为对象,显示 animation 指定的动画(RPG.Animation)。 //hit 为真则进行击中的处理,为伪则进行 MISS 的处理。这个是作为「SE 与闪烁的时机」的条件而使用。 //显示动画的精灵 Z 座标是 2000。 //动画对象有很多的话,可以对各个精灵调用该方法。那种情况下类内部会自动判断,[画面]中指定位置的动画单元重复显示,一样没有问题。 //显示的动画图像从 RPG.Cache 模块中取得,动画结束时为了节约内存而被释放。这样在类内部参照计数使用。 //通常不需要认识这个,但是在外部使用从 RPG.Cache 模块中取得的动画图像时必须注意。 //animation 指定 null 的话,动画停止。 public Animation animation(Animation animation, bool hit) { dispose_animation(); this._animation = animation; if (this._animation == null) { return(this._animation); } this._animation_hit = hit; this._animation_duration = this._animation.frame_max; var animation_name = this._animation.animation_name; var animation_hue = this._animation.animation_hue; var bitmap = RPG.Cache.animation(animation_name, animation_hue); // 增加引用计数 if (_reference_count.ContainsKey(bitmap)) { _reference_count[bitmap] += 1; } else { _reference_count.Add(bitmap, 1); } this._animation_sprites = new List <XP.Internal.Sprite>(); if (this._animation.position != 3 || !_animations.Contains(animation)) { for (var i = 0; i <= 15; i++) { var sprite = new XP.Internal.Sprite(this.viewport); sprite.bitmap = bitmap; sprite.visible = false; this._animation_sprites.Add(sprite); } if (!_animations.Contains(animation)) { _animations.Add(animation); } } update_animation(); return(null); }
// loop_animation(animation) // 以精灵作为对象,循环显示 animation 指定的动画(RPG.Animation)。 // 与普通动画不同,即使到最后显示也不会停止并返回到第一帧重复。 // 而且可以和普通动画同时显示。该方法在显示状态(RPG.State)指定的动画时使用。 // animation 指定 null 的话,动画停止。 public Animation loop_animation(RPG.Animation animation) { if (animation == this._loop_animation) { return(animation); } dispose_loop_animation(); this._loop_animation = animation; if (this._loop_animation == null) { return(this._loop_animation); } this._loop_animation_index = 0; var animation_name = this._loop_animation.animation_name; var animation_hue = this._loop_animation.animation_hue; var bitmap = RPG.Cache.animation(animation_name, animation_hue); if (_reference_count.ContainsKey(bitmap)) { _reference_count[bitmap] += 1; } else { _reference_count[bitmap] = 1; } this._loop_animation_sprites = new List <XP.Internal.Sprite>(); for (var i = 0; i <= 15; i++) { var sprite = new XP.Internal.Sprite(this.viewport); sprite.bitmap = bitmap; sprite.visible = false; this._loop_animation_sprites.Add(sprite); } update_loop_animation(); return(null); }