前端之家收集整理的这篇文章主要介绍了
基于cocos2dx的伪立体菜单,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
RotateMenu说明
下面这个引用自乱斗西游
设计说明
1.菜单项(MenuItem)平均分布在椭圆(类似)上
2.椭圆长轴为2/3width,短轴为2/8height
3.最前面的菜单项Scale=1,opacity=255,最后面Scale=0.5,opacity=129.其它位置根据三角函数变换(updatePosition中实现)
4.默认最前面菜单被选中(selected)
5.单位角度(unitAngle)是2*PI/菜单项的数量
6.滑动一个width,菜单旋转两个单位角度
7.Touch结束会自动调整位置,保证最前面位置有菜单项
8.滑动超过1/3单位角度会向前舍入
9.移动小于1/6单位角度会判定点击菜单
10.默认菜单大小不是全屏,而是屏幕的2/3,通过Node::setContentSize()设置
使用
使用这个菜单只要知道两个函数
1.构造函数
RotateMenu::create()(由CREATE_FUNC创建)
2.添加MenuItem
voidaddMenuItem(cocos2d::MenuItem*item);
其它函数可以看代码
相关参数的函数设置还未添加
声明
- #ifndef__ROTA__TE_MENU_H__
- #define__ROTA__TE_MENU_H__
- #include"cocos2d.h"
-
-
- */
- classRotateMenu:publiccocos2d::Layer{
- public:
- //构造方法
- CREATE_FUNC(RotateMenu);
- //添加菜单项
- voidaddMenuItem(cocos2d::MenuItem*item);
- //更新位置
- voidupdatePosition();
- //更新位置,有动画
- voidupdatePositionWithAnimation();
- //位置矫正修改角度forward为移动方向当超过1/3,进1
- //true为正向false负
- voidrectify(boolforward);
- //初始化
- virtualboolinit();
- //重置操作有旋转角度设为0
- voidreset();
- private:
- //设置角度弧度
- voidsetAngle(floatangle);
- floatgetAngle();
- //设置单位角度弧度
- voidsetUnitAngle(floatangle);
- floatgetUnitAngle();
- //滑动距离转换角度,转换策略为移动半个Menu.width等于_unitAngle
- floatdisToAngle(floatdis);
- //返回被选中的item
- cocos2d::MenuItem*getCurrentItem();
- private:
- //菜单已经旋转角度弧度
- float_angle;
- //菜单项集合,_children顺序会变化,新建数组保存顺序
- cocos2d::Vector<cocos2d::MenuItem*>_items;
- //单位角度弧度
- float_unitAngle;
- //监听函数
- boolonTouchBegan(cocos2d::Touch*touch,cocos2d::Event*event);
- virtualvoidonTouchEnded(cocos2d::Touch*touch,cocos2d::Event*event);
- voidonTouchMoved(cocos2d::Touch*touch,0); background-color:inherit">//动画完结调用函数
- voidactionEndCallBack(floatdx);
- //当前被选择的item
- cocos2d::MenuItem*_selectedItem;
- //动画运行时间
- floatanimationDuration=0.3f;
- };
- #endif
实现
@H_865_
502@copy