放几张牌,左右滑动,选中的在前,未选中的依次在后。
这里指说下思路,代码是公司写的,贴不上。
1.投影要启用 3D,可以再渲染前启用,渲染后还原。
2.开启深度测试, 大致流程
void visit()
{
GLboolean enable = glIsEnabled(GL_DEPTH_TEST);
if (!enable)
{
glEnable(GL_DEPTH_TEST);
}
CCLayer::visit();
if (!enable)
{
glDisable(GL_DEPTH_TEST);
}
}
3.计算,根据效果可能有不同的计算方式,比如可以通过三角函数来计算x,z值
void update(angle)
{
for(i, node in nodes)
{
float x = cos(angle + dAngle * i);
float z = sin(angle + dAngle * i);
node->setPositionX(x * 100);
node->setVertexZ((z - 1) * 0.5 * 100); // 将最顶层z计算为0
}
}
这样是圆形,如果后面不想为圆形,则可以判断
if (z < 0)
{
if (x < 0)
{
node->setPositionX((- 2 + x) * -z * 150);
}
else
{
node->setPositionX((-2 - x) * -z * 150);
}
}
大致这样就可以把后面展开不像圆形。
也可以通过 y = -(x * x) + 1 来计算x[-1, 1]的抛物线,然后超出x取值不显示,这样也可以实现一种左右选择高亮弹出的3D效果。
补充:可能存在透视的问题需要修正,可以通过调整 visit 中获取 Camera 来调整,记得要还原 Camera 哦。