public static void ShowQuickTips(string message, Color color) { if (_kNewTipsQueue.Count < 10 && !string.IsNullOrEmpty(message)) { TipsElement element = new TipsElement(); element.InitData(_template); element.TextContent.text = "请选择要"; int minHeight = (int)element.TextContent.preferredHeight; element.TextContent.text = message; element.TextContent.color = color; float txtWidth = element.TextContent.preferredWidth; int lines = (int)element.TextContent.preferredHeight / minHeight; if (txtWidth > 580) { txtWidth = 600; } else { txtWidth += 20; } element._lifeTime = 2.5f; element._txtLines = lines; element.ImgBackGround.GetComponent <RectTransform>().sizeDelta = new Vector2(txtWidth, _lineHeight * lines); element.TextContent.GetComponent <RectTransform>().sizeDelta = new Vector2(txtWidth - 18, _lineHeight * lines); element.Alpha = 0.0f; element.TextContent.enabled = true; _kNewTipsQueue.Enqueue(element); } else { return; } }
private static void PopTips(float dt) { _fTimeSinceLastPop += dt; if (_kTipsQueue.Count > 0) { float factor = 1; _fDelayTime = _fDefautDelayTime * factor; _fPopNextDelay = _fDefautPopNextDelay * factor; _fFlyTime = _fDefautFlyTime * factor; } for (int i = 0; i < 3; i++) { if (_elements[i] != null) { _elements[i]._lifeTime -= 0.03f; if (_elements[i]._lifeTime <= 0) { GameObject.DestroyImmediate(_elements[i].GetTarget()); _elements[i] = null; } } } if (_kNewTipsQueue.Count > 0) { if (_grid.transform.childCount > 0) { if (_speedTime >= 1.0f) { for (int k = 0; k < 3; k++) { if (_elements[k] == null) { _elements[k] = _kNewTipsQueue.Dequeue() as TipsElement; _elements[k].GetTarget().transform.parent = _grid.transform; _elements[k].SetAlpha(1.0f); _elements[k].GetTarget().transform.GetChild(0).gameObject.SetActive(true); _elements[k].GetTarget().SetActive(true); if (_elements[k]._txtLines > 1) { RectTransform tran = _elements[k].GetTargetTrans(); tran.localPosition = new Vector3(tran.localPosition.x, tran.localPosition.y - (_elements[k]._txtLines - 1) * _lineHeight / 2, tran.localPosition.z); } else { _elements[k].GetTargetTrans().localPosition = new Vector3(0, 0, 0); } _speed = _elements[k]._txtLines * _lineHeight * 0.03f; _elements[k]._moveDistance = _elements[k]._txtLines * _lineHeight; _moveDistance = _elements[k]._txtLines * _lineHeight; _speedTime = 0; break; } } } } else { _elements[0] = _kNewTipsQueue.Dequeue() as TipsElement; //_elements[0].GetTarget().transform.parent = _grid.transform; _elements[0].GetTarget().transform.SetParent(_grid.transform); _elements[0].SetAlpha(1.0f); _elements[0].GetTarget().transform.GetChild(0).gameObject.SetActive(true); _elements[0].GetTarget().SetActive(true); if (_elements[0]._txtLines > 1) { RectTransform tran = _elements[0].GetTargetTrans(); tran.localPosition = new Vector3(tran.localPosition.x, tran.localPosition.y - (_elements[0]._txtLines - 1) * _lineHeight / 2, tran.localPosition.z); } else { _elements[0].GetTargetTrans().localPosition = new Vector3(0, 0, 0); } _speed = _elements[0]._txtLines * _lineHeight * 0.03f; _elements[0]._moveDistance = _elements[0]._txtLines * _lineHeight; _moveDistance = _elements[0]._txtLines * _lineHeight; _speedTime = 0; } } if (_speedTime < 1.0f && _grid.transform.childCount > 0) { _speedTime += dt; for (int j = 0; j < _grid.transform.childCount; j++) { Transform child = _grid.transform.GetChild(j); child.localPosition = new Vector3(child.localPosition.x, child.localPosition.y + _speed, child.localPosition.z); } _haveMove += _speed; if (_haveMove >= _moveDistance || _speedTime >= 1.0f) { if (_haveMove < _moveDistance) { for (int j = 0; j < _grid.transform.childCount; j++) { Transform child = _grid.transform.GetChild(j); child.localPosition = new Vector3(child.localPosition.x, child.localPosition.y + (_moveDistance - _haveMove), child.localPosition.z); } } _haveMove = 0; _speedTime = 1.0f; } } if (_fTimeSinceLastPop > (_fDelayTime + _fPopNextDelay) && _kNewTipsQueue.Count > 0 && !_isShow) { _isShow = true; _fTimeSinceLastPop = 0.0f; TipsElementInterface element = _kNewTipsQueue.Dequeue() as TipsElementInterface; element.GetTargetTrans().SetAsLastSibling(); float elementLastTime = 0.0f; float alphaChangeRate = 1.0f / _fFlyTime; Updater.ON_UPDATE elementUpdate = delegate(float delta) { elementLastTime += delta; }; TweenCallback onComplete = delegate() { element.GetTarget().SetActive(false); element.GetTargetTrans().anchoredPosition = _vect3[0]; _kUpdater.onUpdate -= elementUpdate; if (element as TipsElement != null) { _tipsPool.ReturnObject(element as TipsElement); } _isShow = false; }; GameConst.driver.StartCoroutine(func(delegate() { TipsElement tempElement = element as TipsElement; element.SetAlpha(1.0f); element.GetTarget().transform.GetChild(0).gameObject.SetActive(true); element.GetTarget().SetActive(true); Tween tween = element.GetTargetTrans().DOLocalMove(tempElement.EndPos, _fFlyTime); tween.SetUpdate(true); tween.OnComplete(onComplete); _kUpdater.onUpdate += elementUpdate; }, _fDelayTime / (float)1000)); } }