/// <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); }
/// <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); }
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; } } }
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); }