/// <summary>
 /// 创建生成子弹时候的特效
 /// </summary>
 private void CreateAppearEffect()
 {
     if (_cfg.appearEffectSizeFrom == 0)
     {
         return;
     }
     _appearEffect = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect;
     _appearEffect.SetSprite(Consts.STGBulletsAtlasName, _cfg.appearEffectName, _cfg.blendMode, LayerId.EnemyBarrage, true);
     _appearEffect.SetOrderInLayer(10);
     _appearEffect.SetPosition(_curPos.x, _curPos.y);
     _appearEffect.SetScale(_cfg.appearEffectSizeFrom, _cfg.appearEffectSizeFrom);
     //_appearEffect.DoScaleWidth(_cfg.appearEffectSizeTo, AppearEffectExistDuration, InterpolationMode.Linear);
     //_appearEffect.DoScaleHeight(_cfg.appearEffectSizeTo, AppearEffectExistDuration, InterpolationMode.Linear);
     _appearEffect.DoFade(AppearEffectExistDuration);
 }
Ejemplo n.º 2
0
    /// <summary>
    /// 根据属性创建指定的SpriteEffect
    /// <para>atlasName</para>
    /// <para>spriteName</para>
    /// <para>cached 是否缓存</para>
    /// <para>layerId 层级</para>
    /// <para>在层级中的顺序</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int CreateSpriteEffectWithProps(ILuaState luaState)
    {
        string          atlasName    = luaState.ToString(-6);
        string          spriteName   = luaState.ToString(-5);
        eBlendMode      blendMode    = (eBlendMode)luaState.ToInteger(-4);
        LayerId         layerId      = (LayerId)luaState.ToInteger(-3);
        bool            cached       = luaState.ToBoolean(-2);
        int             orderInLayer = luaState.ToInteger(-1);
        STGSpriteEffect effect       = EffectsManager.GetInstance().CreateEffectByType(EffectType.SpriteEffect) as STGSpriteEffect;

        effect.SetSprite(atlasName, spriteName, blendMode, layerId, cached);
        effect.SetOrderInLayer(orderInLayer);
        luaState.PushLightUserData(effect);
        return(1);
    }
Ejemplo n.º 3
0
    protected void SetSpriteEffectParas(STGSpriteEffect effect, float[] paras)
    {
        if (paras.Length == 0)
        {
            return;
        }
        switch ((int)paras[0])
        {
        // 设置位置,参数为增量
        case 1:
        {
            float dx      = paras[1];
            float offsetX = paras[2];
            float dy      = paras[3];
            float offsetY = paras[4];
            if (offsetX != 0)
            {
                dx += Random.Range(-offsetX, offsetX);
            }
            if (offsetY != 0)
            {
                dy += Random.Range(-offsetY, offsetY);
            }
            float sin  = Mathf.Sin(_curRotation * Mathf.Deg2Rad);
            float cos  = Mathf.Cos(_curRotation * Mathf.Deg2Rad);
            float relX = cos * dx - sin * dy;
            float relY = sin * dx + cos * dy;
            effect.SetPosition(_hitPos.x + relX, _hitPos.y + relY);
            break;
        }

        // 设置位置,参数为绝对位置
        case 2:
        {
            float posX    = paras[1];
            float offsetX = paras[2];
            float posY    = paras[3];
            float offsetY = paras[4];
            if (offsetX != 0)
            {
                posX += Random.Range(-offsetX, offsetX);
            }
            if (offsetY != 0)
            {
                posY += Random.Range(-offsetY, offsetY);
            }
            effect.SetPosition(posX, posY);
            break;
        }

        // 设置速度,v,dAngle,acce
        // 即速度,与当前速度方向的差值,加速度
        // dAngle为0则表示当前速度方向
        case 3:
        {
            float velocity = paras[1];
            float angle    = _curRotation + paras[2];
            float acce     = paras[3];
            effect.DoStraightMove(velocity, angle);
            effect.DoAcceleration(acce, angle);
            break;
        }

        // 设置速度,v,angle,acce
        // 即速度,速度方向,加速度
        case 4:
        {
            float velocity = paras[1];
            float angle    = paras[2];
            float acce     = paras[3];
            effect.DoStraightMove(velocity, angle);
            effect.DoAcceleration(acce, angle);
            break;
        }

        // 图像旋转角度
        // dRotationAngle,与当前子弹速度方向的差值
        case 5:
        {
            float angle = _curRotation + paras[1];
            effect.SetRotation(angle);
            break;
        }

        // 图像旋转角度
        // angle,指定角度
        case 6:
        {
            float angle = paras[1];
            effect.SetRotation(angle);
            break;
        }

        // 旋转
        // omega,角速度
        case 7:
        {
            float omega = paras[1];
            effect.DoRotation(omega, -1);
            break;
        }

        // orderInLayer
        case 9:
        {
            int orderInLayer = (int)paras[1];
            effect.SetOrderInLayer(orderInLayer);
            break;
        }

        // 设置alpha
        case 10:
        {
            float alpha = paras[1];
            effect.SetSpriteAlpha(alpha);
            break;
        }

        // 透明度渐变
        // toAlpha,duration
        case 11:
        {
            float toAlpha  = paras[1];
            int   duration = (int)paras[2];
            effect.DoTweenAlpha(toAlpha, duration);
            break;
        }

        // 设置颜色
        case 12:
        {
            float r = paras[1];
            float g = paras[2];
            float b = paras[3];
            effect.SetSpriteColor(r, g, b);
            break;
        }

        // 设置带alpha的颜色
        case 13:
        {
            float r      = paras[1];
            float g      = paras[2];
            float b      = paras[3];
            float aValue = paras[4];
            effect.SetSpriteColor(r, g, b, aValue);
            break;
        }

        // 设置缩放
        // scaleX,scaleY
        case 15:
        {
            float scaleX = paras[1];
            float scaleY = paras[2];
            effect.SetScale(scaleX, scaleY);
            break;
        }

        // 设置scaleX缩放动画
        // toScaleX duration
        case 16:
        {
            float toScaleX = paras[1];
            int   duration = (int)paras[2];
            effect.ChangeWidthTo(toScaleX, duration, InterpolationMode.Linear);
            break;
        }

        // 设置scaleY缩放动画
        // toScaleY duration
        case 17:
        {
            float toScaleY = paras[1];
            int   duration = (int)paras[2];
            effect.ChangeHeightTo(toScaleY, duration, InterpolationMode.Linear);
            break;
        }

        // 持续时间
        case 30:
        {
            int duration = (int)paras[1];
            effect.SetExistDuration(duration);
            break;
        }
        }
    }
Ejemplo n.º 4
0
    public static bool Set(object o, TValue key, ref TValue value)
    {
        STGSpriteEffect sprite = (STGSpriteEffect)o;

        if (key.TtIsString())
        {
            switch (key.SValue())
            {
                #region 基础变量
            case "x":
            {
                Vector2 pos = sprite.GetPosition();
                pos.x = (float)value.NValue;
                sprite.SetPosition(pos);
                return(true);
            }

            case "y":
            {
                Vector2 pos = sprite.GetPosition();
                pos.y = (float)value.NValue;
                sprite.SetPosition(pos);
                return(true);
            }

            case "rot":
            {
                sprite.SetRotation((float)value.NValue);
                return(true);
            }

                #endregion
                #region 运动相关变量
            case "v":
            {
                sprite.velocity = (float)value.NValue;
                return(true);
            }

            case "vx":
            {
                sprite.vx = (float)value.NValue;
                return(true);
            }

            case "vy":
            {
                sprite.vy = (float)value.NValue;
                return(true);
            }

            case "vAngle":
            {
                sprite.vAngle = (float)value.NValue;
                return(true);
            }

            case "maxV":
            {
                sprite.maxVelocity = (float)value.NValue;
                return(true);
            }

            case "acce":
            {
                sprite.acce = (float)value.NValue;
                return(true);
            }

            case "accAngle":
            {
                sprite.accAngle = (float)value.NValue;
                return(true);
            }

                #endregion
                #region sprite专属变量
            case "orderInLayer":
            {
                sprite.SetOrderInLayer((int)value.NValue);
                return(true);
            }

            case "alpha":
            {
                sprite.SetSpriteAlpha((float)value.NValue);
                return(true);
            }
                #endregion
            }
        }
        value.SetSValue(string.Format("SetField of userData fail!Invalid key {0} for type {1}", key, typeof(STGSpriteEffect).Name));
        return(false);
    }