示例#1
0
    /// <summary>
    /// 使SpriteEffect在duration帧内旋转
    /// <para>旋转速度为rotateAngle</para>
    /// <para>SpriteEffect</para>
    /// <para>rotateAngle 旋转角速度</para>
    /// <para>duration 旋转周期</para>
    /// </summary>
    /// <param name="luaState"></param>
    /// <returns></returns>
    public static int SpriteEffectRotate(ILuaState luaState)
    {
        STGSpriteEffect effect      = luaState.ToUserData(-3) as STGSpriteEffect;
        float           rotateAngle = (float)luaState.ToNumber(-2);
        int             duration    = luaState.ToInteger(-1);

        luaState.Pop(3);
        effect.DoRotation(rotateAngle, duration);
        return(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;
        }
        }
    }