****************************************************************************
时间:2015-04-06
作者:Sharing_Li
转载注明出处:http://www.jb51.cc/article/p-eymwalux-rx.html
一般游戏的主界面按钮的摆放,都是中心垂直对齐,如果弄得稍微炫一点,就是下面的这种效果,也就是本篇要讲解的内容:
先分析一下功能需求:
1、一共四个按钮,只有点击了最前面的按钮,按钮的响应事件才能触发,点击了其他按钮,则旋转到最前面。
2、点击了除最前面的按钮外的动画效果,和左右滑动时的动画效果。(大小,透明度,运动轨迹)
3、左右滑动到途中时松手时的动画调整。
4、按钮Z序的调整
5、滑动区域的限制
接下来看看代码怎么写:
定义一个类BtnTurn,来看头文件
- #ifndef__BTN_TURN_H__
- #define__BTN_TURN_H__
- #include"cocos2d.h"
- USING_NS_CC;
- enumBtnPos
- {
- Pos_Bottom=1,
- Pos_Left,
- Pos_Top,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> Pos_Right,248)"> };
- classBtnTurn:publiccocos2d::Layer
- {
- public:
- BtnTurn();
- ~BtnTurn();
- virtualboolinit();
- CREATE_FUNC(BtnTurn)
- protected:
- boolonTouchBegan(Touch*touch,Event*pEvent);
- virtualvoidonTouchMoved(Touch*pTouch,Event*pEvent);
- voidonTouchEnded(Touch*pTouch,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> //点击按钮之后的动画
- voidrunTouchedAmt(Sprite*btn);
- //滑动界面的动画
- voidrunSlidedAmt(boolisLeft,floatratio,87); font-weight:bold; background-color:inherit">floatjudgePosX);
- private:
- Sprite*m_btn1;
- Sprite*m_btn2;
- Sprite*m_btn3;
- Sprite*m_btn4;
- Vec2m_posBottom;
- Vec2m_posLeft;
- Vec2m_posTop;
- Vec2m_posRight;
- Pointm_firstPos;
- Sizem_winSize;
- boolm_valid;//先点击有效区域
- boolm_invalid;//先点击无效区域
- #endif
这里最主要的核心代码就是沿椭圆轨迹旋转效果,之前有篇文章讲解了沿椭圆运动的动画,可以像用系统的MoveTo等使用runAction,参考地址:
http://www.jb51.cc/article/p-fmhyjmnl-rx.html
首先,我们定义一些全局数据: