static int AdvanceTime(IntPtr L) { try { ToLua.CheckArgsCount(L, 2); DragonBones.Armature obj = (DragonBones.Armature)ToLua.CheckObject(L, 1, typeof(DragonBones.Armature)); float arg0 = (float)LuaDLL.luaL_checknumber(L, 2); obj.AdvanceTime(arg0); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
/** * @language zh_CN * @beta * 通过动画配置来播放动画。 * @param animationConfig 动画配置。 * @returns 对应的动画状态。 * @see DragonBones.AnimationConfig * @see DragonBones.AnimationState * @version DragonBones 5.0 */ public AnimationState PlayConfig(AnimationConfig animationConfig) { if (animationConfig == null) { DragonBones.Assert(false, DragonBones.ARGUMENT_ERROR); return(null); } var animationName = !string.IsNullOrEmpty(animationConfig.animationName) ? animationConfig.animationName : animationConfig.name; var animationData = _animations.ContainsKey(animationName) ? _animations[animationName] : null; if (animationData == null) { DragonBones.Assert(false, "Non-existent animation.\n" + "DragonBones name: " + _armature.armatureData.parent.name + " Armature name: " + _armature.name + " Animation name: " + animationName ); return(null); } _isPlaying = true; if (animationConfig.playTimes < 0) { animationConfig.playTimes = (int)animationData.playTimes; } if (animationConfig.fadeInTime < 0.0f || float.IsNaN(animationConfig.fadeInTime)) { if (_lastAnimationState != null) { animationConfig.fadeInTime = animationData.fadeInTime; } else { animationConfig.fadeInTime = 0.0f; } } if (animationConfig.fadeOutTime < 0.0f || float.IsNaN(animationConfig.fadeOutTime)) { animationConfig.fadeOutTime = animationConfig.fadeInTime; } if (animationConfig.timeScale <= -100.0f || float.IsNaN(animationConfig.timeScale)) // { animationConfig.timeScale = 1.0f / animationData.scale; } if (animationData.duration > 0.0f) { if (float.IsNaN(animationConfig.position)) { animationConfig.position = 0.0f; } else if (animationConfig.position < 0.0f) { animationConfig.position %= animationData.duration; animationConfig.position = animationData.duration - animationConfig.position; } else if (animationConfig.position == animationData.duration) { animationConfig.position -= 0.000001f; } else if (animationConfig.position > animationData.duration) { animationConfig.position %= animationData.duration; } if (animationConfig.duration > 0.0f && animationConfig.position + animationConfig.duration > animationData.duration) { animationConfig.duration = animationData.duration - animationConfig.position; } if (animationConfig.duration == 0.0f) { animationConfig.playTimes = 1; } else if (animationConfig.playTimes < 0) { animationConfig.playTimes = (int)animationData.playTimes; } } else { animationConfig.playTimes = 1; animationConfig.position = 0.0f; animationConfig.duration = 0.0f; } _fadeOut(animationConfig); _lastAnimationState = BaseObject.BorrowObject <AnimationState>(); _lastAnimationState._init(_armature, animationData, animationConfig); _animationStates.Add(_lastAnimationState); _animationStateDirty = true; _cacheFrameIndex = -1; if (_animationStates.Count > 1) { _animationStates.Sort(_sortAnimationState); } // Child armature play same name animation. var slots = _armature.GetSlots(); for (int i = 0, l = slots.Count; i < l; ++i) { var childArmature = slots[i].childArmature; if ( childArmature != null && childArmature.inheritAnimation && childArmature.animation.HasAnimation(animationName) && childArmature.animation.GetState(animationName) == null ) { childArmature.animation.FadeIn(animationName); // } } if (animationConfig.fadeInTime <= 0.0f) // Blend animation state, update armature. { _armature.AdvanceTime(0.0f); } return(_lastAnimationState); }
/** * @language zh_CN * 淡入播放指定名称的动画。 * @param animationName 动画数据的名称。 * @param playTimes 循环播放的次数。 [-1: 使用数据默认值, 0: 无限循环播放, [1~N]: 循环播放 N 次] * @param fadeInTime 淡入的时间。 [-1: 使用数据默认值, [0~N]: N 秒淡入完毕] (以秒为单位) * @param layer 混合的图层,图层高会优先获取混合权重。 * @param group 混合的组,用于给动画状态编组,方便混合淡出控制。 * @param fadeOutMode 淡出的模式。 * @param additiveBlending 以叠加的形式混合。 * @param displayControl 是否对显示对象属性可控。 * @param pauseFadeOut 暂停需要淡出的动画。 * @param pauseFadeIn 暂停需要淡入的动画,直到淡入结束才开始播放。 * @returns 返回控制这个动画数据的动画状态。 * @see dragonBones.AnimationFadeOutMode * @see dragonBones.AnimationState * @version DragonBones 4.5 */ public AnimationState FadeIn( string animationName, float fadeInTime = -1.0f, int playTimes = -1, int layer = 0, string group = null, AnimationFadeOutMode fadeOutMode = AnimationFadeOutMode.SameLayerAndGroup, bool additiveBlending = false, bool displayControl = true, bool pauseFadeOut = true, bool pauseFadeIn = true ) { if (!_animations.ContainsKey(animationName)) { _time = 0; DragonBones.Warn( "Non-existent animation. " + " DragonBones: " + _armature.armatureData.parent.name + " Armature: " + _armature.name + " Animation: " + animationName ); return(null); } var animationData = _animations[animationName]; if (float.IsNaN(_time)) { _time = 0.0f; } _isPlaying = true; if (fadeInTime < 0.0f || float.IsNaN(fadeInTime)) { if (_lastAnimationState != null) { fadeInTime = animationData.fadeInTime; } else { fadeInTime = 0.0f; } } if (playTimes < 0) { playTimes = (int)animationData.playTimes; } _fadeOut(fadeInTime, layer, group, fadeOutMode, pauseFadeOut); _lastAnimationState = BaseObject.BorrowObject <AnimationState>(); _lastAnimationState._layer = layer; _lastAnimationState._group = group; _lastAnimationState.additiveBlending = additiveBlending; _lastAnimationState.displayControl = displayControl; _lastAnimationState._fadeIn( _armature, animationData.animation != null ? animationData.animation : animationData, animationName, (uint)playTimes, animationData.position, animationData.duration, _time, 1 / animationData.scale, fadeInTime, pauseFadeIn ); _animationStates.Add(_lastAnimationState); _animationStateDirty = true; _time = 0.0f; _armature._cacheFrameIndex = -1; if (_animationStates.Count > 1) { _animationStates.Sort(_sortAnimationState); } foreach (var slot in _armature.GetSlots()) { if (slot.inheritAnimation) { var childArmature = slot.childArmature; if ( childArmature != null && childArmature.animation.HasAnimation(animationName) && childArmature.animation.GetState(animationName) == null ) { childArmature.animation.FadeIn(animationName); } } } if (fadeInTime <= 0.0f) { _armature.AdvanceTime(0.0f); // Blend animation state, update armature. (pass actions and events) } return(_lastAnimationState); }