public STGEffectBase CreateEffectByType(EffectType type) { STGEffectBase effect = GetEffectFromPool(type); if (effect == null) { switch (type) { case EffectType.SpriteEffect: effect = new STGSpriteEffect(); break; case EffectType.ShakeEffect: effect = new ShakeEffect(); break; case EffectType.BreakScreenEffect: effect = new STGBreakScreenEffect(); break; case EffectType.BurstEffect: effect = new STGBurstEffect(); break; case EffectType.ChargeEffect: effect = new STGChargeEffect(); break; case EffectType.BulletEliminate: effect = new STGBulletEliminateEffect(); break; case EffectType.EnemyEliminated: effect = new STGEnemyEliminatedEffect(); break; case EffectType.PlayerDeadEffect: effect = new STGPlayerDeadEffect(); break; } } if (effect != null) { effect.Init(); _effectList.Add(effect); _effectsCount++; } return(effect); }
/// <summary> /// 创建蓄力特效 /// <para>posX</para> /// <para>posY</para> /// <para>[optional]scale</para> /// </summary> /// <param name="luaState"></param> /// <returns></returns> public static int CreateChargeEffect(ILuaState luaState) { int top = luaState.GetTop(); STGChargeEffect effect = EffectsManager.GetInstance().CreateEffectByType(EffectType.ChargeEffect) as STGChargeEffect; if (top == 2) { float posX = (float)luaState.ToNumber(-2); float posY = (float)luaState.ToNumber(-1); effect.SetPosition(posX, posY); } else { float posX = (float)luaState.ToNumber(-3); float posY = (float)luaState.ToNumber(-2); float scale = (float)luaState.ToNumber(-1); effect.SetPosition(posX, posY); effect.SetScale(scale); } luaState.PushLightUserData(effect); return(1); }