l

成都手游码农一枚
随笔 - 32, 文章 - 0, 评论 - 117, 引用 - 0
数据加载中……

[cocos2d-x]卡牌3D选择效果。

放几张牌,左右滑动,选中的在前,未选中的依次在后。
这里指说下思路,代码是公司写的,贴不上。

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 哦。

posted on 2013-07-10 22:08 l1989 阅读(2939) 评论(0)  编辑 收藏 引用 所属分类: C++游戏


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理