Реализует универсальный метод из двух простых методов - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь придумать универсальный метод, который поможет мне с текущим кодом.Это не проблема, я просто хочу узнать, возможно ли это сделать.У меня есть два метода, которые в основном делают одно и то же, но используют разные преобразования.Я думаю о том, как реализовать универсальный метод для создания этого кода.

private void ImagePieceClickEvent(GameObject target, MouseEventType type)
{
    if (type == MouseEventType.CLICK && canClick)
    {
//imagePiceTarget has Transform type
        if (imagePieceTarget != null && imagePieceTarget != target.transform)
            imagePieceTarget.GetComponent<SpriteRenderer>().DOFade(0.7f, 0.2f);
        if (imagePieceTarget == target.transform)
        {
            imagePieceTarget.GetComponent<SpriteRenderer>().DOFade(0.7f, 0.2f);
            imagePieceTarget = null;
        }
        else
        {
            imagePieceTarget = target.transform;
            imagePieceTarget.GetComponent<SpriteRenderer>().DOFade(1f, 0.2f).OnComplete(CheckAnswer);
        }
    }
}

private void ClonePieceClickEvent(GameObject target, MouseEventType type)
{
    if (type == MouseEventType.CLICK && canClick)
    {
//clonePieceTarget has Transform type
        if (clonePieceTarget != null && clonePieceTarget != target.transform)
            clonePieceTarget.transform.DOScale(0.7f, 0.2f);
        if (clonePieceTarget == target.transform)
        {
            clonePieceTarget.transform.DOScale(0.7f, 0.2f);
            clonePieceTarget = null;
        }
        else
        {
            clonePieceTarget = target.transform;
            clonePieceTarget.transform.DOScale(1f, 0.2f).OnComplete(CheckAnswer);
        }
    }
}

Весь код в условии IF должен быть реализован в универсальном методе, а затем вызвать его.Почему я не могу сделать это, потому что первый метод вызывает метод .DOFade (), а второй метод вызывает DOScale ().Я хотел бы знать, возможно ли упростить с помощью универсального метода, спасибо.

1 Ответ

0 голосов
/ 27 ноября 2018

Я бы использовал System.Action и ключевое слово ref для решения вашей проблемы.

Попробуйте выполнить следующее:

private void PieceClickEvent(Transform target, MouseEventType type, ref Transform pieceTarget, System.Action<Transform> onFocus, System.Action<Transform> onBlur )
{
    if (type == MouseEventType.CLICK && canClick)
    {
        if (pieceTarget != null && pieceTarget != target && onBlur != null)
        {
            onBlur( pieceTarget ) ;
        }

        if (imagePieceTarget == target.transform)
        {
            if( onBlur != null )
                onBlur( pieceTarget ) ;

            pieceTarget = null;
        }
        else
        {
            pieceTarget = target;
            if( onFocus != null )
                onFocus( pieceTarget ) ;
        }
    }
}

// ...

PieceClickEvent(
    target.transform,
    type,
    ref imagePieceTarget,
    t => t.GetComponent<SpriteRenderer>().DOFade(1f, 0.2f).OnComplete(CheckAnswer),
    t => t.GetComponent<SpriteRenderer>().DOFade(0.7f, 0.2f)
);

PieceClickEvent(
    target.transform,
    type,
    ref clonePieceTarget,
    t => t.DOScale(1f, 0.2f).OnComplete(CheckAnswer),
    t => t.DOScale(0.7f, 0.2f)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...