最近在玩部落冲突,看到其中有一种比较好的讲解角色技能的展现方式,就是在角色的那个图标某个角角上,例如右上角,有一个感叹号的图标,点击就可以弹出相关的信息介绍弹窗,这种展现方式比较节省空间,也直接,于是考虑了一下实现方式,由此引申出本文要讨论的一些问题。
其实实现这样的呈现方式最主要的问题就是在于怎样找到图标的右上角,很直接的一个想法就是,首先我们可以获得图标的位置,然后计算出这个感叹号的位置,我们可以列举出这样一个计算公式:
假设图标的位置为pos(x1,y1),图标的大小为高h1,宽w1,感叹号图标的高为h2,宽w2,则感叹号图标的纵坐标为:
y2 = y1 + h1/2 - h2/2
这里我们默认描点在图标中心,先减去图标自身二分之一的高度,使位置到图标的最上端,如果使用这个位置,将导致感叹号图标的超出图标的感叹号图标高度的一半,因为描点在中心,所以我们再减去这个部分,就可以设置好高度。
同理,横坐标可以根据如下公式计算得到:
x2 = x1 + w1/2 - w2/2
有了这样的计算公式,接下来我们的问题就是如果获得精灵的长宽。
我们先看看第一种方案,cocos2dx给我们提供了这样一个函数:getContentSize(),通过这个函数我们可以获得精灵原始的长宽,这里为什么要说原始,因为我们在使用精灵的时候经常会对其进行缩放操作,当发生缩放操作后,这个函数返回的值就失效了,如果要进行修正也比较简单,将getContentSize()获得的高度和宽度乘以精灵的缩放系数就可以了。
第二种方案我没有进行过测试,不过理论上是可以的,cocos2dx中有boundingBox 这个函数所获得的,就是精灵缩放后的大小了,后面我也会进行测试,大家也可以试试。