예제 #1
0
        //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);
        }
예제 #2
0
        // 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);
        }