放幾張牌,左右滑動,選中的在前,未選中的依次在后。
這里指說下思路,代碼是公司寫的,貼不上。
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 哦。