NGUI中点击文字弹出物品的Tip

用途描述:
文字的超链接,所谓的文字的超链接,就是需要点击如下:
德玛西亚获得了[绿色盔甲],然后你点击绿色盔甲,要弹出一个物品的介绍界面。

这个需求一般的会想到的做法是,在绿色盔甲的后面创建一个透明的image,然后为image设置collider,然后编写click事件处理函数。但是绿色盔甲的id呢?因为要根据这个id去设置tip的数据呀,所以这个有点难办了。

下面的解决方法是,仿照ngui中的[url=]http://blog.csdn.net/wodownload2/article[/url]
然后再label中你看不到url这些关键字的,原因是在NGUIText.cs中,进行了处理:

switch (sub6)
{
        case "[/sub]":
            sub = 0;
            index += 6;
        return true;

        case "[/sup]":
            sub = 0;
            index += 6;
        return true;

        //这里就是过滤掉url关键字
        case "[/url]":
            index += 6;
            return true;

        //这里是自己添加的
        case "[/xxx]":
            index += 6;
            return true;
}

然后再看:

if (text[index + 1] == 'u' && text[index + 2] == 'r' && text[index + 3] == 'l' && text[index + 4] == '=')
{
            int closingBracket = text.IndexOf(']', index + 4);

            if (closingBracket != -1)
            {
                index = closingBracket + 1;
                return true;
            }
            else
            {
                index = text.Length;
                return true;
            }
}

这个就是屏蔽掉url的地方了。

仿照此处,再拷贝一份即可。比如上面添加的当遇到xxx的时候也不显示,则为:

 if (text[index + 1] == 'x' && text[index + 2] == 'x' && text[index + 3] == 'x' && text[index + 4] == '=')
{
            int closingBracket = text.IndexOf(']', index + 4);

            if (closingBracket != -1)
            {
                index = closingBracket + 1;
                return true;
            }
            else
            {
                index = text.Length;
                return true;
            }
}

最后如何获取[url=]xxxx.com[/url中的值呢?在UILabel.cs中你可以看到:

public string GetUrlAtCharacterIndex(int characterIndex)
{
     if (characterIndex != -1 && characterIndex < mText.Length - 6)
     {
            int linkStart;

            // LastIndexOf() fails if the string happens to begin with the expected text
            if (mText[characterIndex] == '[' &&
                mText[characterIndex + 1] == 'u' &&
                mText[characterIndex + 2] == 'r' &&
                mText[characterIndex + 3] == 'l' &&
                mText[characterIndex + 4] == '=')
            {
                linkStart = characterIndex;
            }
            else linkStart = mText.LastIndexOf("[req=", characterIndex);

            if (linkStart == -1) return null;

            linkStart += 5;
            int linkEnd = mText.IndexOf("]", linkStart);
            if (linkEnd == -1) return null;

            int urlEnd = mText.IndexOf("[/url]", linkEnd);
            if (urlEnd == -1 || characterIndex <= urlEnd)
                return mText.Substring(linkStart, linkEnd - linkStart);
    }
    return null;
}

这个就是获取关键字[url=]xxxx.com[/url]中的xxxx.com的方法,所以你也可以拷贝一份即可:

public string GetUrlAtCharacterIndex2(int characterIndex)
{
     if (characterIndex != -1 && characterIndex < mText.Length - 6)
     {
            int linkStart;

            // LastIndexOf() fails if the string happens to begin with the expected text
            if (mText[characterIndex] == '[' &&
                mText[characterIndex + 1] == 'x' &&
                mText[characterIndex + 2] == 'x' &&
                mText[characterIndex + 3] == 'x' &&
                mText[characterIndex + 4] == '=')
            {
                linkStart = characterIndex;
            }
            else linkStart = mText.LastIndexOf("[req=", characterIndex);

            if (linkStart == -1) return null;

            linkStart += 5;
            int linkEnd = mText.IndexOf("]", linkStart);
            if (linkEnd == -1) return null;

            int urlEnd = mText.IndexOf("[/xxx]", linkEnd);
            if (urlEnd == -1 || characterIndex <= urlEnd)
                return mText.Substring(linkStart, linkEnd - linkStart);
    }
    return null;
}

这样你就不用再考虑添加什么collider了,而是直接能够点击响应并能够获取,当前是哪个物品的id了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值